{"id":18896592,"url":"https://github.com/buptlsp/yii2-dingtalk","last_synced_at":"2025-04-15T01:51:48.887Z","repository":{"id":62519457,"uuid":"55506471","full_name":"buptlsp/yii2-dingtalk","owner":"buptlsp","description":"yii2钉钉接口","archived":false,"fork":false,"pushed_at":"2020-02-27T07:55:34.000Z","size":40,"stargazers_count":23,"open_issues_count":1,"forks_count":11,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-15T01:51:43.721Z","etag":null,"topics":["dingding","dingtalk","yii","yii2"],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/buptlsp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-04-05T12:35:59.000Z","updated_at":"2022-11-11T14:59:41.000Z","dependencies_parsed_at":"2022-11-02T10:31:10.952Z","dependency_job_id":null,"html_url":"https://github.com/buptlsp/yii2-dingtalk","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buptlsp%2Fyii2-dingtalk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buptlsp%2Fyii2-dingtalk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buptlsp%2Fyii2-dingtalk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buptlsp%2Fyii2-dingtalk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/buptlsp","download_url":"https://codeload.github.com/buptlsp/yii2-dingtalk/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248991538,"owners_count":21194894,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dingding","dingtalk","yii","yii2"],"created_at":"2024-11-08T08:34:34.913Z","updated_at":"2025-04-15T01:51:48.863Z","avatar_url":"https://github.com/buptlsp.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# yii2-dingtalk\n========================\n\nyii2框架的钉钉API接口\n\n本框架提供了对钉钉API接口的封装，具体的API页面访问[钉钉API接口](http://ddtalk.github.io/dingTalkDoc/)\n\nFor license information check the [LICENSE](LICENSE.md)-file.\n在此处可以查看本扩展的[许可](LICENSE.md)\n\n\n安装\n------------\n\n推荐的方式是通过composer 进行下载安装[composer](http://getcomposer.org/download/)。\n\n在命令行执行\n```\nphp composer.phar require \"lspbupt/yii2-dingtalk\" \"\u003e=1.1.1\"\n```\n\n或加入\n\n```\n\"lspbupt/yii2-dingtalk\": \"\u003e=1.1.1\"\n```\n\n到你的`composer.json`文件中的require段。\n\n使用\n-----\n\n**钉钉配置** \n\n一旦你安装了这个插件，你就可以直接在yii2的配置文件中加入如下的代码：\n\n\n```php\nreturn [\n    'components' =\u003e [\n        'dingtalk' =\u003e [\n             'class' =\u003e '\\lspbupt\\dingtalk\\Dingtalk',\n             'agentid' =\u003e '', //您的应用的agentid\n             'corpid' =\u003e '',  //您的企业corpid\n             'corpsecret' =\u003e '', //您的企业的corpsecret\n        ],\n        // ....\n    ],\n];\n```\n\n**后端接口访问**\n\n在配置好之后，你可以这么访问它：\n```php\n//在代码中实现了少量的接口，后续会不断补充，示例如：\n\n// 下述代码会获取当前企业的部门列表\n$data = Yii::$app-\u003edingtalk-\u003egetDepartmentList();\n\n//下述代码会给用户id为1的用户发一条测试的钉钉消息\n$data = Yii::$app-\u003edingtalk-\u003esendTextMsg(1, \"\", \"测试一下企业消息\");\n```\n\n**后端接口返回**\n\n本接口将钉钉的返回进行了包装，无论任何情况（如网络超时，接口挂掉等），返回的结果均为json格式，且一定拥有errcode和errmsg字段，因此，使用方可以简单地根据errcode来判断接口的返回。\n\n```javascript\n{\n    \"errcode\":0,     // 0代表正确，非0代表失败\n    \"errmsg\":\"errinfo\",  // 具体的错误信息\n    //... ,其它钉钉接口返回的额外信息  \n}\n```\n\n**其它接口调用**\n\n由于钉钉的接口众多，因此想一一实现也是一件特别繁琐的事情，但是本扩展依旧提供了一个方便的方法来调用它：\n```php\n//通过GET方法获取dingding的企业部门列表\n$data = Yii::$app-\u003edingtalk-\u003esetGet()-\u003ehttpExec(\"/department/list\", []);\n//通过POST JOSN来发送钉钉消息\n$data = Yii::$app-\u003edingtalk-\u003esetPostJson()-\u003ehttpExec(\"/message/send\", [\n    'touser' =\u003e $user,\n    'toparty' =\u003e $toparty,\n    'agentid' =\u003e Yii::$app-\u003edingtalk-\u003eagentid,\n    'msgtype' =\u003e 'text',\n    'text' =\u003e [\n        'content' =\u003e '测试一下企业消息'\n    ],\n]);\n```\n\n**[app端Js调用][1]**\n\n本插件依旧提供了JSAPI的一些封装,本例将会以app的免登的JS来举例子，在某页面上需要免登时，你只需要在页面上添加如下的代码：\n```php\necho \\lspbupt\\dingtalk\\JsapiConfig::widget([\n    'jsApiList' =\u003e [\"runtime.permission.requestAuthCode\"], //本页面需要使用的jsapi,本例中为免登服务\n    'successJs' =\u003e 'function(){ //jsapi配置好后执行的JS回调，我们可以在此处开始写执行的代码\n         dd.runtime.permission.requestAuthCode({\n             corpId: \"'.\\Yii::$app-\u003edingtalk-\u003ecorpid.'\",\n             onSuccess: function(result) {\n                 $.ajax({\n                     url: \"\", //此处填上根据code登录的url\n                     data: {\n                         code: result.code\n                     },\n                     success: function(data){  //处理成功请求\n                     },\n                 });\n             },\n             onFail : function(err) {\n                 //alert(err.errmsg);\n             }\n         });\n    }',\n    //'errorJs' =\u003e 'function(){}', //错误时的JS,默认会输出错误的信息\n]);\n```\n按钉钉的说明做好使用code登录的后台接口，即可实现页面免登。\n\n**[PC端Js调用][2]**\n\n  使用方式与上述app端一致，调用JsapiPcConfig即可,如下依旧以免登作为示例：\n  \n  ```php\n    echo \\lspbupt\\dingtalk\\widgets\\JsapiPcConfig::widget([\n        'jsApiList' =\u003e [\"runtime.permission.requestAuthCode\"],\n        'successJs' =\u003e 'function(){\n            //参见上节\n        }',\n    ]);\n  ```\n\n**[扫码登录][3]**\n\n扫码登录不是使用dingtalk的一套规则，而是使用app的一套规则，首先去钉钉后台添加app，并配置好redirectUrl。然后在config中添加如下的配置：\n\n```php\nreturn [\n    'components' =\u003e [\n        'dingapp' =\u003e [\n             'class' =\u003e '\\lspbupt\\dingtalk\\DingApp',\n             'appid' =\u003e '',     // appid\n             'appsecret' =\u003e '',  // appsecret\n             'redirectUrl' =\u003e \"\", //登录成功后跳回的地址\n         ],\n        // ....\n    ],\n];\n```\n然后在页面上按钉钉的规则，引入js，并展示二维码,当用户扫描时，回跳转到你的url,你在action中可以这样获取用户信息\n\n```php\n$ret = Yii::$app-\u003edingapp-\u003egetUserInfoByTmpCode($code, $userInfo);\nif($ret) {\n    //代表不成功，$ret代表错误信息\n}\n// $userInfo中有用户的信息，可以根据$userInfo来获取用户，并执行登录操作\n```\n\n**[消息回调][4]**\n\n正常情况下，钉钉会有一些回调，这些回调需要在action中解密，过程很麻烦，本代码提供了一个便利的方式来使用。\n在config中加入如下的配置：\n\n```php\nreturn [\n    'components' =\u003e [\n        'dingcrypt' =\u003e [\n            'class' =\u003e '\\lspbupt\\dingtalk\\helpers\\CryptHelper',\n            'aesKey' =\u003e '', // aeskey\n            'token' =\u003e '',  //加密的token\n        ],\n        // 其它配置 \n    ],\n]\n```\n\n在注册成功的回调的controller中加入如下的代码即可：\n\n```php\npublic class xxController extends Controller\n{\n    public function behaviors()\n    {\n        return [\n            'dingcallback' =\u003e [\n                'class' =\u003e \\lspbupt\\dingtalk\\filters\\CallbackFilter::className(),\n                'actions' =\u003e ['index'], //你需要钉钉处理解密的请求\n            ],\n        ],\n    }\n    \n    public function xxAction()\n    {\n        //获取钉钉传过来的数据进行处理\n        $postArr = Yii::$app-\u003erequest-\u003epost();\n    }\n}\n```\n如上所示，你不需要关心钉钉是如何加解密的，也不需要关心他传过来的数据格式，系统会自动解密并将它传过来的xml转换成php的arr，直接在post()中取即可。\n\n\n\n如有任何问题，欢迎联系我（lspbupt@sina.com）。祝使用愉快!\n\n\n  [1]: https://open-doc.dingtalk.com/docs/doc.htm?spm=0.0.0.0.RembXi\u0026treeId=171\u0026articleId=104906\u0026docType=1\n  [2]: https://open-doc.dingtalk.com/docs/doc.htm?spm=0.0.0.0.RembXi\u0026treeId=176\u0026articleId=106255\u0026docType=1\n  [3]: https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7629140.0.0.i2zeN5\u0026treeId=168\u0026articleId=104882\u0026docType=1\n  [4]: https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7629140.0.0.eOiJu9\u0026treeId=385\u0026articleId=104975\u0026docType=1\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbuptlsp%2Fyii2-dingtalk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbuptlsp%2Fyii2-dingtalk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbuptlsp%2Fyii2-dingtalk/lists"}