亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#微信開發(fā)之接收 / 返回文本消息

 更新時(shí)間:2017年02月05日 14:42:20   作者:likar  
本文主要介紹了C#微信開發(fā)之接收 / 返回文本消息原理與實(shí)現(xiàn)方法,具有一定的參考價(jià)值,下面跟著小編一起來看下吧

接收 / 返回文本消息

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

當(dāng)普通微信用戶向公眾賬號(hào)發(fā)消息時(shí),微信服務(wù)器將POST消息的XML數(shù)據(jù)包到開發(fā)者填寫的URL上,著手開發(fā)之前先行閱讀微信公眾平臺(tái)接收普通消息微信開發(fā)文檔,對(duì)微信的這種消息處理機(jī)制有一定了解之后再著手開發(fā)(微信開發(fā)接收普通消息開發(fā)文檔

注意點(diǎn):

1、關(guān)于重試的消息排重,推薦使用msgid排重。

2、微信服務(wù)器在五秒內(nèi)收不到響應(yīng)會(huì)斷掉連接,并且重新發(fā)起請(qǐng)求,總共重試三次。假如服務(wù)器無法保證在五秒內(nèi)處理并回復(fù),可以直接回復(fù)空串,微信服務(wù)器不會(huì)對(duì)此作任何處理,并且不會(huì)發(fā)起重試。詳情請(qǐng)見“發(fā)送消息-被動(dòng)回復(fù)消息”。

3、為了保證更高的安全保障,開發(fā)者可以在公眾平臺(tái)官網(wǎng)的開發(fā)者中心處設(shè)置消息加密。開啟加密后,用戶發(fā)來的消息會(huì)被加密,公眾號(hào)被動(dòng)回復(fù)用戶的消息也需要加密(但開發(fā)者通過客服接口等API調(diào)用形式向用戶發(fā)送消息,則不受影響)。關(guān)于消息加解密的詳細(xì)說明,請(qǐng)見“消息加解密說明”。

 POST到開發(fā)者服務(wù)器上邊的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>

 接收消息數(shù)據(jù)包參數(shù)說明:

 返回文本消息的XML格式:

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

返回文本消息數(shù)據(jù)包參數(shù)說明:

②接收/返回文本消息代碼實(shí)現(xiàn)

開發(fā)者在自己服務(wù)器上邊接收微信服務(wù)器POST過來的XML數(shù)據(jù)包接收代碼如下:

if(IsPostBack)
{ 
  //*********************************自動(dòng)應(yīng)答代碼塊*********************************
  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);
  }
  //********************************自動(dòng)應(yīng)答代碼塊end*******************************
}

注意:接收消息的時(shí)候要將消息格式轉(zhuǎn)化為“GBK”格式,否則后邊進(jìn)行消息解析的時(shí)候沒辦法進(jìn)行有效解析。

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

/// <summary>
/// 統(tǒng)一全局返回消息處理方法
/// </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>
/// 接受文本消息并回復(fù)自定義消息
/// </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 == "指定回復(fù)消息的自定義文本")
   {
     responseContent = string.Format(XMLTemplate.Message_Text,
       FromUserName.InnerText,
       ToUserName.InnerText,
       DateTime.Now.Ticks,
       "自定義回復(fù)消息內(nèi)容");
   }
 }
 return responseContent;
}

到這里實(shí)現(xiàn)功能的代碼演示已完畢,后邊其他的消息處理模式也是根據(jù)這種方式在做交互,比如:接收/回復(fù)文本消息、圖片消息、語音消息、視頻消息、小視頻消息、地理位置消息、鏈接消息等都可以參照以上代碼進(jìn)行功能實(shí)現(xiàn)。

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!

相關(guān)文章

  • C#實(shí)現(xiàn)全局快捷鍵功能

    C#實(shí)現(xiàn)全局快捷鍵功能

    這篇文章介紹了C#實(shí)現(xiàn)全局快捷鍵功能的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • C# dll代碼混淆加密的實(shí)現(xiàn)

    C# dll代碼混淆加密的實(shí)現(xiàn)

    本文主要介紹了C# dll代碼混淆加密的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 采用C#實(shí)現(xiàn)軟件自動(dòng)更新的方法

    采用C#實(shí)現(xiàn)軟件自動(dòng)更新的方法

    這篇文章主要介紹了采用C#實(shí)現(xiàn)軟件自動(dòng)更新的方法,非常實(shí)用的功能,需要的朋友可以參考下
    2014-08-08
  • WPF+ASP.NET SignalR實(shí)現(xiàn)后臺(tái)通知功能的示例代碼

    WPF+ASP.NET SignalR實(shí)現(xiàn)后臺(tái)通知功能的示例代碼

    本文以一個(gè)簡單示例,簡述如何通過WPF+ASP.NET SignalR實(shí)現(xiàn)消息后臺(tái)通知以及數(shù)據(jù)的實(shí)時(shí)刷新,僅供學(xué)習(xí)分享使用,如有不足之處,還請(qǐng)指正
    2022-09-09
  • 簡單聊聊c# 事件

    簡單聊聊c# 事件

    這篇文章主要介紹了c# 事件的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C#實(shí)現(xiàn)文件夾的復(fù)制和刪除

    C#實(shí)現(xiàn)文件夾的復(fù)制和刪除

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)文件夾的復(fù)制和刪除功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • C#使用MathNet生成矩陣并打印矩陣元素

    C#使用MathNet生成矩陣并打印矩陣元素

    MathNet.Numerics中提供了線性代數(shù)、微積分、特殊函數(shù)、概率論、隨機(jī)函數(shù)、插值、最優(yōu)化等一系列功能,是.net技術(shù)中首選的數(shù)值計(jì)算包,本文給大家介紹了C#如何使用MathNet生成矩陣并打印矩陣元素,文中通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • 基于Silverlight DataGrid中無代碼設(shè)置開始與結(jié)束日期DatePicker的實(shí)現(xiàn)方法

    基于Silverlight DataGrid中無代碼設(shè)置開始與結(jié)束日期DatePicker的實(shí)現(xiàn)方法

    本篇文章是對(duì)Silverlight DataGrid中無代碼設(shè)置開始與結(jié)束日期DatePicker的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C#中實(shí)現(xiàn)契約測(cè)試的方法

    C#中實(shí)現(xiàn)契約測(cè)試的方法

    這篇文章主要介紹了C#中實(shí)現(xiàn)契約測(cè)試,在本文中,我將揭開契約測(cè)試的神秘面紗,并向您展示如何在 C# 項(xiàng)目中實(shí)現(xiàn)它,需要的朋友可以參考下
    2023-09-09
  • C#使用JsonConvert全面解析JSON

    C#使用JsonConvert全面解析JSON

    這篇文章主要介紹了C#使用JsonConvert全面解析JSON,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12

最新評(píng)論