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

原文地址:https://www.cnblogs.com/net-xiejun/p/4652476.html