


C# は WeChat ポータルを開(kāi)発し、WeChat エンタープライズ アカウントを使用してメッセージとイベントを受信、処理、復(fù)號(hào)化します。
Mar 02, 2017 am 09:29 AM1. エンタープライズ アカウントのコールバック モードの設(shè)定
パブリック アカウントと同様に、WeChat エンタープライズ アカウントで二次開(kāi)発が必要な場(chǎng)合は、次のインターフェイスに示すように、対応するコールバック パラメーターをバックグラウンドで設(shè)定する必要があります。
これらを設(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)合、検証は失敗します。
説明 | 必須ですか? | |
---|---|---|
WeChat暗號(hào)化署名、msg_signatureは、企業(yè)によって入力されたトークン、リクエスト內(nèi)のタイムスタンプ、nonceパラメータ、および暗號(hào)化されたメッセージを組み合わせます。 body | はい | |
timestamp | は | |
亂數(shù) | は | |
暗號(hào)化されたランダムですmsg_encrypt 形式で提供される文字列。 echostr 平文を復(fù)號(hào)して返す必要があります。random、msg_len、msg、および msg は最初の検証に含める必要があります。パラメータ msg_signature. で、この GET リクエストがエンタープライズ アカウントからのものであることが確認(rèn)された場(chǎng)合、エンタープライズ アプリケーションは echostr パラメータを復(fù)號(hào)し、echostr プレーン テキストをそのまま (引用符なし) 返します。その後、アクセス検証が有効になり、コールバックが実行されます。モードをオンにすることができます。 | その後エンタープライズにコールバックが行われる場(chǎng)合、上記のパラメーター (echostr を除く) がリクエスト URL に含まれ、検証方法は最初の検証 URL と同じになります。 | 上記の手順に従って、これらのパラメータを取得し、WeChat が提供するメッセージ処理関數(shù)を呼び出して暗號(hào)化と復(fù)號(hào)化処理を?qū)g行する必要があります。 |
#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
認(rè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. エンタープライズアカウントのメッセージ処理
上で紹介したように、WeChat エンタープライズアカウントの URL の検証プロセスには、別のメッセージ処理プロセスがあります。つまり、WeChat サーバーがメッセージを獨(dú)自のアプリケーションに送信します。処理用サーバー 処理プロセス中、アプリケーション サーバーはメッセージを受信した後、タイムリーに定期的な応答処理を?qū)g行する必要があります。
それが以下のコードロジックです。
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); } }
同様に、WeChat サーバーへのメッセージに応答するときも、対応するパラメーターを取得して、メッセージ応答を構(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"];
その他のパラメーター情報(bào)は、エンタープライズ アカウントの構(gòu)成パラメーターから取得されます。
//獲取配置參數(shù)并對(duì)加解密函數(shù)初始化 string CorpToken = accountInfo.Token; string AESKey = accountInfo.EncodingAESKey; string CorpId = accountInfo.CorpID;
次に、WeChat が提供するメッセージ暗號(hào)化および復(fù)號(hào)化クラスを使用して、メッセージを正常に暗號(hào)化および復(fù)號(hào)化します。具體的なオペレーションコードは以下の通りです。
//根據(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("解密消息失??!"); }
最後に、統(tǒng)合処理のために、復(fù)號(hào)化されたメッセージを?qū)潖辘工毳抓互牖楗工硕嗓工坤堡扦埂?
CorpApiDispatch dispatch = new CorpApiDispatch(); string responseContent = dispatch.Execute(sMsg);
このようにして、Enterprise API をカプセル化するときは、メッセージに応答する方法のロジックのみに集中する必要があり、殘りのことについて心配する必要はありません。
WeChat ポータルの C# 開(kāi)発と、WeChat エンタープライズ アカウントの受信、メッセージとイベントの処理と復(fù)號(hào)化のアプリケーションの詳細(xì)については、PHP 中國(guó)語(yǔ) Web サイトに注目してください。

ホットAIツール

Undress AI Tool
脫衣畫像を無(wú)料で

Undresser.AI Undress
リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover
寫真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無(wú)料のコードエディター

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

ゼンドスタジオ 13.0.1
強(qiáng)力な PHP 統(tǒng)合開(kāi)発環(huán)境

ドリームウィーバー CS6
ビジュアル Web 開(kāi)発ツール

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