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

目次
1. エンタープライズ アカウントのコールバック モードの設(shè)定
2. WeChatコールバックメッセージの検証
3、企業(yè)號(hào)的消息處理
ホームページ WeChat アプレット WeChatの開(kāi)発 WeChat ポータルとアプリケーションの C# 開(kāi)発 - WeChat エンタープライズ アカウントからのメッセージとイベントの受信、処理、復(fù)號(hào)化

WeChat ポータルとアプリケーションの C# 開(kāi)発 - WeChat エンタープライズ アカウントからのメッセージとイベントの受信、処理、復(fù)號(hào)化

Feb 18, 2017 am 09:42 AM

前回のエッセイ「WeChat ポータルとアプリケーションの C# 開(kāi)発 (19) - WeChat エンタープライズ アカウントのメッセージ送信 (テキスト、畫(huà)像、ファイル、音聲、ビデオ、グラフィック メッセージなど)」では、エンタープライズ アカウントのメッセージ送信について紹介しました。公式の特別な聲明メッセージは暗號(hào)化せずに送信されます。ただし、Web サイトのサーバーであるコールバック サーバーでは、WeChat から送信されるメッセージは暗號(hào)化されており、メッセージとイベントを復(fù)號(hào)化するためにクラス ライブラリを呼び出す必要があります。公式のサンプルが不完全であるため、多くの時(shí)間を費(fèi)やしました。最後に、受信したさまざまなメッセージとイベントが正常に復(fù)號(hào)化されました。この記事では主に、WeChat エンタープライズ アカウントでのメッセージとイベントの受信、処理、復(fù)號(hào)化の操作を紹介します。

1. エンタープライズ アカウントのコールバック モードの設(shè)定

パブリック アカウントと同様に、WeChat エンタープライズ アカウントで二次開(kāi)発が必要な場(chǎng)合は、次のインターフェイスに示すように、対応するコールバック パラメーターをバックグラウンドで設(shè)定する必要があります。

C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用-微信企業(yè)號(hào)的消息和事件的接收處理及解密

これらを設(shè)定してチェックに合格すると、獨(dú)自の WeChat アプリケーション サーバーでメッセージを送受信できるようになります。

コールバックメッセージのエントリでは、POSTデータと通常のGETデータを別々に処理する必要があります。GETデータはWeChat獨(dú)自の検証処理であり、POSTデータはWeChatメッセージの対話的な操作です。

????///?<summary>
????///?企業(yè)號(hào)回調(diào)信息接口。統(tǒng)一接收并處理信息的入口。????///?</summary>
????public?class?corpapi?:?IHttpHandler
????{????????///?<summary>
????????///?處理企業(yè)號(hào)的信息????????///?</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. WeChatコールバックメッセージの検証

以下は、WeChatのコールバックモードと検証URLの手順です。

URL の有効性を確認(rèn)します

上記の情報(bào)を送信すると、企業(yè)アカウントは入力された URL に GET リクエストを送信します。GET リクエストには 4 つのパラメーターが含まれます。 企業(yè)は取得時(shí)に URL デコード処理を行う必要があります。そうでない場(chǎng)合、検証は失敗します。

パラメータ説明必須ですか?msg_signatureWeChat暗號(hào)化署名、msg_signatureは、企業(yè)によって入力されたトークン、リクエスト內(nèi)のタイムスタンプ、nonceパラメータ、および暗號(hào)化されたメッセージを組み合わせます。 bodyはいtimestamptimestampはnonce亂數(shù)はechostr暗號(hào)化されたランダムですmsg_encrypt 形式で提供される文字列。 echostr 平文を復(fù)號(hào)して返す必要があります。random、msg_len、msg、$CorpID は最初の検証に含める必要があります。

企業(yè)通過(guò)參數(shù)msg_signature對(duì)請(qǐng)求進(jìn)行校驗(yàn),如果確認(rèn)此次GET請(qǐng)求來(lái)自企業(yè)號(hào),那么企業(yè)應(yīng)用對(duì)echostr參數(shù)解密并原樣返回echostr明文(不能加引號(hào)),則接入驗(yàn)證生效,回調(diào)模式才能開(kāi)啟。

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

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

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

????????????????????????#region?具體處理邏輯????????????????????????string?echoString?=?HttpContext.Current.Request.QueryString["echoStr"];????????????????????????string?signature?=?HttpContext.Current.Request.QueryString["msg_signature"];//企業(yè)號(hào)的?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

驗(yàn)證代碼部門(mén)如下所示。

????????///?<summary>
????????///?驗(yàn)證企業(yè)號(hào)簽名????????///?</summary>
????????///?<param name="token">企業(yè)號(hào)配置的Token</param>
????????///?<param name="signature">簽名內(nèi)容</param>
????????///?<param name="timestamp">時(shí)間戳</param>
????????///?<param name="nonce">nonce參數(shù)</param>
????????///?<param name="corpId">企業(yè)號(hào)ID標(biāo)識(shí)</param>
????????///?<param name="encodingAESKey">加密鍵</param>
????????///?<param name="echostr">內(nèi)容字符串</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è)號(hào)的消息處理

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

也就是下面的代碼邏輯。

????????????????????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);
????????????????????????}
????????????????????}

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

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

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

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

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

????????????//根據(jù)參數(shù)信息,初始化微信對(duì)應(yīng)的消息加密解密類
????????????WXBizMsgCrypt?wxcpt?=?new?WXBizMsgCrypt(CorpToken,?AESKey,?CorpId);????????????//對(duì)收到的密文進(jìn)行解析處理
????????????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("解密消息失??!");
????????????}

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

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

這樣我們?cè)谄髽I(yè)號(hào)API的封裝,就可以只需要關(guān)注消息如何應(yīng)答的邏輯就可以了,其他的不用關(guān)心。

C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用-微信企業(yè)號(hào)的消息和事件的接收處理及解密 ?

?

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

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見(jiàn)つけた場(chǎng)合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫(huà)像を無(wú)料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫(xiě)真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫(xiě)真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無(wú)料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無(wú)料のコードエディター

SublimeText3 中國(guó)語(yǔ)版

SublimeText3 中國(guó)語(yǔ)版

中國(guó)語(yǔ)版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開(kāi)発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開(kāi)発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)