zhanglinxin 1 year ago
parent
commit
0cb7770085

+ 9 - 22
application/api/controller/Dingtalk.php

@@ -2,6 +2,7 @@
 namespace app\api\controller;
 
 use app\common\model\User;
+use app\common\service\DingtalkService;
 use think\Db;
 use hg\apidoc\annotation as Apidoc;
 
@@ -25,11 +26,13 @@ class Dingtalk extends Base
      */
     public function get_department(){
         $parent_id = input('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");
+
+        $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;
     }
 
@@ -47,11 +50,6 @@ class Dingtalk extends Base
         $req->setDeptId($dept_id);
         $resp = $c->execute($req, $obj['access_token'], "https://oapi.dingtalk.com/topapi/v2/department/get");
         p($resp);exit;
-        $name = '';
-        if(isset($resp->result) && $resp->result){
-            $name = $resp->result->name;
-        }
-        return $name;
     }
 
     /**
@@ -70,11 +68,6 @@ class Dingtalk extends Base
         $req->setSize("100");
         $resp = $c->execute($req, $obj['access_token'], "https://oapi.dingtalk.com/topapi/v2/user/list");
         p($resp);exit;
-        $user_list = array();
-        if(isset($resp->result) && $resp->result && $resp->result->list){
-            $user_list = $resp->result->list;
-        }
-        return $user_list;
     }
 
     /**
@@ -90,13 +83,7 @@ class Dingtalk extends Base
         $req = new \OapiV2UserGetRequest;
         $req->setUserid($userid);
         $resp = $c->execute($req, $obj['access_token'], "https://oapi.dingtalk.com/topapi/v2/user/get");
-        if($resp->errcode == 0){
-            p($resp->errcode);
-            p($resp->errmsg);
-            p($resp->result);
-        } else{
-            p($resp);
-        }
+        p($resp);exit;
     }
 
     public function get_user($userid){

+ 36 - 0
application/common/service/DingtalkService.php

@@ -0,0 +1,36 @@
+<?php
+
+namespace app\common\service;
+
+use app\extend\Dingtalk\Sample;
+
+/**
+ * 钉钉服务类
+ */
+class DingtalkService
+{
+
+    public static function get_obj()
+    {
+        require_once env('root_path') . '/vendor/dingapi/TopSdk.php';
+        date_default_timezone_set('Asia/Shanghai');
+        $c = new \DingTalkClient(\DingTalkConstant::$CALL_TYPE_OAPI, \DingTalkConstant::$METHOD_POST, \DingTalkConstant::$FORMAT_JSON);
+        return $c;
+    }
+
+    /**
+     * 获取部门列表
+     *
+     * @param integer $parent_id 父部门ID
+     */
+    public static function department_listsub($parent_id)
+    {
+        $accessToken = Sample::main()['accessToken'];
+        $c = self::get_obj();
+        $req = new \OapiV2DepartmentListsubRequest;
+        $req->setDeptId($parent_id);
+        $resp = $c->execute($req, $accessToken, "https://oapi.dingtalk.com/topapi/v2/department/listsub");
+        return $resp;
+    }
+
+}

+ 67 - 0
application/extend/Dingtalk/Sample.php

@@ -0,0 +1,67 @@
+<?php
+namespace app\extend\Dingtalk;
+
+use AlibabaCloud\SDK\Dingtalk\Voauth2_1_0\Dingtalk;
+use \Exception;
+use AlibabaCloud\Tea\Exception\TeaError;
+use AlibabaCloud\Tea\Utils\Utils;
+use Darabonba\OpenApi\Models\Config;
+use AlibabaCloud\SDK\Dingtalk\Voauth2_1_0\Models\GetAccessTokenRequest;
+use think\cache\driver\Redis;
+
+class Sample
+{
+
+    /**
+     * 使用 Token 初始化账号Client
+     * @return Dingtalk Client
+     */
+    public static function createClient(){
+        $config = new Config([]);
+        $config->protocol = "https";
+        $config->regionId = "central";
+        return new Dingtalk($config);
+    }
+
+    /**
+     * 获取企业内部应用的accessToken
+     **/
+    public static function main()
+    {
+        $options = config('redis.');
+        $redis = new Redis($options);
+        $key = 'dingtalk_access_token';
+        $access_token_data = $redis->get($key);
+        if ($access_token_data) {
+            return json_decode($access_token_data, true);
+        }
+
+        $client = self::createClient();
+        $getAccessTokenRequest = new GetAccessTokenRequest([
+            "appKey" => "dingekepwoyycxfbtyvg",
+            "appSecret" => "EjM9WohvKHo3eNqZGGbQHhbjM80QzapdC_f_reYiOCyEFOtaG1qoG2KzEfpSoLWe"
+        ]);
+        try {
+            $res = $client->getAccessToken($getAccessTokenRequest);
+        }
+        catch (Exception $err) {
+            if (!($err instanceof TeaError)) {
+                $err = new TeaError([], $err->getMessage(), $err->getCode(), $err);
+            }
+            if (!Utils::empty_($err->code) && !Utils::empty_($err->message)) {
+                // err 中含有 code 和 message 属性,可帮助开发定位问题
+            }
+        }
+
+        if($res->body){
+            $data = [
+                'accessToken'=>$res->body->accessToken,
+                'expireIn'=>$res->body->expireIn,
+            ];
+            $redis->set($key, json_encode($data), 7000);
+            return $data;
+        } else{
+            return false;
+        }
+    }
+}