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

文章导读:

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

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

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

一、创建实体类

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

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

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

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

C#/ASP.NET MVC微信公众号接口开发之从零开发(二) 接收微信消息并且解析XML(附源码)
 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 
18         WxXmlModel WxXmlModel = new WxXmlModel();
19         WxXmlModel.ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText;
20         WxXmlModel.FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText;
21         WxXmlModel.CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText;
22         WxXmlModel.MsgType = rootElement.SelectSingleNode("MsgType").InnerText;
23 
24         switch (WxXmlModel.MsgType)
25         {
26             case "text":
27                 WxXmlModel.Content = rootElement.SelectSingleNode("Content").InnerText;
28                 break;
29             case "image":
30                 WxXmlModel.PicUrl = rootElement.SelectSingleNode("PicUrl").InnerText;
31                 break;
32             case "event":
33                 WxXmlModel.Event = rootElement.SelectSingleNode("Event").InnerText;
34                 if (WxXmlModel.Event == "subscribe")//关注类型
35                 {
36                     WxXmlModel.EventKey = rootElement.SelectSingleNode("EventKey").InnerText;
37                 }
38                 break;
39             default:
40                 break;
41         }
42         sohovan.com.common.CommonMethod.WriteTxt(WxXmlModel.Content);//接收的文本消息
43         //回复消息<xml>
44         //<ToUserName><![CDATA[toUser]]></ToUserName>
45         //<FromUserName><![CDATA[fromUser]]></FromUserName>
46         //<CreateTime>12345678</CreateTime>
47         //<MsgType><![CDATA[text]]></MsgType>
48         //<Content><![CDATA[你好]]></Content>
49         //<FuncFlag>0</FuncFlag>
50         //</xml>
51         string XML = "<xml><ToUserName><![CDATA[" + WxXmlModel.FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + WxXmlModel.ToUserName + "]]></FromUserName><CreateTime>" + sohovan.com.common.CommonMethod.ConvertDateTimeInt(DateTime.Now) + "</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[接收消息成功,消息为" + WxXmlModel.Content + "]]></Content><FuncFlag>0</FuncFlag></xml>";
52         //ResponseXML(WxXmlModel);
53         sohovan.com.common.CommonMethod.WriteTxt(XML);
54         HttpContext.Current.Response.Write(XML);
55         HttpContext.Current.Response.End();
56     }
57 }
View Code

如图为我测试的情况:

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

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

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

 

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

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

上一篇:微信第三方登陆,无需注册一键登录,获取用户信息,PHP实现方法


下一篇:微信开发-如何自定义页面分享元素