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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM