# php-dingtalk **Repository Path**: debugheng/php-dingtalk ## Basic Information - **Project Name**: php-dingtalk - **Description**: php钉钉扩展包 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-10 - **Last Updated**: 2026-01-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

EasyDingTalk

原项目地址:chinakaiyuan/dingtalk 由于原项目停止维护了,暂时先copy一份下来,修修。支持laravel9 ## 当前食用方式 composer require leeh/php-dingtalk ## 环境要求 - PHP 7.1+ - Composer ## 文档 https://www.kancloud.cn/chinakaiyuan/dingtalk-sdk/ ## 实例化 :::warning 文档中提及到的 `$app` 表示的是如下实例化后的 `EasyDingTalk\Application` 实例,就不在每个模块中描述了 ::: ```php {4-23} use EasyDingTalk\Application; $config = [ //**配置文件分钉钉配置项,和程序配置项目 /* |----------------------------------------------------------- | 【必填】企业 corpId 钉钉配置项目 |----------------------------------------------------------- */ 'corp_id' => 'XXXXXX', /* |----------------------------------------------------------- | 【选填】后台免登配置信息 钉钉配置项目 |----------------------------------------------------------- | 如果你用到应用管理后台免登功能,需要配置该项 */ 'sso_secret' => 'XXXXXX', //以下三个是 H5,小程序,机器人默认公有项,如果app 不设置或者设置了没用使用,默认调用此配置, "agentid" => "XXXXXX", "app_key" => "XXXXXX", "app_secret" => "XXXXXX", //小程序配置项目 "miniappid"=>"xxxxxx", //H5,小程序 订阅配置项目 "aes_key" => "XXXXXX", "token" => "XXXXXX", 'app'=>[ 'robot01'=>[ //以下三个是 H5,小程序,机器人公有项 'kind'=>'robot',//必填 "agentid" => "XXXXXX", "app_key" => "XXXXXX", "app_secret" => "XXXXXX", //小程序配置项目 "miniappid"=>"xxxxxx", //H5,小程序 订阅配置项目 "aes_key" => "XXXXXX", "token" => "XXXXXX", ], 'MFC'=>[ 'kind' => 'app', //必填 // or 'app_id' 'client_id' => 'XXXXX', // or 'app_secret' 'client_secret' => 'XXXXXXXXXXXXXXXXXXXXXX', // or 'redirect_url' 'redirect' => 'https://www.XXX.com/', 'scope' => 'snsapi_login', ] ] ]; $app = new Application($config); $app_robot=$app->robot01; //返回robot01 配置的机器人 、、、或者 $app_robot=Application::robot01($config);//返回robot01 配置的机器人 、、、或者 $app = new Application($config); $app_robot=$app->robot;//返回默认配置的机器人 都是返回一个机器人实例 ``` 传递 H5,小程序 配置后 使用 $app->MFC 返回对应的实例,用此实例可以调用对应的接口。具体使用 demo =》https://gitee.com/chinakaiyuan/laravelgrid ## 应用免登录 说明 ```php ...... $user_agent = $_SERVER['HTTP_USER_AGENT']; //判断是不是需要钉钉浏览器打开 if (strpos($user_agent, "DingTalk") !== false) { //没有登录的,就跳转登录页面 if (!ISLOGIN){ $redirecturl = '登录成功后的跳转页面'; $HTML = << SCRIPT; echo $HTML; exit(0); } } ...... ...... //根据上面 的前端地址获得code $UserDataUser = $app->user->getUserByCode($_GET['code']); //登录逻辑代码 .... header('Location:' . $_GET['rl']); ``` ## 扫码登录 说明 跳转前端,我这样写 ```html ``` ```php .... $userCodeData = $app->app->stateless()->user(); ``` 当然你也可以这样写 ```php // 扫码登录第三方网站 $response = $app->app->withQrConnect()->redirect(); // 钉钉内免登第三方网站、密码登录第三方网站均同样使用如下方法跳转: $response = $app->app->redirect(); // 回调页面统一使用如下方法来获取用户信息: $user = $app->app->user(); ``` 免登录,和扫码登录用原文档代码,是相当简便的。但是我没试。 ## 订阅消息 按照原文档操作就没毛病了,加密解密,接口验证,配置文件写好,都自动的了。 日志在这里就调用了 3 次 EasyDingTalk\Kernel\Server 内, 1、获取的加密订阅数据 2、解密的加密数据 3、发送给钉钉的数据 订阅消息我大概这样处理 ```php $server = $app->app; $server->push(DingTalkHandler::class); $server->serve()->send(); // ThinkPHP 等框架使用 ...... class DingTalkHandler{ public function __invoke($payload) { // 在此处处理你的业务逻辑 $type = $payload['EventType']; switch ($type) { case 'bpms_task_change': //审批任务开始、结束、转交。 $this->msgdata($payload, '审批任务事件'); break; case 'bpms_instance_change': //审批实例开始、结束。 $this->msgdata($payload, '审批实例事件'); break; case 'attendance_check_record': //审批实例开始、结束。 $this->msgdata($payload, '员工打卡事件'); break; case 'attendance_schedule_change': //审批实例开始、结束。 $this->msgdata($payload, '员工排班变更事件'); break; case 'attendance_overtime_duration': //审批实例开始、结束。 $this->msgdata($payload, '员工加班事件'); break; case 'hrm_user_record_change': //审批实例开始、结束。 $this->msgdata($payload, '员工信息变动'); break; ...... default: $this->msgdata($payload, '其他事件'); break; } } public function msgdata($payload, $type){ } } ``` ## 机器人回调消息 ::: tip SDK 目前提供三种方法以方便你监听钉钉机器人的@事件推送 当然你可以多次调用 `push` 方法,实现多个消息处理器 使用方式参考 上一章 [服务器事件](服务器事件.md) 唯一要注意的是,每一个处理器 都可以返回一个消息,当然也可以不返回消息。也就是说一次@机器人,可以自动回复多条消息。 ::: #### 获取  robot 实例,返回多条消息 ```php //用robot01 配置文件 初始化机器人 $robot= $app->robot; //每一个处理器 都可以返回一个消息 $robot->push(function () { $text = new EasyDingTalk\\Messages\\Text("123"); return$text->toJson();         }); $robot->push(DingTalkHandler::class); $robot->push(function () { $text = new EasyDingTalk\\Messages\\Text("123456789"); return$text->toJson();         }); $robot->serve()->send(); // ThinkPHP 等框架使用 ``` #### 获取  robot 实例,发送消息 ::: tip $this->robot 会自动在配置中找第一个kind 是robot的配置。 $app->robot01 会找 robot01 配置,根据 kind 初始化一个机器人 ::: ```php //用robot01 配置文件 初始化机器人 $robot= $this->robot; $text = new EasyDingTalk\\Messages\\Text("123456789"); $robot->send(json_encode($text)); ``` ```php //用robot01 配置文件 批量发送单人消息 $app->robot01->batchMsg( ["msgKey" => 'sampleMarkdown', "msgParam" => "{ 'title': '触发一个通知', 'text': '### 触发一个通知\n**小标题**\n\n- 列表\nn- 列表\nn- 列表\nn' }"], ["userid", 'userid'] ); ```