當(dāng)一般微信用戶向公眾帳號(hào)發(fā)送訊息時(shí),微信伺服器將POST訊息的XML封包到開(kāi)發(fā)者填寫(xiě)的URL上。
請(qǐng)注意:
1、關(guān)于重試的消息排重,推薦使用msgid排重。 2、微信服務(wù)器在五秒內(nèi)收不到響應(yīng)會(huì)斷掉連接,并且重新發(fā)起請(qǐng)求,總共重試三次。假如服務(wù)器無(wú)法保證在五秒內(nèi)處理并回復(fù),可以直接回復(fù)空串,微信服務(wù)器不會(huì)對(duì)此作任何處理,并且不會(huì)發(fā)起重試。詳情請(qǐng)見(jiàn)“發(fā)送消息-被動(dòng)回復(fù)消息”。 3、為了保證更高的安全保障,開(kāi)發(fā)者可以在公眾平臺(tái)官網(wǎng)的開(kāi)發(fā)者中心處設(shè)置消息加密。開(kāi)啟加密后,用戶發(fā)來(lái)的消息會(huì)被加密,公眾號(hào)被動(dòng)回復(fù)用戶的消息也需要加密(但開(kāi)發(fā)者通過(guò)客服接口等API調(diào)用形式向用戶發(fā)送消息,則不受影響)。關(guān)于消息加解密的詳細(xì)說(shuō)明,請(qǐng)見(jiàn)“消息加解密說(shuō)明”。
各訊息類型的推送XML封包結(jié)構(gòu)如下:
? |
文字訊息
?<xml> ?<tousername></tousername> ?<fromusername></fromusername>? ?<createtime>1348831860</createtime> ?<msgtype></msgtype> ?<content></content> ?<msgid>1234567890123456</msgid> ?</xml>
#參數(shù) | 描述 |
---|---|
##ToUserName | 開(kāi)發(fā)者|
#FromUserName | |
CreateTime | |
#MsgType | ##text|
Content | 文字訊息內(nèi)容 |
MsgId | 訊息id,64位元整數(shù) |
圖片訊息
#參數(shù) | 描述 |
---|---|
ToUserName | 開(kāi)發(fā)者 | 微訊號(hào)
FromUserName | #發(fā)送方帳號(hào)(一個(gè)OpenID) |
#CreateTime | 訊息建立時(shí)間(整數(shù)) |
#MsgType | image |
PicUrl | 圖片連結(jié) |
MediaId | 圖片訊息媒體id,可以呼叫多媒體檔案下載介面來(lái)拉取資料。 |
MsgId | 訊息id,64位元整數(shù) |
##語(yǔ)音訊息
<xml> <tousername></tousername> <fromusername></fromusername> <createtime>1357290913</createtime> <msgtype></msgtype> <mediaid></mediaid> <format></format> <msgid>1234567890123456</msgid> </xml>
參數(shù) | #描述 |
---|---|
#ToUserName | 開(kāi)發(fā)者微訊號(hào) |
FromUserName | 發(fā)送方帳號(hào)(一個(gè)OpenID) |
CreateTime | #訊息建立時(shí)間(整數(shù)) |
MsgType | 語(yǔ)音為voice |
MediaId | 語(yǔ)音訊息媒體id,可以呼叫多媒體檔案下載介面拉取資料。 |
Format | 語(yǔ)音格式,如amr,speex等 |
MsgID | 訊息id,64位元整數(shù) |
請(qǐng)注意,開(kāi)通語(yǔ)音辨識(shí)後,用戶每次發(fā)送語(yǔ)音給公眾號(hào)時(shí),微信會(huì)在推送的語(yǔ)音訊息XML資料包中,增加一個(gè)Recongnition欄位(註:由於客戶端緩存,開(kāi)發(fā)者開(kāi)啟或關(guān)閉語(yǔ)音辨識(shí)功能,對(duì)新追蹤者立刻生效,對(duì)已關(guān)注用戶需要24小時(shí)生效。開(kāi)發(fā)者可以重新關(guān)注此帳號(hào)進(jìn)行測(cè)試)。開(kāi)啟 語(yǔ)音辨識(shí)後的語(yǔ)音XML封包如下:
<xml> <tousername></tousername> <fromusername></fromusername> <createtime>1357290913</createtime> <msgtype></msgtype> <mediaid></mediaid> <format></format> <recognition></recognition> <msgid>1234567890123456</msgid> </xml>
多出的欄位中,F(xiàn)ormat為語(yǔ)音格式,一般為amr,Recognition為語(yǔ)音辨識(shí)結(jié)果,使用UTF8編碼。
影片訊息
<xml> <tousername></tousername> <fromusername></fromusername> <createtime>1357290913</createtime> <msgtype></msgtype> <mediaid></mediaid> <thumbmediaid></thumbmediaid> <msgid>1234567890123456</msgid> </xml>
#參數(shù) | 描述 |
---|---|
ToUserName | 開(kāi)發(fā)者微訊號(hào) |
FromUserName | #發(fā)送方帳號(hào)(一個(gè)OpenID) |
#CreateTime | 訊息建立時(shí)間(整數(shù)) |
#MsgType | 影片為video |
MediaId | 視訊訊息媒體id,可以呼叫多媒體檔案下載介面拉取資料。 |
ThumbMediaId | 視訊訊息縮圖的媒體id,可以呼叫多媒體檔案下載介面拉取資料。 |
MsgId | 訊息id,64位元整數(shù) |
小視訊訊息
<xml> <tousername></tousername> <fromusername></fromusername> <createtime>1357290913</createtime> <msgtype></msgtype> <mediaid></mediaid> <thumbmediaid></thumbmediaid> <msgid>1234567890123456</msgid> </xml>
參數(shù) | 描述 |
---|---|
ToUserName | 開(kāi)發(fā)者微訊號(hào) |
FromUserName | 發(fā)送方帳號(hào)(一個(gè)OpenID) |
CreateTime | #訊息創(chuàng)建時(shí)間(整數(shù)) |
MsgType | 小影片為shortvideo |
MediaId | ##影片訊息媒體id,可以呼叫多媒體檔案下載介面拉取資料。|
視訊訊息縮圖的媒體id,可以呼叫多媒體檔案下載介面拉取資料。 | |
訊息id,64位元整數(shù) |
參數(shù) | 描述 |
---|---|
ToUserName | 開(kāi)發(fā)者微信號(hào) |
FromUserName | 發(fā)送方帳號(hào)(一個(gè)OpenID) |
CreateTime | 消息創(chuàng)建時(shí)間 (整型) |
MsgType | location |
Location_X | 地理位置維度 |
Location_Y | 地理位置經(jīng)度 |
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>
參數(shù) | 描述 |
---|---|
ToUserName | 接收方微信號(hào) |
FromUserName | 發(fā)送方微信號(hào),若為普通用戶,則是一個(gè)OpenID |
CreateTime | 消息創(chuàng)建時(shí)間 |
MsgType | 消息類型,link |
Title | 消息標(biāo)題 |
Description | 消息描述 |
Url | 消息鏈接 |
MsgId | 消息id,64位整型 |
接續(xù)上篇,看ResponseXML(postString);方法如下
? ///
??????? /// 取得使用者傳送的訊息
??????? ///
??????? /// ## post??? {
??????????? //使用XMLDocument載入資訊結(jié)構(gòu)???????????????????#??????????? xmlDoc.LoadXml(postString);
??????????? XmlElement rootElement = xmlDoc.DocumentElement;////取得文件的根
XmlNode MsgType = rootElement.SelectSingleNode("MsgType"); //取得訊息的文字類型
??????????? RequestXML requestXML = new RequestXML( ingleNode ("ToUserName").InnerText;//公號(hào)
??????????? requestXML.FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText;//使用者
?Time").InnerText ;//建立時(shí)間
??????????? requestXML.MsgType = MsgType.InnerText;//訊息類型
??????????? ///對(duì)訊息的不同類型進(jìn)行賦值
???????????????????????? //賦值文字訊息內(nèi)容
???????????????與已回復(fù)XML.Contentent = rootElement.SelectSingleNode("Content").InnerText;
??????????? }
?????????????????????????? ///賦值以地理位置緯度,經(jīng)度,地圖縮放比例,地理位置說(shuō)明
??????????????? 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")
??????????? {
??????????????? ////都會(huì)使用問(wèn)題與事件?("Event").InnerText;
??????????????? requestXML.EventKey = rootElement.SelectSingleNode ("EventKey").InnerText;
??????????? }
? if (requestXML.MsgType.Trim,???????????? ///賦值以語(yǔ)音識(shí)別}?????????????? requestXML.Recognition = rootElement.Select???????? ResponseMsg( requestXML);
}
?語(yǔ)音辨識(shí)功能開(kāi)啟如下:
##requestXML是我單獨(dú)建立的一個(gè)類,該類聲明了訊息中常用的屬性字段,如下:
?///
??? /// 接收訊息的實(shí)體類別
??? ///
??? public class RequestXML° .Empty;
??????? ///
??????? /// 本公編號(hào)
???????????? // /
??????? /// 使用者微訊號(hào)
??????? ///
???## /// 建立時(shí)間
??????? ///
??????? public String CreateTime{get;set;}
??????? / //
??????? public String MsgType{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; }
??????? ///
??????? /// 圖片訊息圖片的連結(jié)位址
??get ; set; }
??????? ///
??????? /// 圖文訊息詳情連結(jié)位址
??????##??????? ///
??????? /// 圖文訊息集合
??????? ///
??????? ///
??????? /// 地理位置緯度
????; set; }
??????? ///
/// 地理位置經(jīng)度
??????? ///
??????? public String Location_Y {get; set; }
??#??????? ///
??????? public String Scale { get; set; }
???????? ///
??????? public String Label { get; set; }
? ///
?????public String Recognition { get; set; }
??? ?
??? }
#繼續(xù)專注於? ResponseMsg(requestXML);方法如下,
##繼續(xù)關(guān)注? ResponseMsg(requestXML);方法如下,
#ML#?private voidoid Responsequest(RequestXMLMLsML )
??????? {
?????????????????? //根據(jù)訊息類型訊息使用何種類型訊息
??????????????????#??????????????????? case "text":???????????????????????????????????????? if (!string.IsNullOrWhiteSpace(requestXML.EventName ) && requestXML.EventName.ToString().Trim().Equals("subscribe"))
??????????????????}????????? SendWelComeMsg(requestXML);//關(guān)注時(shí)回傳的圖文訊息
???????????????????????? 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());
??????????? }
??????? }
先追蹤發(fā)送簡(jiǎn)訊,SendTextCase(requestXML);///寄件文字
??????? ///
??????? /// ???????????????????? HttpContext.Current.Response.ContentType = "text/xml";
????????????????????????????地End();
??????? }
FormatTextXML方法制定格式
? ///
??????? /// 回傳已格式化的Xml格式內(nèi)容
??????? ///
??????? /// 用戶號(hào)碼
???????/param>
??????? ///
??????? private string Format?????? return "
#>
這樣就能實(shí)現(xiàn)訊息的回應(yīng),如果使用者點(diǎn)擊的按鈕,以下程式碼:
??????????????????????????? SendWelComeMsg(requestXML);//追蹤時(shí)回傳的圖文訊息
???????????????????????? else if (!string.IsNullOrWhiteSpace(requestXML.EventName) && requestXML.EventName.ToString().Trim().Equals("CLICK"))????????????????????????? SendEventMsg(requestXML);//寄送事件訊息
??????????????????????? break;
?///
??????? /// 傳送回應(yīng)事件訊息
??????? ///
??????? private void SendEventMsg(RequestXML requestXML)
??????? {
????????? switch (keyStr)
??????????? {
??????????????##?????????????????????????? case "tianqiyubao":
?????????????????????? break;
??????????????? case "kaixinyixiao" :
??????????????????? SendKaiXinMessage(requestXML);//送開(kāi)心一笑結(jié)果集??????????? case? "updateMessage":
???????????????????????? break;
??????????????? case "yuangonghuodong":
??????????????????? SendYuanGongHuoDong(requestXML);//發(fā)送學(xué)生活動(dòng)
??????????????????? break;
??????????????? case "yuangongtongzhi":
??????????????????? SendYuanGongTongZhi(requestXML);//發(fā)送員工通知
??????????????????? break;
??????????????? case "youwenbida":
???????????????????????? break;
?????????????? case "mywen":
?????????選項(xiàng)順2ase "mywen":##.????
??????????????????? break;
?????????????? SendKeFuMessage(requestXML);//接取客服
??????????????????????????????? String responseContent = String.Empty;
responseContent = FormatTextXML(requestXML.FromUserName, requestXML.ToUserName,"此功能暫未開(kāi)放!敬請(qǐng)期待!");
???????????????????????????? HttpContext.Current. Response.ContentEncoding = Encoding.UTF8;
??????????????????????}? HttpContext.Current.Response.End();
??????????????????? break;
???
#SendWelComeMsg(requestXML);//關(guān)注時(shí)回傳的圖文訊息
? ///
??????? ///
??????????????? 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, "歡迎追蹤德橋員工服務(wù)中心", "蘇州德橋人力資源創(chuàng)立於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是圖文訊息格式化
? /// ?? /// 11網(wǎng)頁(yè),關(guān)於網(wǎng)頁(yè)圖片自適應(yīng)的問(wèn)題,把圖片的寬度設(shè)定為100%,即可,如果讓網(wǎng)頁(yè)在螢?zāi)恢凶赃m應(yīng),記得在網(wǎng)頁(yè)中一定要加上
??????? /// 返回圖片訊息主體
??????? ///
????????????? get
{
??????????????? return @"
????????????????????????????????????????????????
?????????????????????????????????????
????????????
???????????????????????????
??????????????????????????? {4 }
?????????????????????????? 文章>
?????????????????????????
??????? }
??????? ///
??????? ///回圖片訊息項(xiàng)目
??????? ///
??????? public static string Message_News_Item
?????????? {
??????????????? return @"
??????????![CDATA[{0}]]>標(biāo)題>
??????????????????????????? 網(wǎng)址>
????????????????????}![CDATA[{3}]]>
??????????????????????????##
??????? /// 傳送回應(yīng)性語(yǔ)音辨識(shí)結(jié)果
??????? ///
??????? private void SendVoiceMsg(RequestXML requestXML)
??????? {
????Name, "您剛才說(shuō)的語(yǔ)音訊息辨識(shí)結(jié)果為:" + requestXML.Recognition. ToString());
??????????? HttpContext.Current.Response.ContentType = "text/xml";
?????????????? HttpContext.Current.Response.Write(responseContent) ;
??????????? HttpContext.Current.Response.End();
??????? }
以上是詳解asp.net微信開(kāi)發(fā)訊息應(yīng)答方法的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6
視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版
神級(jí)程式碼編輯軟體(SublimeText3)