首頁  >  文章  >  微信小程式  >  C#微信開發之接收 / 返回文字訊息原理與實作方法

C#微信開發之接收 / 返回文字訊息原理與實作方法

高洛峰
高洛峰原創
2017-03-16 14:52:281879瀏覽

本文C#微信開發之接收/ 返回文字訊息原理與實現方法,具有一定的參考價值,下面跟著小編一起來看下吧

#接收/返回文字訊息

①接收/返回文字訊息原理說明

#當普通微信用戶向公眾帳號發送訊息時,微信伺服器將POST訊息的XML資料包到開發者填寫的URL上,著手開發之前先行閱讀微信公眾平台接收普通訊息微信開發文檔,對微信的這種訊息處理機制有一定了解之後再著手開發(微信開發接收普通訊息開發文件)

注意點:

1、關於重試的訊息排重,推薦使用msgid排重。

2、微信伺服器在五秒鐘內收不到回應會斷掉連接,並且重新發起請求,總共重試三次。假如伺服器無法保證在五秒內處理並回复,可以直接回复空串,微信伺服器不會對此作任何處理,並且不會發起重試。詳情請見「傳送訊息-被動回覆訊息##」。

3、為了確保更高的安全性保障,開發者可以在公眾平台官網的開發者中心處設定訊息加密。開啟加密後,用戶發送的訊息會被加密,公眾號被動回覆用戶的訊息也需要加密(但開發者透過客服介面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>

接收訊息封包參數說明:

C#微信开发之接收 / 返回文本消息原理与实现方法

 傳回文字訊息的XML格式:

#

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

C#微信开发之接收 / 返回文本消息原理与实现方法

##傳回文字訊息封包參數說明:

#②接收/回傳文字訊息代碼實作

開發者在自己伺服器上邊接收微信伺服器POST過來的XML封包接收代碼如下:

if(IsPostBack)
{ 
  //*********************************自动应答代码块*********************************
  string postString = string.Empty;
  using (Stream stream = HttpContext.Current.Request.InputStream)
  {
    Byte[] postBytes = new Byte[stream.Length];
    stream.Read(postBytes, 0, (Int32)stream.Length);
    //接收的消息为GBK格式
    postString = Encoding.GetEncoding("GBK").GetString(postBytes);
    string responseContent = help.ReturnMessage(postString );
    //返回的消息为UTF-8格式
    HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;
    HttpContext.Current.Response.Write(responseContent);
  }
  //********************************自动应答代码块end*******************************
}

######################## ########注意:接收訊息的時候要將訊息格式轉換為「GBK」格式,否則後邊進行訊息解析的時候沒辦法進行有效解析。 ###############ReturnMessage()處理方法程式碼如下:###############
/// <summary>
/// 统一全局返回消息处理方法
/// </summary>
/// <param name="postStr"></param>
/// <returns></returns>
public string ReturnMessage(string postStr)
{
  string responseContent = "";
  XmlDocument xmldoc = new XmlDocument();
  xmldoc.Load(new System.IO.MemoryStream(System.Text.Encoding.GetEncoding("GB2312").GetBytes(postStr)));
  XmlNode MsgType = xmldoc.SelectSingleNode("/xml/MsgType");
  if (MsgType != null)
  {
    switch (MsgType.InnerText)
    {
      case "event":
        responseContent = EventHandle(xmldoc);//菜单事件处理
        break;
      case "text":
        responseContent = TextHandle(xmldoc);//文本消息处理
        break;
      default:
        break;
   }
  }
  return responseContent;
}
########### ####TextHandle(xmldoc)處理方法程式碼如下:###############
 /// <summary>
/// 接受文本消息并回复自定义消息
/// </summary>
/// <param name="xmldoc"></param>
/// <returns></returns>
public string TextHandle(XmlDocument xmldoc)
{
 string responseContent = "";
 XmlNode ToUserName = xmldoc.SelectSingleNode("/xml/ToUserName");
 XmlNode FromUserName = xmldoc.SelectSingleNode("/xml/FromUserName");
 XmlNode Content = xmldoc.SelectSingleNode("/xml/Content");
 if (Content != null)
 {
   if (Content.InnerText == "指定回复消息的自定义文本")
   {
     responseContent = string.Format(XMLTemplate.Message_Text,
       FromUserName.InnerText,
       ToUserName.InnerText,
       DateTime.Now.Ticks,
       "自定义回复消息内容");
   }
 }
 return responseContent;
}
#########到這裡實作功能的程式碼示範已完畢,後邊其他的訊息處理模式也是根據這種方式在做交互,例如:接收/回覆文字訊息、###圖片###訊息、語音訊息、###影片###訊息、小視訊訊息、地理位置訊息、連結訊息等都可以參考以上程式碼進行功能實現。 ###

以上是C#微信開發之接收 / 返回文字訊息原理與實作方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn