《微信企业号开发日志》之企业号接入
?
微信企業(yè)號申請注冊流程
回調(diào)模式
在回調(diào)模式下,企業(yè)不僅可以主動調(diào)用企業(yè)號接口,還可以接收用戶的消息或事件。接收的信息使用XML數(shù)據(jù)格式、UTF8編碼,并以AES方式加密。
企業(yè)號的每個應用都有自己的回調(diào)模式開關。在管理端開啟并設置好相關參數(shù)后,此應用的回調(diào)模式才生效。
針對加解密的處理,微信提供了各種語言的庫,企業(yè)可以在附錄中下載。下載地址
開啟應用的回調(diào)模式
當你開啟應用的回調(diào)模式時,企業(yè)號會要求你填寫應用的URL、Token、EncodingAESKey三個參數(shù)。
URL是企業(yè)應用接收企業(yè)號推送請求的訪問協(xié)議和地址,支持http或https協(xié)議。
Token可由企業(yè)任意填寫,用于生成簽名。
EncodingAESKey用于消息體的加密,是AES密鑰的Base64編碼。
驗證URL、Token以及加密的詳細處理請參考后續(xù)'接收消息時的加解密處理'的章節(jié)。
驗證URL有效性
當你提交以上信息時,企業(yè)號將發(fā)送GET請求到填寫的URL上,GET請求攜帶四個參數(shù),企業(yè)在獲取時需要做urldecode處理,否則會驗證不成功。
| msg_signature | 微信加密簽名,msg_signature結(jié)合了企業(yè)填寫的token、請求中的timestamp、nonce參數(shù)、加密的消息體 | 是 |
| timestamp | 時間戳 | 是 |
| nonce | 隨機數(shù) | 是 |
| echostr | 加密的隨機字符串,以msg_encrypt格式提供。需要解密并返回echostr明文,解密后有random、msg_len、msg、$CorpID四個字段,其中msg即為echostr明文 | 首次校驗時必帶 |
企業(yè)通過參數(shù)msg_signature對請求進行校驗,如果確認此次GET請求來自企業(yè)號,那么企業(yè)應用對echostr參數(shù)解密并原樣返回echostr明文(不能加引號),則接入驗證生效,回調(diào)模式才能開啟。
?
?
我們在項目下新建一個一般處理程序:QYWX.ashx
先來獲取驗證回調(diào)所需要的參數(shù)
//微信接入的測試string token = ConfigurationManager.AppSettings["CorpToken"];//從配置文件獲取Tokenstring CorpID = ConfigurationManager.AppSettings["CorpID"];//從配置文件獲取Tokenstring EncodingAESKey = ConfigurationManager.AppSettings["EncodingAESKey"];//從配置文件獲取Tokenstring signature = context.Request["msg_signature"];string timestamp = context.Request["timestamp"];string nonce = context.Request["nonce"];string echostr = context.Request["echostr"];
其中CorpToken,CorpID,EncodingAESKey是在配置文件中配置的,方便更改,配置文件節(jié)點如下:
<appSettings ><!--企業(yè)號配置信息--><add key="CorpToken" value="XXXXXXXXXX"/><add key="CorpID" value="XXXXXXXXXXXXX"/><add key="EncodingAESKey" value="1v82IRu54erxBj3v1hItooXOXXXXXXXXXXXXXXX"/></appSettings>現(xiàn)在,我們來寫驗證處理流程
新建一個驗證類CheckSignatureQY.cs
結(jié)構如圖所示:
說明: Check為靜態(tài)方法,,這個類很簡單,現(xiàn)在貼上全部代碼:
public class CheckSignatureQY{/// <summary>/// 在網(wǎng)站沒有提供Token(或傳入為null)的情況下的默認Token,建議在網(wǎng)站中進行配置。/// </summary>public const string Token = "weixin";/// <summary>/// 微信鏈接服務器驗證憑證/// </summary>/// <param name="sVerifyMsgSig">微信加密簽名,msg_signature結(jié)合了企業(yè)填寫的token、請求中的timestamp、nonce參數(shù)、加密的消息體 </param>/// <param name="sVerifyTimeStamp">時間戳</param>/// <param name="sVerifyNonce">隨機數(shù)</param>/// <param name="sVerifyEchoStr">加密的隨機字符串,以msg_encrypt格式提供。需要解密并返回echostr明文,解密后有random、msg_len、msg、$CorpID四個字段,其中msg即為echostr明文 </param>/// <param name="sEncodingAESKey">EncodingAESKey用于消息體的加密,是AES密鑰的Base64編碼。</param>/// <param name="sCorpID">帳號信息 CorpID</param>/// <param name="sEchoStr"></param>/// <param name="sToken"></param>/// <returns></returns>public static bool Check(string sVerifyMsgSig, string sVerifyTimeStamp, string sVerifyNonce, string sVerifyEchoStr, string sEncodingAESKey, string sCorpID, ref string sEchoStr, string sToken = null){sToken = String.IsNullOrEmpty(sToken) ? Token : sToken;WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(sToken, sEncodingAESKey, sCorpID);int ret = 0;ret = wxcpt.VerifyURL(sVerifyMsgSig, sVerifyTimeStamp, sVerifyNonce, sVerifyEchoStr, ref sEchoStr);if (ret != 0)sEchoStr = "ERR: VerifyURL fail, ret: " + ret;return ret == 0;}}?
說明:WXBizMsgCrypt??? 為微信官方的加密類:下載傳送門
?
完成了CheckSignatureQY類以后,我們就要在QYWX.ashx中調(diào)用,微信驗證的方法為GET,所以我們在QYWX.ashx中寫入如下代碼:
if (context.Request.HttpMethod == "GET")//驗證 { string sEchoStr = "";bool check = CheckSignatureQY.Check(signature, timestamp, nonce, echostr, EncodingAESKey, CorpID, ref sEchoStr, token);//True表示成功//WriteText(check ? "True" : "False");//check為True成功,Flase失敗,失敗信息在SechoStrWriteContent(sEchoStr); //返回隨機字符串則表示驗證通過 }?
然后在微信調(diào)用界面中
?
點擊完成就會完成了微信驗證啦,如圖所示:
本節(jié)到此結(jié)束
?
轉(zhuǎn)載于:https://www.cnblogs.com/GarsonZhang/p/4037289.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結(jié)
以上是生活随笔為你收集整理的《微信企业号开发日志》之企业号接入的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计组之中央处理器:1、CPU的功能和基本
- 下一篇: (计算机组成原理)第二章数据的表示和运算