4.0 テキストメッセージの受信/返信
①テキストメッセージの受信/返信の原理の説明
一般のWeChatユーザーが公開アカウントにメッセージを送信すると、WeChatサーバーはメッセージのXMLデータパケットをPOSTします。開発者が入力した URL にアクセスします。開発を開始する前に、まず通常のメッセージを受信するための WeChat パブリック プラットフォーム用の WeChat 開発ドキュメントを読み、WeChat のメッセージ処理メカニズムをある程度理解してから開発を開始してください (通常のメッセージを受信するための WeChat 開発ドキュメント)メッセージ)
注:
1. メッセージの重複を再試行する場合は、msgid を使用してメッセージの重複を排除することをお勧めします。
2. WeChat サーバーが 5 秒以内に応答を受信しない場合、接続は切断され、リクエストは合計 3 回再試行されます。サーバーが 5 秒以内に処理して応答することを保証できない場合は、空の文字列で直接応答できます。WeChat サーバーはこれに対して何もせず、再試行も開始しません。詳細については、「メッセージの送信 - メッセージへの受動的返信」を参照してください。
3. より高いセキュリティを確保するために、開発者はパブリック プラットフォームの公式 Web サイトの開発者センターでメッセージ暗号化を設定できます。暗号化をオンにすると、ユーザーが送信するメッセージが暗号化され、公式アカウントによってユーザーに受動的に返信されるメッセージも暗号化する必要があります (ただし、カスタマー サービス インターフェイスなどの API 呼び出しを通じてユーザーにメッセージを送信する開発者は影響を受けません)。メッセージの暗号化と復号化の詳細な手順については、「メッセージの暗号化と復号化の手順」を参照してください。
開発者サーバーへの POST の XML 形式は次のとおりです:
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[this is a test]]></Content> <MsgId>1234567890123456</MsgId> </xml>
受信メッセージ パケットのパラメータの説明:
返されるテキスト メッセージの XML 形式:
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[你好]]></Content> </xml>
Return テキスト メッセージ パケットのパラメーターの説明:
②テキスト メッセージの受信/返信コードの実装
開発者は自分のサーバーで 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 サイトに注目してください。