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消息才可以发送给微信用户,如图中公众账号回复了测试的文本消息,说明微信接收消息成功。
本文版权归作者(谢俊)和博客园所有,欢迎转载,转载请标明出处。