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