1.钉钉应用回调配置页面
- 进入钉钉开放平台=>我的后台=>应用开放选项下,应用功能 =>事件与回调
- 推送方式Http推送(steam模式需要接入sdk)
- 填写加密的key 、token。代码里会用到
- 请求网址也就是回调的地址,填写你外网可访问的地址加路由(如果自己测试的话也可以用内网穿透工具 ,比如ngrok,我也只用过这个哈哈哈)
- 事件订阅,订阅你需要回调的,比如审批实例开始结束
2.接下来是代码时间
class CallBackController extends Controller
{
public function synchronousDing(Request $request)
{
$get = $_GET;
$post = json_decode(file_get_contents('php://input'));
$crypt = new DingCallbackCrypto('上面的你生成的token', "生成的key", '应用的AppKey');
$res = $crypt->getEncryptedMap("success");
$text = $crypt->getDecryptMsg($get['signature'], $get['timestamp'], $get['nonce'], $post->encrypt);
$res = json_decode($text[1], true);
$this->dispatch(new ChangeDingOpera($res));
}
}
当事件发生时,钉钉会主动向配置的HTTP地址发送POST请求。
请求的URL格式如下:
http://你注册的HTTP地址?signature=111108bb8e6dbc2xxxx×tamp=1783610513&nonce=380320111
包含的JSON数据如下:
{
"encrypt":"1ojQf0NSvw2WPvW7LijxS8UvISr8pdDP+rXpPbcLGOmIBNbWetRg7IP0vdhVgkVwSoZBJeQwY2zhROsJq/HJ+q6tp1qhl9L1+ccC9ZjKs1wV5bmA9NoAWQiZ+7MpzQVq+j74rJQljdVyBdI/dGOvsnBSCxCVW0ISWX0vn9lYTuuHSoaxwCGylH9xRhYHL9bRDskBc7bO0FseHQQasdfghjkl"
}
其中:
-
signature为消息体签名。
-
timestamp为时间戳。
-
nonce为随机字符串。
-
encrypt为加密的推送事件信息。
你要响应钉钉,告诉他,收到啦收到啦!!
- 当你收到开放平台的POST验证请求时,你需要做解密处理,并在1500ms内返回包含success的加密字符串(JSON格式)。钉钉开放平台收到返回的JSON信息后会做解密处理,如果可以得到正常的success字符串,则验证回调信息推送正常,否则会判定为失败的回调信息。
具体参考钉钉的文档---事件订阅
回调消息体加解密 参考钉钉文档给的demo
这里不深入了,等我学会了再来,直接调用
解密后我们会获得一个EventType
/*user_add_org : 通讯录用户增加
user_modify_org : 通讯录用户更改
user_leave_org : 通讯录用户离职
org_admin_add :通讯录用户被设为管理员
org_admin_remove :通讯录用户被取消设置管理员
org_dept_create : 通讯录企业部门创建
org_dept_modify : 通讯录企业部门修改
org_dept_remove : 通讯录企业部门删除
org_remove : 企业被解散
*/
具体事件,看文档
最后就是处理事件
if($this->type == "bpms_instance_change"){
if (isset($this->res['result'])) {
//处理你的事件
}
}