https://zb.oschina.net/market/opus/1444646_161 代碼
php
1.註冊完微信企業號,須要掃描二維碼。就出現輸入帳號和密碼的表單了。登錄就會出現下面的頁面了。java
2.點擊應用中心,新建一個應用,必須上傳一個LOGO,基本都是必填項。python
3.進入應用,如今回調模式,並開啓。c++
4.開啓在右上角web
5.確認開啓回調模式c#
6.輸入相應的地址和配置數據api
基本完成了前面的要求。開發自定義菜單就好說了。具體的有接口文檔服務器
http://qydev.weixin.qq.com/wiki/index.php?title=%E5%9B%9E%E8%B0%83%E6%A8%A1%E5%BC%8F微信
在回調模式下,企業不只能夠主動調用企業號接口,還能夠接收用戶的消息或事件。接收的信息使用XML數據格式、UTF8編碼,並以AES方式加密。dom
企業號的每一個應用都有本身的回調模式開關。在管理端開啓並設置好相關參數後,此應用的回調模式才生效。
針對加解密的處理,微信提供了各類語言的庫,企業能夠在附錄中下載。
當你開啓應用的回調模式時,企業號會要求你填寫應用的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明文(不能加引號),則接入驗證生效,回調模式才能開啓。
後續回調企業時都會在請求URL中帶上以上參數(echostr除外),校驗方式與首次驗證URL一致。
企業號在回調企業URL時,會對消息體自己作AES加密,以XML格式POST到企業應用的URL上;企業在被動回覆時,也須要對數據加密,以XML格式返回給微信。企業的回覆支持文本、圖片、語音、視頻、圖文等格式。
微信服務器在五秒內收不到響應會斷掉鏈接,而且從新發起請求,總共重試三次。若是在調試中,發現員工沒法收到響應的消息,能夠檢查是否消息處理超時。
關於重試的消息排重,有msgid的消息推薦使用msgid排重。事件類型消息推薦使用FromUserName + CreateTime排重。
假如企業沒法保證在五秒內處理並回復,能夠直接回復空串,企業號不會對此做任何處理,而且不會發起重試。這種狀況下,能夠使用發消息接口進行異步回覆。
假設企業回調URL爲http://api.3dept.com。
請求說明:
http://api.3dept.com/?msg_signature=ASDFQWEXZCVAQFASDFASDFSS×tamp=13500001234&nonce=123412323
回調數據格式:
<xml> <ToUserName><![CDATA[toUser]]</ToUserName> <AgentID><![CDATA[toAgentID]]</AgentID> <Encrypt><![CDATA[msg_encrypt]]</Encrypt> </xml>
1.msg_encrypt爲通過加密的密文 2.AgentID爲接收的應用id,可在應用的設置頁面獲取 3.ToUserName爲企業號的CorpID
企業須要對msg_signature進行校驗,並解密msg_encrypt,得出msg的原文。
回覆給微信的數據格式:
<xml> <Encrypt><![CDATA[msg_encrypt]]></Encrypt> <MsgSignature><![CDATA[msg_signature]]></MsgSignature> <TimeStamp>timestamp</TimeStamp> <Nonce><![CDATA[nonce]]></Nonce> </xml>
企業能夠直接使用微信提供的庫進行加解密的處理,目前提供的有c++/python/php/java/c#等語言版本。代碼提供瞭解密、加密、驗證URL三個接口,企業可根據自身須要下載(參見附錄)。如下爲庫函數的使用說明(以c++爲例),更詳細的加解密方案請參考附錄。
一、解密函數
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組織 |
返回說明
請參閱附錄加密部分。
二、加密函數
int EncryptMsg(const string &sReplyMsg, const string &sTimeStamp, const string &sNonce, string &sEncryptMsg);
參數說明
參數 | 必須 | 說明 |
---|---|---|
sReplyMsg | 是 | 返回的消息體原文 |
sTimeStamp | 是 | 時間戳,調用方生成 |
sNonce | 是 | 隨機數,調用方生成 |
sEncryptMsg | 是 | 用於返回的密文,以xml組織 |
返回說明
請參閱附錄加密部分。
三、驗證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,用於回包。注意,必須原樣返回,不要作加引號或其它處理 |
返回說明
請參閱附錄加密部分。