亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
1、企業(yè)號回呼模式的設定
2、微信回調訊息的驗證
3、企業(yè)號的消息處理
首頁 微信小程式 微信開發(fā) C#開發(fā)微信入口網(wǎng)站及應用-微信企業(yè)號的訊息和事件的接收處理及解密

C#開發(fā)微信入口網(wǎng)站及應用-微信企業(yè)號的訊息和事件的接收處理及解密

Feb 18, 2017 am 09:42 AM

在上篇隨筆《C#開發(fā)微信門戶及應用(19)-微信企業(yè)號的消息發(fā)送(文本、圖片、文件、語音、視頻、圖文消息等)》介紹了有關企業(yè)號的消息發(fā)送,官方特別聲明訊息是不用加密發(fā)送的。但是在回調的伺服器上,也就是我們網(wǎng)站的伺服器上,微信傳過來的訊息是加密的,需要我們呼叫類別庫對訊息和事件進行解密操作,由於官方的例子不全,因此摸索了不少時間,最終順利解密收到的各種訊息和事件。本文主要介紹?微信企業(yè)號的訊息和事件的接收處理及解密操作。

1、企業(yè)號回呼模式的設定

和公眾號一樣,微信企業(yè)號如果需要進行二次開發(fā),也是需要在後臺設定好對應的回呼參數(shù),如下介面所示。

C#開發(fā)微信門戶及應用-微信企業(yè)號的消息和事件的接收處理及解密

設定好這些後,檢查通過後,我們就可以在自己微信應用伺服器上進行訊息的收發(fā)操作了。

在回呼的訊息入口處,我們需要將POST資料和普通的GET資料分開處理,GET資料是微信自身的驗證處理,POST資料是微信訊息的互動操作。

????///?<summary>
????///?企業(yè)號回調信息接口。統(tǒng)一接收并處理信息的入口。????///?</summary>
????public?class?corpapi?:?IHttpHandler
????{????????///?<summary>
????????///?處理企業(yè)號的信息????????///?</summary>
????????///?<param name="context"></param>
????????public?void?ProcessRequest(HttpContext?context)
????????{

上面我們定義了一個一般應用處理程序來處理訊息。

然後我們分開不同的訊息類型(POST、GET 方式),針對性的進行處理。

????????????????????if?(HttpContext.Current.Request.HttpMethod.ToUpper()?==?"POST")
????????????????????{????????????????????????using?(Stream?stream?=?HttpContext.Current.Request.InputStream)
????????????????????????{
????????????????????????????Byte[]?postBytes?=?new?Byte[stream.Length];
????????????????????????????stream.Read(postBytes,?0,?(Int32)stream.Length);
????????????????????????????postString?=?Encoding.UTF8.GetString(postBytes);
????????????????????????}????????????????????????if?(!string.IsNullOrEmpty(postString))
????????????????????????{
????????????????????????????Execute(postString,?accountInfo);
????????????????????????}
????????????????????}????????????????????else
????????????????????{
????????????????????????Auth(accountInfo);
????????????????????}

2、微信回調訊息的驗證

?下面是微信對於回呼模式,驗證URL的說明。

驗證URL有效性

當你提交以上資訊時,企業(yè)號將發(fā)送GET請求到填寫的URL上,GET請求攜帶四個參數(shù),企業(yè)在獲取時需要做urldecode處理,否則會驗證不成功。

微信加密timestamp時間戳是nonce隨機數(shù)是需要解密並返回echostr明文,解密後有random、msg_len、msg、$CorpID四個字段,其中msg即為echostr明文首次校驗時必帶

企業(yè)通過參數(shù)msg_signature對請求進行校驗,如果確認此次GET請求來自企業(yè)號,那么企業(yè)應用對echostr參數(shù)解密并原樣返回echostr明文(不能加引號),則接入驗證生效,回調模式才能開啟。

后續(xù)回調企業(yè)時都會在請求URL中帶上以上參數(shù)(echostr除外),校驗方式與首次驗證URL一致。

根據(jù)上面的說明,我們需要獲取這些參數(shù),然后調用微信提供的消息處理函數(shù)進行加解密處理。

在驗證URL的Auth(accountInfo);操作里面,我們可以看到核心的內容如下所示,就是獲取到這些傳遞過來的參數(shù)信息,然后交給基類處理消息的簽名內容。

????????????????????????#region?具體處理邏輯????????????????????????string?echoString?=?HttpContext.Current.Request.QueryString["echoStr"];????????????????????????string?signature?=?HttpContext.Current.Request.QueryString["msg_signature"];//企業(yè)號的?msg_signature
????????????????????????string?timestamp?=?HttpContext.Current.Request.QueryString["timestamp"];????????????????????????string?nonce?=?HttpContext.Current.Request.QueryString["nonce"];????????????????????????string?decryptEchoString?=?"";????????????????????????if?(new?CorpBasicApi().CheckSignature(token,?signature,?timestamp,?nonce,?corpId,?encodingAESKey,?echoString,?ref?decryptEchoString))
????????????????????????{????????????????????????????if?(!string.IsNullOrEmpty(decryptEchoString))
????????????????????????????{
????????????????????????????????HttpContext.Current.Response.Write(decryptEchoString);
????????????????????????????????HttpContext.Current.Response.End();
????????????????????????????}
????????????????????????}?
????????????????????????#endregion

驗證代碼部門如下所示。

????????///?<summary>
????????///?驗證企業(yè)號簽名????????///?</summary>
????????///?<param name="token">企業(yè)號配置的Token</param>
????????///?<param name="signature">簽名內容</param>
????????///?<param name="timestamp">時間戳</param>
????????///?<param name="nonce">nonce參數(shù)</param>
????????///?<param name="corpId">企業(yè)號ID標識</param>
????????///?<param name="encodingAESKey">加密鍵</param>
????????///?<param name="echostr">內容字符串</param>
????????///?<param name="retEchostr">返回的字符串</param>
????????///?<returns></returns>
????????public?bool?CheckSignature(string?token,?string?signature,?string?timestamp,?string?nonce,?string?corpId,?string?encodingAESKey,?string?echostr,?ref?string?retEchostr)
????????{
????????????WXBizMsgCrypt?wxcpt?=?new?WXBizMsgCrypt(token,?encodingAESKey,?corpId);????????????int?result?=?wxcpt.VerifyURL(signature,?timestamp,?nonce,?echostr,?ref?retEchostr);????????????if?(result?!=?0)
????????????{
????????????????LogTextHelper.Error("ERR:?VerifyURL?fail,?ret:?"?+?result);????????????????return?false;
????????????}????????????return?true;
????????}

3、企業(yè)號的消息處理

?上面介紹了,微信企業(yè)號對URL的驗證過程,還有另外一個消息處理過程,就是微信服務器把消息發(fā)送給我們自己的應用服務器進行處理的過程,我們應用服務器需要在收到消息后,及時進行常規(guī)回復處理。

也就是下面的代碼邏輯。

????????????????????if?(HttpContext.Current.Request.HttpMethod.ToUpper()?==?"POST")
????????????????????{????????????????????????using?(Stream?stream?=?HttpContext.Current.Request.InputStream)
????????????????????????{
????????????????????????????Byte[]?postBytes?=?new?Byte[stream.Length];
????????????????????????????stream.Read(postBytes,?0,?(Int32)stream.Length);
????????????????????????????postString?=?Encoding.UTF8.GetString(postBytes);
????????????????????????}????????????????????????if?(!string.IsNullOrEmpty(postString))
????????????????????????{
????????????????????????????Execute(postString,?accountInfo);
????????????????????????}
????????????????????}

同樣,我們給微信服務器回應消息的時候,我們也需要獲得相應的參數(shù),然后再行構造信息回答。

????????????string?echoString?=?HttpContext.Current.Request.QueryString["echoStr"];????????????string?signature?=?HttpContext.Current.Request.QueryString["msg_signature"];//企業(yè)號的?msg_signature
????????????string?timestamp?=?HttpContext.Current.Request.QueryString["timestamp"];????????????string?nonce?=?HttpContext.Current.Request.QueryString["nonce"];

而另外一些參數(shù)信息,則是來源于我們企業(yè)號賬號的配置參數(shù)。

????????????//獲取配置參數(shù)并對加解密函數(shù)初始化
????????????string?CorpToken?=?accountInfo.Token;????????????string?AESKey?=?accountInfo.EncodingAESKey;????????????string?CorpId?=?accountInfo.CorpID;

然后使用微信提供的消息加解密類,就可以順利對消息進行加解密的處理了。具體操作代碼如下所示。

????????????//根據(jù)參數(shù)信息,初始化微信對應的消息加密解密類
????????????WXBizMsgCrypt?wxcpt?=?new?WXBizMsgCrypt(CorpToken,?AESKey,?CorpId);????????????//對收到的密文進行解析處理
????????????string?sMsg?=?"";??//?解析之后的明文
????????????int?flag?=?wxcpt.DecryptMsg(signature,?timestamp,?nonce,?postStr,?ref?sMsg);????????????if?(flag?==?0)
????????????{????????????????//LogTextHelper.Info("記錄解密后的數(shù)據(jù):");????????????????//LogTextHelper.Info(sMsg);//記錄解密后的數(shù)據(jù)
????????????????CorpApiDispatch?dispatch?=?new?CorpApiDispatch();????????????????string?responseContent?=?dispatch.Execute(sMsg);????????????????//加密后并發(fā)送????????????????//LogTextHelper.Info(responseContent);
????????????????string?encryptResponse?=?"";
????????????????timestamp?=?DateTime.Now.DateTimeToInt().ToString();
????????????????wxcpt.EncryptMsg(responseContent,?timestamp,?nonce,?ref?encryptResponse,?ref?signature);

????????????????HttpContext.Current.Response.ContentEncoding?=?Encoding.UTF8;
????????????????HttpContext.Current.Response.Write(encryptResponse);
????????????}????????????else
????????????{
????????????????LogTextHelper.Info("解密消息失?。?quot;);
????????????}

最終,我們把解密完成的消息交給對應的封裝類進行統(tǒng)一處理就可以了。

????????????????CorpApiDispatch?dispatch?=?new?CorpApiDispatch();????????????????string?responseContent?=?dispatch.Execute(sMsg);

這樣我們在企業(yè)號API的封裝,就可以只需要關注消息如何應答的邏輯就可以了,其他的不用關心。

C#開發(fā)微信門戶及應用-微信企業(yè)號的消息和事件的接收處理及解密 ?

?

更多C#開發(fā)微信門戶及應用-微信企業(yè)號的消息和事件的接收處理及解密?相關文章請關注PHP中文網(wǎng)!

參數(shù) 描述 是否必帶
msg_signature 微信是加密簽名,msg_signature結合了企業(yè)填寫的token、
本網(wǎng)站聲明
本文內容由網(wǎng)友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權的內容,請聯(lián)絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)