《C#微信開發系列(4)-接收 / 返回文本消息》

4.0接收 / 返回文本消息

 

①接收/返回文本消息原理說明

 

當普通微信用戶向公衆帳號發消息時,微信服務器將POST消息的XML數據包到開發者填寫的URL上,着手開發以前先行閱讀微信公衆平臺接收普通消息微信開發文檔,對微信的這種消息處理機制有必定了解以後再着手開發(微信開發接收普通消息開發文檔html

注意點:安全

一、關於重試的消息排重,推薦使用msgid排重。服務器

二、微信服務器在五秒內收不到響應會斷掉鏈接,而且從新發起請求,總共重試三次。假如服務器沒法保證在五秒內處理並回復,能夠直接回復空串,微信服務器不會對此做任何處理,而且不會發起重試。詳情請見「發送消息-被動回覆消息」。微信

三、爲了保證更高的安全保障,開發者能夠在公衆平臺官網的開發者中心處設置消息加密。開啓加密後,用戶發來的消息會被加密,公衆號被動回覆用戶的消息也須要加密(但開發者經過客服接口等API調用形式向用戶發送消息,則不受影響)。關於消息加解密的詳細說明,請見「消息加解密說明」。微信開發

 POST到開發者服務器上邊的XML格式爲:微信公衆平臺

 <xml>
 <ToUserName><![CDATA[toUser]]></ToUserName>
 <FromUserName><![CDATA[fromUser]]></FromUserName> 
 <CreateTime>1348831860</CreateTime>
 <MsgType><![CDATA[text]]></MsgType>
 <Content><![CDATA[this is a test]]></Content>
 <MsgId>1234567890123456</MsgId>
 </xml>

 接收消息數據包參數說明:post

 

返回文本消息的XML格式: 學習

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[你好]]></Content>
</xml>

 

返回文本消息數據包參數說明:this

 

②接收/返回文本消息代碼實現

 

開發者在本身服務器上邊接收微信服務器POST過來的XML數據包接收代碼以下:加密

 1 if(IsPostBack)
 2 { 
 3   //*********************************自動應答代碼塊*********************************
 4   string postString = string.Empty;
 5   using (Stream stream = HttpContext.Current.Request.InputStream)
 6   {
 7     Byte[] postBytes = new Byte[stream.Length];
 8     stream.Read(postBytes, 0, (Int32)stream.Length);
 9     //接收的消息爲GBK格式
10     postString = Encoding.GetEncoding("GBK").GetString(postBytes);
11     string responseContent = help.ReturnMessage(postString );
12     //返回的消息爲UTF-8格式
13     HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;
14     HttpContext.Current.Response.Write(responseContent);
15   }
16   //********************************自動應答代碼塊end*******************************
17 }

注意:接收消息的時候要將消息格式轉化爲「GBK」格式,不然後邊進行消息解析的時候沒辦法進行有效解析。

ReturnMessage()處理方法代碼以下:

 1 /// <summary>
 2 /// 統一全局返回消息處理方法
 3 /// </summary>
 4 /// <param name="postStr"></param>
 5 /// <returns></returns>
 6 public string ReturnMessage(string postStr)
 7 {
 8   string responseContent = "";
 9   XmlDocument xmldoc = new XmlDocument();
10   xmldoc.Load(new System.IO.MemoryStream(System.Text.Encoding.GetEncoding("GB2312").GetBytes(postStr)));
11   XmlNode MsgType = xmldoc.SelectSingleNode("/xml/MsgType");
12   if (MsgType != null)
13   {
14     switch (MsgType.InnerText)
15     {
16       case "event":
17         responseContent = EventHandle(xmldoc);//菜單事件處理
18         break;
19       case "text":
20         responseContent = TextHandle(xmldoc);//文本消息處理
21         break;
22       default:
23         break;
24    }
25   }
26   return responseContent;
27 } 

 TextHandle(xmldoc)處理方法代碼以下:

 1 /// <summary>
 2 /// 接受文本消息並回復自定義消息
 3 /// </summary>
 4 /// <param name="xmldoc"></param>
 5 /// <returns></returns>
 6 public string TextHandle(XmlDocument xmldoc)
 7 {
 8  string responseContent = "";
 9  XmlNode ToUserName = xmldoc.SelectSingleNode("/xml/ToUserName");
10  XmlNode FromUserName = xmldoc.SelectSingleNode("/xml/FromUserName");
11  XmlNode Content = xmldoc.SelectSingleNode("/xml/Content");
12  if (Content != null)
13  {
14    if (Content.InnerText == "指定回覆消息的自定義文本")
15    {
16      responseContent = string.Format(XMLTemplate.Message_Text,
17        FromUserName.InnerText,
18        ToUserName.InnerText,
19        DateTime.Now.Ticks,
20        "自定義回覆消息內容");
21    }
22  }
23  return responseContent;
24 }

到這裏實現功能的代碼演示已完畢,後邊其餘的消息處理模式也是根據這種方式在作交互,好比:接收/回覆文本消息、圖片消息、語音消息、視頻消息、小視頻消息、地理位置消息、連接消息等均可以參照以上代碼進行功能實現。

 


若是你對《C#微信開發系列》這個系列感興趣的話,能夠關注個人其餘文章(持續更新中...),系列隨筆地址以下:

《C#微信開發系列(Top)-微信開發完整學習路線》

《C#微信開發系列(4)-接收 / 返回文本消息》

《C#微信開發系列(3)-獲取接口調用憑據》

《C#微信開發系列(2)-自定義菜單管理》

《C#微信開發系列(1)-啓用開發者模式》

相關文章
相關標籤/搜索