• C#/ASP.NET MVC微信公众号接口开发之从零开发(二) 接收微信消息并且解析XML(附源码)


    文章导读:

    C#微信公众号接口开发之从零开发(一) 接入微信公众平台

    微信接入之后,微信通过我们接入的地址进行通信,其中的原理是微信用户发送消息给微信公众账号,微信服务器将消息以xml的形式发送到我们的绑定的地址上,通过解析XML数据,获取到微信用户发送的消息,让根据微信消息(文本:关键字,图片,语音等等)回复XML格式的数据给微信服务器,微信服务器再将接收到的消息返回给用户微信。

    我们所需要做的:接收消息返回消息

    一、创建实体类

    首先看文档http://mp.weixin.qq.com/wiki/10/79502792eef98d6e0c6e1739da387346.html

    微信发送过来的消息XML格式我们先创建一个实体类来解析XML数据 实体类根据后续开发增加

     1 /// <summary>
     2 /// 微信接口XmlModel
     3 /// XML解析
     4 /// </summary>
     5 public class WxXmlModel
     6 {
     7     /// <summary>
     8     /// 消息接收方微信号
     9     /// </summary>
    10     public string ToUserName { get; set; }
    11     /// <summary>
    12     /// 消息发送方微信号
    13     /// </summary>
    14     public string FromUserName { get; set; }
    15     /// <summary>
    16     /// 创建时间
    17     /// </summary>
    18     public string CreateTime { get; set; }
    19     /// <summary>
    20     /// 信息类型 地理位置:location,文本消息:text,消息类型:image
    21     /// </summary>
    22     public string MsgType { get; set; }
    23     /// <summary>
    24     /// 信息内容
    25     /// </summary>
    26     public string Content { get; set; }
    27     /// <summary>
    28     /// 地理位置纬度
    29     /// </summary>
    30     public string Location_X { get; set; }
    31     /// <summary>
    32     /// 地理位置经度
    33     /// </summary>
    34     public string Location_Y { get; set; }
    35     /// <summary>
    36     /// 地图缩放大小
    37     /// </summary>
    38     public string Scale { get; set; }
    39     /// <summary>
    40     /// 地理位置信息
    41     /// </summary>
    42     public string Label { get; set; }
    43     /// <summary>
    44     /// 图片链接,开发者可以用HTTP GET获取
    45     /// </summary>
    46     public string PicUrl { get; set; }
    47     /// <summary>
    48     /// 事件类型,subscribe(订阅/扫描带参数二维码订阅)、unsubscribe(取消订阅)、CLICK(自定义菜单点击事件) 、SCAN(已关注的状态下扫描带参数二维码)
    49     /// </summary>
    50     public string Event { get; set; }
    51     /// <summary>
    52     /// 事件KEY值
    53     /// </summary>
    54     public string EventKey { get; set; }
    55     /// <summary>
    56     /// 二维码的ticket,可以用来换取二维码
    57     /// </summary>
    58     public string Ticket { get; set; }
    59 }

    二、接收消息若成功返回提示消息

     1 /// <summary>
     2 /// 接收微信发送的XML消息并且解析
     3 /// </summary>
     4 private void ReceiveXml()
     5 {
     6     Stream requestStream = System.Web.HttpContext.Current.Request.InputStream;
     7     byte[] requestByte = new byte[requestStream.Length];
     8     requestStream.Read(requestByte, 0, (int)requestStream.Length);
     9     string requestStr = Encoding.UTF8.GetString(requestByte);
    10 
    11     if (!string.IsNullOrEmpty(requestStr))
    12     {
    13         //封装请求类
    14         XmlDocument requestDocXml = new XmlDocument();
    15         requestDocXml.LoadXml(requestStr);
    16         XmlElement rootElement = requestDocXml.DocumentElement;
    17         WxXmlModel WxXmlModel = new WxXmlModel();
    18         WxXmlModel.ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText;
    19         WxXmlModel.FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText;
    20         WxXmlModel.CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText;
    21         WxXmlModel.MsgType = rootElement.SelectSingleNode("MsgType").InnerText;
    22         switch (WxXmlModel.MsgType)
    23         {
    24             case "text"://文本
    25                 WxXmlModel.Content = rootElement.SelectSingleNode("Content").InnerText;
    26                 break;
    27             case "image"://图片
    28                 WxXmlModel.PicUrl = rootElement.SelectSingleNode("PicUrl").InnerText;
    29                 break;
    30             case "event"://事件
    31                 WxXmlModel.Event = rootElement.SelectSingleNode("Event").InnerText;
    32                 if (WxXmlModel.Event == "subscribe")//关注类型
    33                 {
    34                     WxXmlModel.EventKey = rootElement.SelectSingleNode("EventKey").InnerText;
    35                 }
    36                 break;
    37             default:
    38                 break;
    39         }      
    40         ResponseXML(WxXmlModel);//回复消息
    41     }
    42 }

    如图为我测试的情况:

    只有微信请求我们的地址,我们返回去的xml消息才可以发送给微信用户,如图中公众账号回复了测试的文本消息,说明微信接收消息成功。

    本文版权归作者(谢俊)和博客园所有,欢迎转载,转载请标明出处。

    原文地址:http://www.cnblogs.com/net-xiejun/

    微信开发群C#.NETWEB程序开发交流

    完整源码下载:https://github.com/xiejun-net/weixin

  • 相关阅读:
    ASP.NET事件顺序
    Discuz!NT 代码阅读笔记(9)DNT数据库中唯一的用户函数解析
    Discuz!NT代码阅读笔记(2)网站安装自动化论坛程序安装及初始化过程
    ASP.NET网站和ASP.NET应用程序的区别
    根据日期获得当天是星期几/蔡勒(Zeller)公式
    Discuz!NT 代码阅读笔记(8)DNT的几个分页存储过程解析
    Excel导出数据报表的类
    MSDN Magazine的下载
    openSuSE 11.0正式版发布了
    用lighttpd+mono在Linux上面跑ASP.NET程序
  • 原文地址:https://www.cnblogs.com/net-xiejun/p/4652476.html
Copyright © 2020-2023  润新知