ホームページ >WeChat アプレット >WeChatの開発 >C# WeChat 開発シリーズ - テキスト メッセージの受信/返信

C# WeChat 開発シリーズ - テキスト メッセージの受信/返信

高洛峰
高洛峰オリジナル
2017-03-03 09:24:242171ブラウズ

4.0 テキストメッセージの受信/返信

①テキストメッセージの受信/返信の原理の説明

一般のWeChatユーザーが公開アカウントにメッセージを送信すると、WeChatサーバーはメッセージのXMLデータパケットをPOSTします。開発者が入力した URL にアクセスします。開発を開始する前に、まず通常のメッセージを受信するための WeChat パブリック プラットフォーム用の WeChat 開発ドキュメントを読み、WeChat のメッセージ処理メカニズムをある程度理解してから開発を開始してください (通常のメッセージを受信するための WeChat 開発ドキュメント)メッセージ)

注:


1. メッセージの重複を再試行する場合は、msgid を使用してメッセージの重複を排除することをお勧めします。

2. WeChat サーバーが 5 秒以内に応答を受信しない場合、接続は切断され、リクエストは合計 3 回再試行されます。サーバーが 5 秒以内に処理して応答することを保証できない場合は、空の文字列で直接応答できます。WeChat サーバーはこれに対して何もせず、再試行も開始しません。詳細については、「メッセージの送信 - メッセージへの受動的返信」を参照してください。

3. より高いセキュリティを確保するために、開発者はパブリック プラットフォームの公式 Web サイトの開発者センターでメッセージ暗号化を設定できます。暗号化をオンにすると、ユーザーが送信するメッセージが暗号化され、公式アカウントによってユーザーに受動的に返信されるメッセージも暗号化する必要があります (ただし、カスタマー サービス インターフェイスなどの API 呼び出しを通じてユーザーにメッセージを送信する開発者は影響を受けません)。メッセージの暗号化と復号化の詳細な手順については、「メッセージの暗号化と復号化の手順」を参照してください。

開発者サーバーへの POST の XML 形式は次のとおりです:


 b2a0af5a8fd26276da50279a1c63a57a
 ea5d8177d19f22584533e5c37c389942eae09a64d076f96f3228ae9470271e996671a89dce89e879d9e9c6d81d03862b
 c5123754d1f4829fae4905e8abb602f9590cdcaa06dc33eb0992fff736103f4f42a4b8d57eb0afadcf16b7a02c69caaf 
 246311df1688542638dc52b54a1a4c871348831860e660f1169ff44ea75c5a982fcb1cde61
 42815c2206ae835d7fd68cb4ae21e4dffa796850a1cf5d7bc01ca8cd7f8b83de698463fc03844fbe5a9caafaa1ebd0b1
 ea63b4477034504a08070acf4e0b68b26a60ebcd9401786f5b0ee154aab8bf4caa91fa7c40b1cd973268e154dae1a50e
 0d388664a03eec4d0f6697867adf11561234567890123456d62559defac6782605cccb28f6907157
 21118965b89073f60271ef4a3b5d3c58


受信メッセージ パケットのパラメータの説明:

C#微信开发系列-接收 / 返回文本消息

返されるテキスト メッセージの XML 形式:


b2a0af5a8fd26276da50279a1c63a57a
ea5d8177d19f22584533e5c37c389942eae09a64d076f96f3228ae9470271e996671a89dce89e879d9e9c6d81d03862b
c5123754d1f4829fae4905e8abb602f9590cdcaa06dc33eb0992fff736103f4f42a4b8d57eb0afadcf16b7a02c69caaf
246311df1688542638dc52b54a1a4c8712345678e660f1169ff44ea75c5a982fcb1cde61
42815c2206ae835d7fd68cb4ae21e4dffa796850a1cf5d7bc01ca8cd7f8b83de698463fc03844fbe5a9caafaa1ebd0b1
ea63b4477034504a08070acf4e0b68b2212a4684f1079d663286208e36325081aa91fa7c40b1cd973268e154dae1a50e
21118965b89073f60271ef4a3b5d3c58

Return テキスト メッセージ パケットのパラメーターの説明:

C#微信开发系列-接收 / 返回文本消息

②テキスト メッセージの受信/返信コードの実装

開発者は自分のサーバーで WeChat サーバーから XML データ パケット POST を受信します。受信コードは次のとおりです。

if(IsPostBack)
{ 
  //*********************************自动应答代码块*********************************
  string postString = string.Empty;
  using (Stream stream = HttpContext.Current.Request.InputStream)
  {
    Byte[] postBytes = new Byte[stream.Length];
    stream.Read(postBytes, 0, (Int32)stream.Length);
    //接收的消息为GBK格式
    postString = Encoding.GetEncoding("GBK").GetString(postBytes);
    string responseContent = help.ReturnMessage(postString );
    //返回的消息为UTF-8格式
    HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;
    HttpContext.Current.Response.Write(responseContent);
  }
  //********************************自动应答代码块end*******************************
}

注: メッセージを受信するときは、メッセージ形式を「GBK」形式に変換する必要があります。そうしないと、後でメッセージを解析するときに効果的に解析されません。

ReturnMessage() 処理メソッドのコードは次のとおりです:

/// <summary>
/// 统一全局返回消息处理方法
/// </summary>
/// <param name="postStr"></param>
/// <returns></returns>
public string ReturnMessage(string postStr)
{
  string responseContent = "";
  XmlDocument xmldoc = new XmlDocument();
  xmldoc.Load(new System.IO.MemoryStream(System.Text.Encoding.GetEncoding("GB2312").GetBytes(postStr)));
  XmlNode MsgType = xmldoc.SelectSingleNode("/xml/MsgType");
  if (MsgType != null)
  {
    switch (MsgType.InnerText)
    {
      case "event":
        responseContent = EventHandle(xmldoc);//菜单事件处理
        break;
      case "text":
        responseContent = TextHandle(xmldoc);//文本消息处理
        break;
      default:
        break;
   }
  }
  return responseContent;
}

TextHandle (xmldoc) 処理メソッドのコードは次のとおりです:

/// <summary>
/// 接受文本消息并回复自定义消息
/// </summary>
/// <param name="xmldoc"></param>
/// <returns></returns>
public string TextHandle(XmlDocument xmldoc)
{
 string responseContent = "";
 XmlNode ToUserName = xmldoc.SelectSingleNode("/xml/ToUserName");
 XmlNode FromUserName = xmldoc.SelectSingleNode("/xml/FromUserName");
 XmlNode Content = xmldoc.SelectSingleNode("/xml/Content");
 if (Content != null)
 {
   if (Content.InnerText == "指定回复消息的自定义文本")
   {
     responseContent = string.Format(XMLTemplate.Message_Text,
       FromUserName.InnerText,
       ToUserName.InnerText,
       DateTime.Now.Ticks,
       "自定义回复消息内容");
   }
 }
 return responseContent;
}

関数を実装するコードのデモはここで完了しています。他のメッセージ処理モードもこの中で対話します。たとえば、テキスト メッセージ、画像メッセージ、音声メッセージ、ビデオ メッセージ、ショート ビデオ メッセージ、地理的位置メッセージ、リンク メッセージなどの受信/返信は、上記のコードを参照することで実装できます。

C# WeChat 開発シリーズ - テキスト メッセージの受信/返信に関する記事をさらにご覧になりたい場合は、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。