• 《C#微信开发系列(4)-接收 / 返回文本消息》


    4.0接收 / 返回文本消息
    ①接收/返回文本消息原理说明

    当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上,着手开发之前先行阅读微信公众平台接收普通消息微信开发文档,对微信的这种消息处理机制有一定了解之后再着手开发(微信开发接收普通消息开发文档

    注意点:

    1、关于重试的消息排重,推荐使用msgid排重。

    2、微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。详情请见“发送消息-被动回复消息”。

    3、为了保证更高的安全保障,开发者可以在公众平台官网的开发者中心处设置消息加密。开启加密后,用户发来的消息会被加密,公众号被动回复用户的消息也需要加密(但开发者通过客服接口等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>

    返回文本消息数据包参数说明:

    ②接收/返回文本消息代码实现

     

    开发者在自己服务器上边接收微信服务器POST过来的XML数据包接收代码如下:

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

    注意:接收消息的时候要将消息格式转化为“GBK”格式,否则后边进行消息解析的时候没办法进行有效解析。

    ReturnMessage()处理方法代码如下:

     1 /// <summary>
     2 /// 统一全局返回消息处理方法
     3 /// </summary>
     4 /// <param name="postStr"></param>
     5 /// <returns></returns>
     6 public string ReturnMessage(string postStr)
     7 {
     8   string responseContent = "";
     9   XmlDocument xmldoc = new XmlDocument();
    10   xmldoc.Load(new System.IO.MemoryStream(System.Text.Encoding.GetEncoding("GB2312").GetBytes(postStr)));
    11   XmlNode MsgType = xmldoc.SelectSingleNode("/xml/MsgType");
    12   if (MsgType != null)
    13   {
    14     switch (MsgType.InnerText)
    15     {
    16       case "event":
    17         responseContent = EventHandle(xmldoc);//菜单事件处理
    18         break;
    19       case "text":
    20         responseContent = TextHandle(xmldoc);//文本消息处理
    21         break;
    22       default:
    23         break;
    24    }
    25   }
    26   return responseContent;
    27 } 

     TextHandle(xmldoc)处理方法代码如下:

     1 /// <summary>
     2 /// 接受文本消息并回复自定义消息
     3 /// </summary>
     4 /// <param name="xmldoc"></param>
     5 /// <returns></returns>
     6 public string TextHandle(XmlDocument xmldoc)
     7 {
     8  string responseContent = "";
     9  XmlNode ToUserName = xmldoc.SelectSingleNode("/xml/ToUserName");
    10  XmlNode FromUserName = xmldoc.SelectSingleNode("/xml/FromUserName");
    11  XmlNode Content = xmldoc.SelectSingleNode("/xml/Content");
    12  if (Content != null)
    13  {
    14    if (Content.InnerText == "指定回复消息的自定义文本")
    15    {
    16      responseContent = string.Format(XMLTemplate.Message_Text,
    17        FromUserName.InnerText,
    18        ToUserName.InnerText,
    19        DateTime.Now.Ticks,
    20        "自定义回复消息内容");
    21    }
    22  }
    23  return responseContent;
    24 }

    到这里实现功能的代码演示已完毕,后边其他的消息处理模式也是根据这种方式在做交互,比如:接收/回复文本消息、图片消息、语音消息、视频消息、小视频消息、地理位置消息、链接消息等都可以参照以上代码进行功能实现。


    如果你对《C#微信开发系列》这个系列感兴趣的话,可以关注我的其他文章(持续更新中...),系列随笔地址如下:

    《C#微信开发系列(Top)-微信开发完整学习路线》

    《C#微信开发系列(4)-接收 / 返回文本消息》

    《C#微信开发系列(3)-获取接口调用凭据》

    《C#微信开发系列(2)-自定义菜单管理》

    《C#微信开发系列(1)-启用开发者模式》


  • 相关阅读:
    html实现 省——市——区三级联动
    test
    JAVA课程设计——坦克大战
    Java MOOC-互评作业-流与文件
    DS博客作业06--图
    DS博客作业08--课程总结
    DS博客作业07--查找
    DS博客作业06--图
    DS博客作业05-树
    DS博客作业01--日期抽象数据类型设计与实现
  • 原文地址:https://www.cnblogs.com/likar/p/5247072.html
Copyright © 2020-2023  润新知