python企业微信回调_回调模式
回調模式
在回調模式下,企業不僅可以主動調用企業號接口,還可以接收成員的消息或事件。接收的信息使用XML數據格式、UTF8編碼,并以AES方式加密。
企業號的每個應用都有自己的回調模式開關。在管理端開啟并設置好相關參數后,此應用的回調模式才生效。
針對加解密的處理,微信提供了各種語言的庫,企業可以在附錄中下載。
開啟應用的回調模式
當你開啟應用的回調模式時,企業號會要求你填寫應用的URL、Token、EncodingAESKey三個參數。
URL是企業應用接收企業號推送請求的訪問協議和地址,支持http或https協議。
Token可由企業任意填寫,用于生成簽名。
EncodingAESKey用于消息體的加密,是AES密鑰的Base64編碼。
驗證URL、Token以及加密的詳細處理請參考后續'接收消息時的加解密處理'的章節。
驗證URL有效性
當你提交以上信息時,企業號將發送GET請求到填寫的URL上,GET請求攜帶四個參數,企業在獲取時需要做urldecode處理,否則會驗證不成功。
參數
描述
是否必帶
msg_signature
微信加密簽名,msg_signature結合了企業填寫的token、請求中的timestamp、nonce參數、加密的消息體
是
timestamp
時間戳
是
nonce
隨機數
是
echostr
加密的隨機字符串,以msg_encrypt格式提供。需要解密并返回echostr明文,解密后有random、msg_len、msg、$CorpID四個字段,其中msg即為echostr明文
首次校驗時必帶
企業通過參數msg_signature對請求進行校驗,如果確認此次GET請求來自企業號,那么企業應該對echostr參數解密并原樣返回echostr明文(不能加引號,不能帶bom頭,不能帶換行符),則接入驗證生效,回調模式才能開啟。
后續回調企業時都會在請求URL中帶上以上參數(echostr除外),校驗方式與首次驗證URL一致。
使用回調模式
企業號在回調企業URL時,會對消息體本身做AES加密,以XML格式POST到企業應用的URL上;企業在被動響應時,也需要對數據加密,以XML格式返回給微信。企業的回復支持文本、圖片、語音、視頻、圖文等格式。
微信服務器在五秒內收不到響應會斷掉連接,并且重新發起請求,總共重試三次。如果在調試中,發現成員無法收到響應的消息,可以檢查是否消息處理超時。
當接收成功后,http頭部返回200表示接收ok,其他錯誤碼一律當做失敗并發起重試
關于重試的消息排重,有msgid的消息推薦使用msgid排重。事件類型消息推薦使用FromUserName + CreateTime排重。
假如企業無法保證在五秒內處理并回復,可以直接回復空串,企業號不會對此作任何處理,并且不會發起重試。這種情況下,可以使用發消息接口進行異步回復。
請求說明:
回調數據格式:
1.msg_encrypt為經過加密的密文(消息明文格式參見 接收普通消息,事件明文格式參見 接收事件)
2.AgentID為接收的應用id,可在應用的設置頁面獲取
3.ToUserName為企業號的CorpID
企業需要對msg_signature進行校驗,并解密msg_encrypt,得出msg的原文。
被動響應給微信的數據格式:
timestamp
1.msg_encrypt為經過加密的密文(消息明文格式參見 被動響應消息),算法參見附錄
2.MsgSignature為簽名,算法參見附錄
3.TimeStamp為時間戳,Nonce為隨機數,由企業自行生成
接收消息時的加解密處理
企業可以直接使用微信提供的庫進行加解密的處理,目前提供的有c++/python/php/java/c#等語言版本。代碼提供了解密、加密、驗證URL三個接口,企業可根據自身需要下載 (參見附錄的加解密庫下載)。以下為庫函數的使用說明(以c++為例),更詳細的加解密方案請參考(附錄)。
1、解密函數
int DecryptMsg(const string &sMsgSignature, const string &sTimeStamp, const string &sNonce, const string &sPostData, string &sMsg);
參數說明
參數
必須
說明
sMsgSignature
是
從回調URL中獲取的msg_signature參數
sTimeStamp
是
從回調URL中獲取的timestamp參數
sNonce
是
從回調URL中獲取的nonce參數
sPostData
是
從回調URL中獲取的整個post數據
sMsg
是
用于返回解密后的msg,以xml組織
返回說明
請參閱附錄加解密部分。
2、加密函數
int EncryptMsg(const string &sReplyMsg, const string &sTimeStamp, const string &sNonce, string &sEncryptMsg);
參數說明
參數
必須
說明
sReplyMsg
是
返回的消息體原文
sTimeStamp
是
時間戳,調用方生成
sNonce
是
隨機數,調用方生成
sEncryptMsg
是
用于返回的密文,以xml組織
返回說明
請參閱附錄加解密部分。
3、驗證URL函數
int VerifyURL(const string &sMsgSignature, const string &sTimeStamp, const string &sNonce, const string &sEchoStr, string &sReplyEchoStr);
參數說明
參數
必須
說明
sMsgSignature
是
從回調URL中獲取的msg_signature參數
sTimeStamp
是
從回調URL中獲取的timestamp參數
sNonce
是
從回調URL中獲取的nonce參數
sEchoStr
是
從回調URL中獲取的echostr參數。注意,此參數必須是urldecode后的值
sReplyEchoStr
是
解密后的echostr,用于回包。注意,必須原樣返回,不要做加引號或其它處理
返回說明
請參閱附錄加解密部分。
獲取微信服務器的ip段
請求說明
Https請求方式: GET
參數說明
參數
必須
說明
access_token
是
調用接口憑證
返回結果
{
"ip_list": ["101.226.103.*", "101.226.62.*"]
}
總結
以上是生活随笔為你收集整理的python企业微信回调_回调模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信用卡消费分期
- 下一篇: python源码编译 mingw_在wi