Maison  >  Article  >  Applet WeChat  >  Principe de développement C# WeChat et méthode de mise en œuvre pour recevoir/retourner des messages texte

Principe de développement C# WeChat et méthode de mise en œuvre pour recevoir/retourner des messages texte

高洛峰
高洛峰original
2017-03-16 14:52:281860parcourir

Cet articleC#Le principe et la méthode de mise en œuvre de réception/retour de messages texte dans le développement WeChat ont une certaine valeur de référence. Jetons-y un coup d'œil avec l'éditeur ci-dessous

Recevoir/retourner des messages texte

①Explication du principe de réception/retour de messages texte

Lorsque les utilisateurs ordinaires de WeChat envoient des messages au public comptes, WeChat Le serveur envoie le paquet de données XML du message POST à ​​l'URL renseignée par le développeur. Avant de commencer le développement, lisez le document de développement WeChat de la plateforme publique WeChat recevant les messages ordinaires et ayez une certaine compréhension. du mécanisme de traitement des messages de WeChat. Démarrer le développement (document de développement WeChat pour recevoir des messages ordinaires)

Remarques :

1 . À propos des nouvelles tentatives Pour la duplication de messages, il est recommandé d'utiliser msgid pour dédoublonner les messages.

2. Si le serveur WeChat ne reçoit pas de réponse dans les cinq secondes, il se déconnectera 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 -Message de réponse passive ".

3. Afin d'assurer une protection de sécurité plus élevée, les développeurs peuvent configurer le cryptage des messages dans le centre des développeurs sur le site officiel du plateforme publique. Une fois le cryptage activé, les messages envoyés par les utilisateurs seront cryptés et les réponses passives des comptes publics aux messages des utilisateurs doivent également être cryptées (mais les développeurs envoient des messages aux utilisateurs via le service client Interface et d'autres API appels), cela ne sera pas affecté). Pour des instructions détaillées sur le cryptage et le déchiffrement des messages, veuillez consulter « Instructions de cryptage et de décryptage 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>

Recevoir un messageDescription du paramètre du paquet de données :

C#微信开发之接收 / 返回文本消息原理与实现方法

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>

Description du paramètre du paquet de message texte de retour :

C#微信开发之接收 / 返回文本消息原理与实现方法

②Réception/retour d'implémentation du code du message texte

Le développeur reçoit le paquet de données XML POST du serveur WeChat sur son propre serveur. Le code de réception 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 d'un message, le format du message doit être converti au format "GBK", sinon il ne sera pas analysé efficacement lors de l'analyse ultérieure du message. .

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 pour implémenter la fonction a été complétée ici Complète, d'autres modes de traitement des messages ultérieurs interagissent également en fonction de cette méthode, tels que : recevoir/répondre des messages texte, des messages

images, des messages vocaux, des messages vidéo , de petits messages vidéo, des messages de géolocalisation, des messages de lien, etc. peuvent être implémentés en se référant au code ci-dessus.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn