在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);
            }
    }

     

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lansonli

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值