zhanglinxin 1 year ago
parent
commit
ca67dff08b

+ 7 - 51
application/api/controller/Dingtalk.php

@@ -24,15 +24,9 @@ class Dingtalk extends Base
      * @Apidoc\Method("POST")
      * @Apidoc\Param("parent_id", type="string",require=true, desc="父部门ID")
      */
-    public function get_department(){
+    public function department_listsub(){
         $parent_id = input('parent_id');
-
         $resp = DingtalkService::department_listsub($parent_id);
-//        $obj = $this->get_obj();
-//        $c = $obj['obj'];
-//        $req = new \OapiV2DepartmentListsubRequest;
-//        $req->setDeptId($parent_id);
-//        $resp = $c->execute($req, $obj['access_token'], "https://oapi.dingtalk.com/topapi/v2/department/listsub");
         p($resp);exit;
     }
 
@@ -42,13 +36,9 @@ class Dingtalk extends Base
      * @Apidoc\Method("POST")
      * @Apidoc\Param("dept_id", type="string",require=true, desc="部门ID")
      */
-    public function get_department_name(){
+    public function department_get(){
         $dept_id = input('dept_id');
-        $obj = $this->get_obj();
-        $c = $obj['obj'];
-        $req = new \OapiV2DepartmentListsubRequest;
-        $req->setDeptId($dept_id);
-        $resp = $c->execute($req, $obj['access_token'], "https://oapi.dingtalk.com/topapi/v2/department/get");
+        $resp = DingtalkService::department_get($dept_id);
         p($resp);exit;
     }
 
@@ -58,15 +48,9 @@ class Dingtalk extends Base
      * @Apidoc\Method("POST")
      * @Apidoc\Param("dept_id", type="string",require=true, desc="部门ID")
      */
-    public function get_user_list(){
+    public function user_list(){
         $dept_id = input('dept_id');
-        $obj = $this->get_obj();
-        $c = $obj['obj'];
-        $req = new \OapiV2UserListRequest;
-        $req->setDeptId($dept_id);
-        $req->setCursor("0");
-        $req->setSize("100");
-        $resp = $c->execute($req, $obj['access_token'], "https://oapi.dingtalk.com/topapi/v2/user/list");
+        $resp = DingtalkService::user_list($dept_id);
         p($resp);exit;
     }
 
@@ -78,23 +62,10 @@ class Dingtalk extends Base
      */
     public function get_users(){
         $userid = input('userid');
-        $obj = $this->get_obj();
-        $c = $obj['obj'];
-        $req = new \OapiV2UserGetRequest;
-        $req->setUserid($userid);
-        $resp = $c->execute($req, $obj['access_token'], "https://oapi.dingtalk.com/topapi/v2/user/get");
+        $resp = DingtalkService::user_get($userid);
         p($resp);exit;
     }
 
-    public function get_user($userid){
-        $obj = $this->get_obj();
-        $c = $obj['obj'];
-        $req = new \OapiV2UserGetRequest;
-        $req->setUserid($userid);
-        $resp = $c->execute($req, $obj['access_token'], "https://oapi.dingtalk.com/topapi/v2/user/get");
-        return $resp;
-    }
-
     //获取用户列表
     public function get_member(){
         $list = User::select();
@@ -102,7 +73,7 @@ class Dingtalk extends Base
         $no_user_list = [];
         $user_list = [];
         foreach ($list as $value){
-            $resp = $this->get_user($value['userid']);
+            $resp = DingtalkService::user_get($value['userid']);
             if($resp->errcode == 0){
                 $user_list[$resp->result->userid] = [
                     'userid'=>$resp->result->userid,
@@ -126,19 +97,4 @@ class Dingtalk extends Base
             User::where('userid','in',array_keys($no_user_list))->update(['is_deleted'=>1]);
         }
     }
-
-    // 通过免登码获取用户信息
-    public function get_user_info($code){
-        $obj = $this->get_obj();
-        $c = $obj['obj'];
-        $req = new \OapiV2UserGetuserinfoRequest;
-        $req->setCode($code);
-        $resp = $c->execute($req, $obj['access_token'], "https://oapi.dingtalk.com/topapi/v2/user/getuserinfo");
-        p($resp);exit();
-        $user_info = array();
-        if(isset($resp->result) && $resp->result){
-            $user_info = $resp->result->dept_id_list;
-        }
-        return $user_info;
-    }
 }

+ 29 - 23
application/api/controller/Login.php

@@ -1,50 +1,56 @@
 <?php
+
 namespace app\api\controller;
+
+use app\common\service\DingtalkService;
+use app\common\model\User;
 use Firebase\JWT\JWT;
-use think\Db;
 use hg\apidoc\annotation as Apidoc;
-use app\api\controller\Dingtalk;
+
 /**
- * @Apidoc\Title("登录模块")
+ * @Apidoc\Title("登录")
  * @Apidoc\Group("api")
+ * @Apidoc\Sort("0")
  */
 class Login extends Base
 {
 
     /**
-     * @Apidoc\Title("登录")
-     * @Apidoc\Desc("登录")
-     * @Apidoc\Method("GET")
-     * @Apidoc\Author("HG")
-     * @Apidoc\Tag("登录")
-     * @Apidoc\Query("code", type="string",require=true, desc="钉钉授权code值")
+     * 登录
+     *
+     * @Apidoc\Method("POST")
+     * @Apidoc\Param("code", type="string",require=true, desc="免登授权码")
      * @Apidoc\Returned("data", type="string", desc="用户token")
      */
     public function login(){
         $code = input('code');
-        if(empty($code)){
-            $this->error('参数错误');
+        if(!$code){
+            $this->error('授权码错误');
         }
-        $user = (new Dingtalk())->get_user_info($code);
-        if(empty($user)){
-            $this->error('授权失败');
+
+        $resp = DingtalkService::get_user_info($code);
+        if($resp->errcode != 0){
+            $this->error($resp->errcode.' '.$resp->errmsg);
         }
-        $member_id = Db::name('store_member')->where('userid',$user->userid)->value('id');
-        if(empty($member_id)){
+
+        $user = User::where('userid',$resp->result->userid)->value('id');
+        if(!$user){
             $this->error('不是内部人员');
         }
-        $token = $this->create_jwt($member_id);
+
+        $token = $this->create_jwt($user);
         $this->success('登录成功',$token);
     }
 
     /**
-     * @Apidoc\Title("获取token")
-     * @Apidoc\Method("GET")
-     * @Apidoc\Query("uid", type="string",require=true, desc="userid")
-     * @Apidoc\Returned("token", type="string", desc="用户token")
+     * 获取token
+     *
+     * @Apidoc\Method("POST")
+     * @Apidoc\Query("uid", type="string",require=true, desc="用户ID")
+     * @Apidoc\Returned("data", type="string", desc="用户token")
      */
-    public function  get_token(){
-        $uid = input('uid',1);
+    public function get_token(){
+        $uid = input('uid');
         $token = $this->create_jwt($uid);
         $this->success('获取成功',$token);
     }

+ 68 - 1
application/common/service/DingtalkService.php

@@ -21,7 +21,8 @@ class DingtalkService
     /**
      * 获取部门列表
      *
-     * @param integer $parent_id 父部门ID
+     * @param string $parent_id 父部门ID
+     * @return mixed
      */
     public static function department_listsub($parent_id)
     {
@@ -33,4 +34,70 @@ class DingtalkService
         return $resp;
     }
 
+    /**
+     * 获取部门详情
+     *
+     * @param string $dept_id 部门ID
+     * @return mixed
+     */
+    public static function department_get($dept_id)
+    {
+        $accessToken = Sample::main()['accessToken'];
+        $c = self::get_obj();
+        $req = new \OapiV2DepartmentListsubRequest;
+        $req->setDeptId($dept_id);
+        $resp = $c->execute($req, $accessToken, "https://oapi.dingtalk.com/topapi/v2/department/get");
+        return $resp;
+    }
+
+    /**
+     * 获取部门用户详情
+     *
+     * @param string $dept_id 部门ID
+     * @return mixed
+     */
+    public static function user_list($dept_id)
+    {
+        $accessToken = Sample::main()['accessToken'];
+        $c = self::get_obj();
+        $req = new \OapiV2UserListRequest;
+        $req->setDeptId($dept_id);
+        $req->setCursor("0");
+        $req->setSize("100");
+        $resp = $c->execute($req, $accessToken, "https://oapi.dingtalk.com/topapi/v2/user/list");
+        return $resp;
+    }
+
+    /**
+     * 查询用户详情
+     *
+     * @param string $userid 用户的userId
+     * @return mixed
+     */
+    public static function user_get($userid)
+    {
+        $accessToken = Sample::main()['accessToken'];
+        $c = self::get_obj();
+        $req = new \OapiV2UserGetRequest;
+        $req->setUserid($userid);
+        $resp = $c->execute($req, $accessToken, "https://oapi.dingtalk.com/topapi/v2/user/get");
+        return $resp;
+    }
+
+    /**
+     * 通过免登码获取用户信息
+     *
+     * @param string $code 免登授权码
+     * @return mixed
+     */
+    public static function get_user_info($code)
+    {
+        $accessToken = Sample::main()['accessToken'];
+        $c = self::get_obj();
+        $req = new \OapiV2UserGetuserinfoRequest;
+        $req->setCode($code);
+        $resp = $c->execute($req, $accessToken, "https://oapi.dingtalk.com/topapi/v2/user/getuserinfo");
+        return $resp;
+    }
+
 }

+ 8 - 7
application/extend/Dingtalk/Sample.php

@@ -1,4 +1,5 @@
 <?php
+
 namespace app\extend\Dingtalk;
 
 use AlibabaCloud\SDK\Dingtalk\Voauth2_1_0\Dingtalk;
@@ -16,7 +17,8 @@ class Sample
      * 使用 Token 初始化账号Client
      * @return Dingtalk Client
      */
-    public static function createClient(){
+    public static function createClient()
+    {
         $config = new Config([]);
         $config->protocol = "https";
         $config->regionId = "central";
@@ -43,8 +45,7 @@ class Sample
         ]);
         try {
             $res = $client->getAccessToken($getAccessTokenRequest);
-        }
-        catch (Exception $err) {
+        } catch (Exception $err) {
             if (!($err instanceof TeaError)) {
                 $err = new TeaError([], $err->getMessage(), $err->getCode(), $err);
             }
@@ -53,14 +54,14 @@ class Sample
             }
         }
 
-        if($res->body){
+        if ($res->body) {
             $data = [
-                'accessToken'=>$res->body->accessToken,
-                'expireIn'=>$res->body->expireIn,
+                'accessToken' => $res->body->accessToken,
+                'expireIn' => $res->body->expireIn,
             ];
             $redis->set($key, json_encode($data), 7000);
             return $data;
-        } else{
+        } else {
             return false;
         }
     }