关于钉钉回调事件的二三事

  今日调试钉钉回调事件,又被坑了,写个博客记录下。

  首先讲下为什么我们需要在钉钉注册回调事件,钉钉的回调事件怎么注册。

  我们为什么需要注册钉钉的回调事件呢?打个比方,假如在我们自己开发的系统中想接入钉钉的审批,那么我们就需要知道钉钉的审批详情,审批结果之类的信息,如果钉钉不提供回调事件,我们就需要写定时任务挨个轮询审批的状态,这样不仅逻辑复杂,而且存在同步时差。反之,如果我们注册了钉钉的审批事件回调,在审批开始,结束时钉钉都会主动通知我们系统,这样我们开发的时候就能省很多事了,而且使用体验更好。

  如何在钉钉注册回调事件?首先我们需要在钉钉留一个'电话号码’(回调地址),这样钉钉才知道怎么通知到我们系统,其次为了验证身份和消息安全,我们要给消息加把‘锁’,’钥匙‘只有我们跟钉钉知道,为了验证‘钥匙’是否是对的,我们留‘地址’的时候需要验证下,这样就是钉钉回调事件注册的逻辑了,如下图1所示,具体的注册流程可以参数官方的说明文档。https://open.dingtalk.com/document/orgapp-server/callback-overview

 

图1

 

 

  目前钉钉提供了两种方式注册回调事件。一种是服务端调用旧版本的事件回调接口注册回调事件,一种是在应用的管理后台配置回调事件。两种方式都涉及到消息的加解密,具体文档地址:https://open.dingtalk.com/document/orgapp-server/callback-event-message-body-encryption-and-decryption,该文档附有工具类下载链接,可以下载下来直接使用。

  这两种方式的注册逻辑已经加密解密方式大体都是一样的,但是也有一些细微不同,且听我一一道来。

  一. 后端接口注册回调事件

  官方文档:https://open.dingtalk.com/document/orgapp-server/callback-overview

 

  请求该接口后,钉钉会向你的回调地址发起一个post请求,你需要根据钉钉的要求,返回一个加密了的'success'字符串,钉钉会用你注册时提交的密钥参数验证,如果能解出'success'那么就注册成功了,如果验证失败就是有地方出问题了。

 

 

  二. 应用管理后台注册回调事件

  登录管理后台,进入需要注册回调事件的应用,然后在左侧菜单栏选择事件与回调菜单。在订阅管理哪里填上你的aes_key与token和回调地址,和接口注册一样,钉钉同样会验证你的回调地址,验证通过后会显示图片下放蓝色框画出的订阅事件,点击即可订阅。

 

 

 

 

  

   三.两种方式注册的不同

    虽然钉钉接口注册回调地址的文档上说一个微应用只能有一个回调地址,但是经过我的测试,通过接口注册回调事件应该是整个组织共用一个回调地址,不是像文档里说的的每个应用都只有一个回调地址。

 

  所以如果需要每个应用都有独立的回调地址,那么最好使用应用后台配置的方式注册回调。另外一点值得注意的问题是,钉钉的加密算法中需要入参一个$key,在钉钉接口注册的场景中,该参数遵从下图的规则,而在应用后台配置注册的场景下,该参数固定为应用的appid(AgentId)

 

 

 

 

 

  

posted @ 2021-12-30 14:41  无尽的粪怒  阅读(3216)  评论(0编辑  收藏  举报