4.0 Réception/retour de messages texte
①Instructions sur le principe de réception/retour de messages texte
Lorsque les utilisateurs ordinaires de WeChat envoient des messages à comptes publics À ce stade, le serveur WeChat enverra le paquet de données XML du message POST à l'URL renseignée par le développeur. Avant de commencer le développement, lisez la plate-forme publique WeChat pour recevoir les messages ordinaires. Documentation de développement WeChat et démarrez le développement après vous. avoir une certaine compréhension du mécanisme de traitement des messages de WeChat (document de développement WeChat pour la réception de messages ordinaires)
Remarques :
1. Concernant la nouvelle tentative de déduplication des messages, c'est le cas. Il est recommandé d'utiliser la déduplication msgid.
2. Si le serveur WeChat ne reçoit pas de réponse dans les cinq secondes, il déconnectera la connexion et relancera la demande, en réessayant trois fois au total. Si le serveur ne peut pas garantir le traitement et la réponse dans les cinq secondes, vous pouvez répondre directement avec une chaîne vide. Le serveur WeChat ne fera rien avec cela et ne lancera pas de nouvelle tentative. Pour plus de détails, veuillez consulter « Envoyer un message – Réponse passive à un message ».
3. Afin d'assurer une plus grande sécurité, les développeurs peuvent configurer le cryptage des messages dans le centre des développeurs sur le site officiel de la plateforme publique. Une fois le cryptage activé, les messages envoyés par les utilisateurs seront cryptés et les messages répondus passivement aux utilisateurs par les comptes officiels doivent également être cryptés (mais les développeurs qui envoient des messages aux utilisateurs via des appels API tels que les interfaces de service client ne seront pas affectés). Pour des instructions détaillées sur le cryptage et le déchiffrement des messages, veuillez consulter « Instructions de cryptage et de déchiffrement des messages ».
Le format XML pour le POST vers le serveur du développeur est :
<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>
Description du paramètre de réception du paquet de messages :
Renvoie le format XML du message texte :
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[你好]]></Content> </xml>
Renvoie le message texte Description du paramètre du paquet de données :
②Implémentation du code de réception/retour du message texte
Les développeurs peuvent le faire lui-même Le code permettant au serveur de recevoir le paquet de données XML POST du serveur WeChat est le suivant :
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******************************* }
Remarque : lors de la réception du message, le format du message doit être converti au format "GBK", sinon, il n'y aura aucun moyen d'analyser le message ultérieurement.
Le code de la méthode de traitement ReturnMessage() est le suivant :
/// <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; }
Le code de la méthode de traitement TextHandle(xmldoc) est le suivant :
/// <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; }
La démonstration de code à implémenter la fonction ici étant terminée, d'autres modes de traitement de messages ultérieurs interagissent également sur la base de cette méthode, tels que : recevoir/répondre des messages texte, des messages image, des messages vocaux, des messages vidéo, des messages vidéo courts, des messages de localisation géographique, des messages de lien, etc. , vous pouvez vous référer au code ci-dessus. Réalisation de la fonction.
Pour plus d'articles sur la réception/retour de messages texte sur les séries de développement C# WeChat, veuillez faire attention au site Web PHP chinois !