今日調試釘釘回調事件,又被坑了,寫個博客記錄下。
首先講下為什么我們需要在釘釘注冊回調事件,釘釘的回調事件怎么注冊。
我們為什么需要注冊釘釘的回調事件呢?打個比方,假如在我們自己開發的系統中想接入釘釘的審批,那么我們就需要知道釘釘的審批詳情,審批結果之類的信息,如果釘釘不提供回調事件,我們就需要寫定時任務挨個輪詢審批的狀態,這樣不僅邏輯復雜,而且存在同步時差。反之,如果我們注冊了釘釘的審批事件回調,在審批開始,結束時釘釘都會主動通知我們系統,這樣我們開發的時候就能省很多事了,而且使用體驗更好。
如何在釘釘注冊回調事件?首先我們需要在釘釘留一個'電話號碼’(回調地址),這樣釘釘才知道怎么通知到我們系統,其次為了驗證身份和消息安全,我們要給消息加把‘鎖’,’鑰匙‘只有我們跟釘釘知道,為了驗證‘鑰匙’是否是對的,我們留‘地址’的時候需要驗證下,這樣就是釘釘回調事件注冊的邏輯了,如下圖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)