詳解asp.net微信開發訊息應答方法

高洛峰
發布: 2017-03-24 14:43:13
原創
1666 人瀏覽過

當一般微信用戶向公眾帳號發送訊息時,微信伺服器將POST訊息的XML封包到開發者填寫的URL上。

請注意:

1、关于重试的消息排重,推荐使用msgid排重。
2、微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。详情请见“发送消息-被动回复消息”。
3、为了保证更高的安全保障,开发者可以在公众平台官网的开发者中心处设置消息加密。开启加密后,用户发来的消息会被加密,公众号被动回复用户的消息也需要加密(但开发者通过客服接口等API调用形式向用户发送消息,则不受影响)。关于消息加解密的详细说明,请见“消息加解密说明”。
登入後複製

各訊息類型的推送XML封包結構如下:

 

文字訊息

 <xml>
 <tousername></tousername>
 <fromusername></fromusername> 
 <createtime>1348831860</createtime>
 <msgtype></msgtype>
 <content></content>
 <msgid>1234567890123456</msgid>
 </xml>
登入後複製
開發者微訊號傳送方帳號(一個OpenID)訊息建立時間(整數)##textContent文字訊息內容MsgId訊息id,64位元整數
#參數 描述
##ToUserName
#FromUserName
CreateTime
#MsgType

圖片訊息

 <xml>
 <tousername></tousername>
 <fromusername></fromusername>
 <createtime>1348831860</createtime>
 <msgtype></msgtype>
 <picurl></picurl>
 <mediaid></mediaid>
 <msgid>1234567890123456</msgid>
 </xml>
登入後複製
#參數描述 ToUserName微訊號FromUserName#發送方帳號(一個OpenID)#CreateTime訊息建立時間(整數)#MsgTypeimagePicUrl圖片連結MediaId圖片訊息媒體id,可以呼叫多媒體檔案下載介面來拉取資料。 MsgId訊息id,64位元整數
開發者

##語音訊息

<xml>
<tousername></tousername>
<fromusername></fromusername>
<createtime>1357290913</createtime>
<msgtype></msgtype>
<mediaid></mediaid>
<format></format>
<msgid>1234567890123456</msgid>
</xml>
登入後複製
參數 #描述
#ToUserName 開發者微訊號
FromUserName 發送方帳號(一個OpenID)
CreateTime #訊息建立時間(整數)
MsgType 語音為voice
MediaId 語音訊息媒體id,可以呼叫多媒體檔案下載介面拉取資料。
Format 語音格式,如amr,speex等
MsgID 訊息id,64位元整數

請注意,開通語音辨識後,用戶每次發送語音給公眾號時,微信會在推送的語音訊息XML資料包中,增加一個Recongnition欄位(註:由於客戶端緩存,開發者開啟或關閉語音辨識功能,對新追蹤者立刻生效,對已關注用戶需要24小時生效。開發者可以重新關注此帳號進行測試)。開啟 語音辨識後的語音XML封包如下:

<xml>
<tousername></tousername>
<fromusername></fromusername>
<createtime>1357290913</createtime>
<msgtype></msgtype>
<mediaid></mediaid>
<format></format>
<recognition></recognition>
<msgid>1234567890123456</msgid>
</xml>
登入後複製

多出的欄位中,Format為語音格式,一般為amr,Recognition為語音辨識結果,使用UTF8編碼。

影片訊息

<xml>
<tousername></tousername>
<fromusername></fromusername>
<createtime>1357290913</createtime>
<msgtype></msgtype>
<mediaid></mediaid>
<thumbmediaid></thumbmediaid>
<msgid>1234567890123456</msgid>
</xml>
登入後複製
登入後複製
#參數 描述
ToUserName 開發者微訊號
FromUserName #發送方帳號(一個OpenID)
#CreateTime 訊息建立時間(整數)
#MsgType 影片為video
MediaId 視訊訊息媒體id,可以呼叫多媒體檔案下載介面拉取資料。
ThumbMediaId 視訊訊息縮圖的媒體id,可以呼叫多媒體檔案下載介面拉取資料。
MsgId 訊息id,64位元整數

小視訊訊息

<xml>
<tousername></tousername>
<fromusername></fromusername>
<createtime>1357290913</createtime>
<msgtype></msgtype>
<mediaid></mediaid>
<thumbmediaid></thumbmediaid>
<msgid>1234567890123456</msgid>
</xml>
登入後複製
登入後複製
##影片訊息媒體id,可以呼叫多媒體檔案下載介面拉取資料。 ThumbMediaId視訊訊息縮圖的媒體id,可以呼叫多媒體檔案下載介面拉取資料。 MsgId訊息id,64位元整數

地理位置消息

<xml>
<tousername></tousername>
<fromusername></fromusername>
<createtime>1351776360</createtime>
<msgtype></msgtype>
<location_x>23.134521</location_x>
<location_y>113.358803</location_y>
<scale>20</scale>
<label></label>
<msgid>1234567890123456</msgid>
</xml>
登入後複製
參數 描述
ToUserName 開發者微訊號
FromUserName 發送方帳號(一個OpenID)
CreateTime #訊息創建時間(整數)
MsgType 小影片為shortvideo
MediaId
参数 描述
ToUserName 开发者微信号
FromUserName 发送方帐号(一个OpenID)
CreateTime 消息创建时间 (整型)
MsgType location
Location_X 地理位置维度
Location_Y 地理位置经度
Scale 地图缩放大小
Label 地理位置信息
MsgId 消息id,64位整型

链接消息

<xml>
<tousername></tousername>
<fromusername></fromusername>
<createtime>1351776360</createtime>
<msgtype></msgtype>
<title></title>
<description></description>
<url></url>
<msgid>1234567890123456</msgid>
</xml>
登入後複製
参数 描述
ToUserName 接收方微信号
FromUserName 发送方微信号,若为普通用户,则是一个OpenID
CreateTime 消息创建时间
MsgType 消息类型,link
Title 消息标题
Description 消息描述
Url 消息链接
MsgId

消息id,64位整型

詳解asp.net微信開發訊息應答方法

接續上篇,看ResponseXML(postString);方法如下

  ///


        /// 取得使用者傳送的訊息
        ///

        /// ## post    {
            //使用XMLDocument載入資訊結構                   #            xmlDoc.LoadXml(postString);
            XmlElement rootElement = xmlDoc.DocumentElement;////取得文件的根
XmlNode MsgType = rootElement.SelectSingleNode("MsgType"); //取得訊息的文字類型
            RequestXML requestXML = new RequestXML( ingleNode ("ToUserName").InnerText;//公號
            requestXML.FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText;//使用者
 Time").InnerText ;//建立時間
            requestXML.MsgType = MsgType.InnerText;//訊息類型

   
            ///對訊息的不同類型進行賦值
                         //賦值文字訊息內容
               與已回復XML.Contentent = rootElement.SelectSingleNode("Content").InnerText;
            }
                           ///賦值以地理位置緯度,經度,地圖縮放比例,地理位置說明
                requestXML.Location_X = rootElement.SelectSingleNode("Location_X").InnerText ("Location_Y").InnerText;
                requestXML.Scale = rootElement.SelectSingleNode("Scale").InnerText;
                requestXML.Label = rootElement.SelectSingleNode("Lab     if (requestXML.MsgType.Trim().ToLower() = = "event")
            {
                ////都會使用問題與事件 ("Event").InnerText;
                requestXML.EventKey = rootElement.SelectSingleNode ("EventKey").InnerText;
            }

      if (requestXML.MsgType.Trim,             ///賦值以語音識別}               requestXML.Recognition = rootElement.Select         ResponseMsg( requestXML);

}


 語音辨識功能開啟如下:



##requestXML是我單獨建立的一個類,該類聲明了訊息中常用的屬性字段,如下:

 ///


    /// 接收訊息的實體類別
    ///

    public class RequestXML° .Empty;
        ///
        /// 本公編號
             // /
        /// 使用者微訊號
        ///

   ## /// 建立時間
        ///

        public String CreateTime{get;set;}
        / //
        public String MsgType{get;set;}
        /// ##  #        public String Content{get;set;}
        /*以下為事件類型的訊息特有的屬性*/
         ///

        public String EventName{get;set;}
        ///
          public string EventKey { get; ///

        public int ArticleCount { get; set; }
        /// < summary>
        public string Title { get; set; }
        ///
           public string Description { get; set; }
        ///
        /// 圖片訊息圖片的連結位址
  get ; set; }
        ///
        /// 圖文訊息詳情連結位址
      ##        ///
        /// 圖文訊息集合
        ///
#o      / #        /*以下為地理位置類型的訊息特有的屬性*/
        ///
        /// 地理位置緯度
    ; set; }
        ///
/// 地理位置經度
        ///

        public String Location_Y {get; set; }
  #        ///

        public String Scale { get; set; }
         ///
> ;
        public String Label { get; set; }

    ///
     public String Recognition { get; set; }

     
    }

#繼續專注於  ResponseMsg(requestXML);方法如下,

##繼續關注  ResponseMsg(requestXML);方法如下,
#ML# private voidoid Responsequest(RequestXMLMLsML )
        {

            string MsgType = requestXML.MsgType;

                   //根據訊息類型訊息使用何種類型訊息

                  #                    case "text":

                                         if (!string.IsNullOrWhiteSpace(requestXML.EventName ) && requestXML.EventName.ToString().Trim().Equals("subscribe"))
                  }          SendWelComeMsg(requestXML);//關注時回傳的圖文訊息
                         else if (!string.IsNullOrWhiteSpace(requestXML.EventName) && requestXML.EventName.ToString().Trim().Equals("CLICK"))
                          SendEventMsg(requestXML);//傳送事件訊息
                        }
            

         case "voice":
                                  break;
                        SendMapMsg(requestXML);
