在Lumen中引入釘釘SDK

最近在用Lumen開發釘釘企業內部應用,需要調用釘釘的SDK。不得不說,釘釘開發文檔寫的真是感人,開發的時候那是相當刺激。在使用SDK的時候遇到不少坑,釘釘的文檔寫的不是很詳細,記錄下在Laravel中集成DingTalk SDK的方法:

1.首先在http://open-doc.dingtalk.com/microapp/serverapi2/vzzrkv中下載PHP版本SDK。解壓後文件目錄如圖
這裏我只用到dingtalk中的文件,刪除aliyun、QimenCloud目錄,保留top目錄Autoloader.php和TopSdk.php文件。

  1. 在composer.json中:
        "autoload": {
            "classmap": [
                "database"
            ],
            "files":[
                "app/Packages/taobao/TopSdk.php"
            ],
            "psr-4": {
                "App\\": "app/"
            }
    
        },

    然後執行composer dump-autoload

  2. 執行完畢後,在Controller中就可以直接使用DingTalk SDK了。測試結果如下(注意要加‘ \ ’):
    $c = new \DingTalkClient(\DingTalkConstant::$CALL_TYPE_OAPI,\DingTalkConstant::$METHOD_POST , \DingTalkConstant::$FORMAT_JSON);
    var_dump($c);

    打印出結果如下:

    object(DingTalkClient)#276 (9) { ["gatewayUrl"]=> string(34) "http://eco.taobao.com/router/rest" ["format"]=> string(4) "json" ["connectTimeout"]=> NULL ["readTimeout"]=> NULL ["apiCallType"]=> string(4) "oapi" ["httpMethod"]=> string(4) "POST" ["checkRequest"]=> bool(true) ["apiVersion":protected]=> string(3) "2.0" ["sdkVersion":protected]=> string(25) "dingtalk-sdk-php-20161214" }

     

遇到的坑:

  1. 在調用DingTalkClient的execute方法獲取token的時候,報錯如下:
    Missing argument 7 for DingTalkClient::_executeOapi(), called in /Web/proj/app/Packages/taobao/dingtalk/DingTalkClient.php on line 328 and defined
    

    查看DingTalkClient.php文件,328行

     public function execute($request, $session = null,$bestUrl = null){
            if(DingTalkConstant::$CALL_TYPE_OAPI == $this->apiCallType){
                return $this->_executeOapi($request, $session, $bestUrl, null, null, null); 
            }else{
                return $this->_execute($request, $session, $bestUrl);
            }
    }

    查看_executeOapi方法的代碼:

    private function _executeOapi($request, $session = null,$bestUrl = null,$accessKey, $accessSecret, $suiteTicket, $corpId)

    此處發現_executeOapi方法需要傳7個參數,而在execute中只傳了6個參數。修改後的代碼如下:

      public function execute($request, $session = null,$bestUrl = null){
            if(DingTalkConstant::$CALL_TYPE_OAPI == $this->apiCallType){
                return $this->_executeOapi($request, $session, $bestUrl, null ,null, null, null);
            }else{
                return $this->_execute($request, $session, $bestUrl);
            }
    }

     

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章