在回調(diào)模式下,企業(yè)可以接收企業(yè)郵下發(fā)的數(shù)據(jù)。接收的信息使用XML數(shù)據(jù)格式、UTF8編碼,并以AES方式加密。
企業(yè)郵的部分應(yīng)用有自己的回調(diào)模式開關(guān)。在管理端開啟并設(shè)置好相關(guān)參數(shù)后,此應(yīng)用的回調(diào)模式才生效。
針對加解密的處理,企業(yè)郵提供了各種語言的庫,企業(yè)可以在附錄中下載。
開啟應(yīng)用的回調(diào)模式
當(dāng)你開啟應(yīng)用的回調(diào)模式時,企業(yè)郵會要求你填寫應(yīng)用的URL、Token、EncodingAESKey三個參數(shù)。
URL是企業(yè)應(yīng)用接收企業(yè)郵推送請求的訪問協(xié)議和地址,支持http或https協(xié)議。
Token可由企業(yè)任意填寫,用于生成簽名。
EncodingAESKey用于消息體的加密,是AES密鑰的Base64編碼。
驗證URL、Token以及加密的詳細(xì)處理請參考后續(xù)“接收消息時的加解密處理”的章節(jié)。
驗證URL有效性
當(dāng)你提交以上信息時,企業(yè)郵將發(fā)送GET請求到填寫的URL上,GET請求攜帶四個參數(shù),企業(yè)在獲取時需要做urldecode處理,否則會驗證不成功。
參數(shù) | 描述 | 是否必帶 |
---|---|---|
msg_signature | 企業(yè)郵加密簽名,msg_signature結(jié)合了企業(yè)填寫的token、請求中的timestamp、nonce參數(shù)、加密的消息體 | 是 |
timestamp | 時間戳 | 是 |
nonce | 隨機(jī)數(shù) | 是 |
echostr | 加密的隨機(jī)字符串,以msg_encrypt格式提供。需要解密并返回echostr明文,解密后有random、msg_len、msg、CorpID四個字段,其中msg即為echostr明文 | 首次校驗時必帶 |
企業(yè)通過參數(shù)msg_signature對請求進(jìn)行校驗,如果確認(rèn)此次GET請求來自企業(yè)郵,那么企業(yè)應(yīng)該對echostr參數(shù)解密并原樣返回echostr明文(不能加引號,不能帶bom頭,不能帶換行符),則接入驗證生效,回調(diào)模式才能開啟。
后續(xù)回調(diào)企業(yè)時都會在請求URL中帶上以上參數(shù)(echostr除外),校驗方式與首次驗證URL一致。
使用回調(diào)模式
企業(yè)郵在回調(diào)企業(yè)URL時,會對消息體本身做AES加密,以XML格式POST到企業(yè)應(yīng)用的URL上。
企業(yè)郵服務(wù)器在五秒內(nèi)收不到響應(yīng)會斷掉連接,并且重新發(fā)起請求,總共重試三次。如果在調(diào)試中,發(fā)現(xiàn)成員無法收到響應(yīng)的消息,可以檢查是否消息處理超時。
當(dāng)接收成功后,http頭部返回200表示接收ok,其他錯誤碼一律當(dāng)做失敗并發(fā)起重試 關(guān)于重試的消息排重,有MailID的消息推薦使用MailID排重 或者UserID + Time排重。
假設(shè)企業(yè)回調(diào)URL為http://api.3dept.com。
- 請求說明:
請求地址: http://api.3dept.com/?msg_signature=ASDFQWEXZCVAQFASDFASDFSS×tamp=13500001234&nonce=123412323
<xml> <CorpID><![CDATA[CorpID]]></CorpID> <AppID><![CDATA[AppID]]></AppID> <Encrypt><![CDATA[msg_encrypt]]></Encrypt> </xml>
1、msg_encrypt為經(jīng)過加密的密文
2、AppID為應(yīng)用id,每個應(yīng)用都有唯一的id
3、CorpID為企業(yè)郵的CorpID
企業(yè)需要對msg_signature進(jìn)行校驗,并解密msg_encrypt,得出msg的原文。