文章導讀:
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消息才可以發送給微信用戶,如圖中公眾賬號回復了測試的文本消息,說明微信接收消息成功。
本文版權歸作者(謝俊)和博客園所有,歡迎轉載,轉載請標明出處。