PHP code example of geek / dingtalk
1. Go to this page and download the library: Download geek/dingtalk library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
geek / dingtalk example snippets
git clone [email protected] :geek-php/dingtalk.git
composer dump-autoload
php
php
spl_autoload_register(function ($class){
if(false !== strpos($class, '\\')){
$file = str_replace(['\\', 'Geek'], ['/', ''], 'vendor/dingtalk/src/'. trim($class, '\\')). '.php';
if(file_exists($file)){
php
$conf = [
'corp_id' => '', //企业CorpId
'secret' => '', //企业CorpSecret
'encoding_aes_key' => '', //数据加密密钥。用于回调数据的加密,长度固定为43个字符,从a-z, A-Z, 0-9共62个字符中选取,可以随机生成
'ding_token' => 'test', //加解密需要用到的token,自定义
'callback' => 'http://test001.vaiwan.com/eventreceive', //回调URL,钉钉服务器会向URL发起回调事件
];
$dingtalk = new \Geek\DingTalk($conf);
//获取部门列表
$list = $dingtalk->getDepartmentList();
print_r($list);
php
$departs = $dingtalk->getDepartmentList();
php
$department_id = 1; //部门id
$info = $dingtalk->getDepartInfo($department_id);
php
$department_id = 1; //部门id
$info = $dingtalk->getUserList($department_id);
php
$userid = 1; //钉钉用户id
$info = $dingtalk->getUser($userid);
php
$userIdList = [];// 群用户钉钉id列表,里面有哪些用户
$chat_name = '小钉'; //群会话名称
$chat_owner = ''; //该虚拟员工的钉钉id
//创建新会话
$res = $dingtalk->chatCreate($chat_name, $chat_owner, $userIdList);
if ($res['errcode'] != 0) {
echo sprintf("chatCreate fail. msg:%s", json_encode($res));
return '';
} else {
$chatid = $res['chatid'];
//可以把这个群会话存储起来,下次还是这几个成员,则直接取得chatid
}
php
$state = State::getInstance();
//发送消息
$res = $dingtalk->chatSendText($chat_id, $message);
if ($res['errcode'] != 0) {
return $state->setErrorNo($res['errcode'])->setErrorMsg($res['errmsg']);
}
php
$dingtalk->robotSend($access_token, $message);
php
//注册的事件,详见 https://open-doc.dingtalk.com/microapp/serverapi2/skn8ld
$call_back_tag = [
"user_add_org",
"user_modify_org",
"user_leave_org",
"chat_add_member",
"chat_remove_member",
"chat_update_title"
];
$token = $conf['ding_token'];
$aes_key = $conf['encoding_aes_key'];
$url = $conf['callback']; //回调地址
//注册回调地址
$dingtalk->registerCallBack($call_back_tag, $token, $aes_key, $url);
if ($res['errcode'] != 0) {
echo $res['errmsg'];
}
php
//回调请求示例:https://127.0.0.1/corp_biz_callback?signature=111108bb8e6dbce3c9671d6fdb69d15066227608×tamp=1783610513&nonce=380320111
//{ "encrypt":"1ojQf0N..." } 回调消息体使用Post请求body格式传递
$signature = $_GET['signature'];
$timestamp = $_GET['timestamp'];
$nonce = $_GET['nonce'];
$postdata = file_get_contents("php://input");
$postList = json_decode($postdata, true);
$encrypt_msg = $postList['encrypt'];
$state = receiveEvent($signature, $timestamp, $nonce, $encrypt_msg, $conf);
if ($state->getErrorNo() != 0) {
echo sprintf("handle receiveEvent fail. code:%d, msg:%s", $state->getErrorNo(), $state->getErrorMsg());
}
//接收到推送数据之后,需要返回字符串success (代表了你收到了推送),返回的数据也需要做加密处理,如果不返回,钉钉服务器将持续推送下去,达到一定阈值后将不再推送。
$sign_obj = new \Geek\Signature($conf);
$state = $sign_obj->encryptMsg("success", $timestamp, $nonce);
if ($state->getErrorNo() != 0) {
echo sprintf("encrypt receiveEvent fail. code:%d, msg:%s", $state->getErrorNo(), $state->getErrorMsg());
}
/**
* 钉钉回调处理
*
* @param $signature
* @param $timestamp
* @param $nonce
* @param $encrypt_msg
* @return \Geek\State
*/
function receiveEvent($signature, $timestamp, $nonce, $encrypt_msg, $conf)
{
$state = \Geek\State::getInstance();
$sign_obj = new \Geek\Signature($conf);
$msg_state = $sign_obj->decryptMsg($signature, $timestamp, $nonce, $encrypt_msg);
if ($msg_state->getErrorNo() != 0) {
return $msg_state;
}
$eventMsg = json_decode($msg_state->getData());
//示例数据
// $eventMsg = json_decode('{"TimeStamp":"1536907636429","CorpId":"ding93794335028af70b","UserId":["2127383846805836532", "0565176120300975"],"EventType":"user_add_org"}');
$eventType = $eventMsg->EventType;
echo sprintf("decrypt succ. msg:%s", json_encode($eventMsg));
switch ($eventType) {
case "check_url": //测试回调URL。注册回调接口时,钉钉服务器会向URL发起【测试回调URL】事件,来验证填写的url的合法性,需要接收到回调之后返回加密字符串“success”的json数据,才能完成注册。
break;
case "check_create_suite_url":
break;
case "check_update_suite_url":
break;
case "user_add_org":
case "user_modify_org":
$user_ids = $eventMsg->UserId;
break;
case "user_leave_org": //离职
$user_ids = $eventMsg->UserId;
break;
case "chat_add_member":
case "chat_remove_member":
case "chat_update_title":
break;
default:
break;
}
return $state->setData([]);
}