break;
                    default:
                  }
            }
            catch (Exception ex     HttpContext.Current.Response.Write(ex.ToString());
            }
        }

先追蹤發送簡訊,SendTextCase(requestXML);///寄件文字
        ///
        ///                      HttpContext.Current.Response.ContentType = "text/xml";

                   HttpContext.Current.Response.Cont      HttpContext.Current.Response.Cont ;

                            地End();

        }


FormatTextXML方法制定格式

  ///


        /// 回傳已格式化的Xml格式內容
        ///
#lt o;公號
        /// 用戶號碼
       /param>
        ///
        private string Format       return "" + DateTime.Now.Subtract(new DateTime(1970, 1, 1, 8, 0, 0)).TotalSeconds.ToString() + "1& </xml>";
#>

這樣就能實現訊息的回應,如果使用者點擊的按鈕,以下程式碼:

    case "event              (!string.IsNullOrWhiteSpace(requestXML.EventName) && requestXML.EventName.ToString().Trim().Equals("subscribe"))

                            SendWelComeMsg(requestXML);//追蹤時回傳的圖文訊息

                         else if (!string.IsNullOrWhiteSpace(requestXML.EventName) && requestXML.EventName.ToString().Trim().Equals("CLICK"))

                          SendEventMsg(requestXML);//寄送事件訊息
                        break;

 ///


        /// 傳送回應事件訊息
        ///
## param>
        private void SendEventMsg(RequestXML requestXML)
        {
          switch (keyStr)
            {
              ##                           case "tianqiyubao":
                       break;
                case "kaixinyixiao" :
                    SendKaiXinMessage(requestXML);//送開心一笑結果集            case  "updateMessage":
                         break;
                case "yuangonghuodong":
                    SendYuanGongHuoDong(requestXML);//發送學生活動
                    break;
                case "yuangongtongzhi":
                    SendYuanGongTongZhi(requestXML);//發送員工通知
                    break;
                case "youwenbida":
                         break;
               case "mywen":
     選項順2ase "mywen":##.    
                    break;
               SendKeFuMessage(requestXML);//接取客服
                                String responseContent = String.Empty;
responseContent = FormatTextXML(requestXML.FromUserName, requestXML.ToUserName,"此功能暫未開放!敬請期待!");
                             HttpContext.Current. Response.ContentEncoding = Encoding.UTF8;
                      }  HttpContext.Current.Response.End();
                    break;
   
#SendWelComeMsg(requestXML);//關注時回傳的圖文訊息

  ///

        ///   

        ///

                String responseContent = String.Empty;

            string newdate = DateTime.Now.Subtract(new DateTime(1970, 1, 1, 8, 0, 0)).Total 或者iaohr. com.cn/weixin/welcome.jpg";
              string.Format(Message_News_Item, "歡迎追蹤德橋員工服務中心", "蘇州德橋人力資源創立於2002年...", PUrlfileName, "http://www.deqiaohr.com.cn/weixin/WxGsjianjie.aspx"));
        .Response.ContentType = "text/xml";
            HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;# #            HttpContext.Current.Response.End ();
        }

Message_News_Main 與Message_News_Item是圖文訊息格式化

  ///


        /// 返回圖片訊息主體
        ///

              get
{
                return @"
                                                
                                      >& lt;/訊息類型>
            
                           
                            {4 }
                           文章>
                         
}
        }
        ///
        ///回圖片訊息項目
        ///

        public static string Message_News_Item
           {
                return @"
          ![CDATA[{0}]]>標題>
                            網址>
                    }![CDATA[{3}]]>
                          ##

   ///


        /// 傳送回應性語音辨識結果
        ///
#lto&foo; /param>
        private void SendVoiceMsg(RequestXML requestXML)
        {
    Name, "您剛才說的語音訊息辨識結果為:" + requestXML.Recognition. ToString());
            HttpContext.Current.Response.ContentType = "text/xml";
               HttpContext.Current.Response.Write(responseContent) ;
            HttpContext.Current.Response.End();
        }

詳解asp.net微信開發訊息應答方法詳解asp.net微信開發訊息應答方法詳解asp.net微信開發訊息應答方法

11網頁,關於網頁圖片自適應的問題,把圖片的寬度設定為100%,即可,如果讓網頁在螢幕中自適應,記得在網頁中一定要加上

######

以上是詳解asp.net微信開發訊息應答方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!