




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】微信開發(fā)消息應(yīng)答方法的示例
這篇文章將為大家詳細(xì)講解有關(guān)微信開發(fā)消息應(yīng)答方法的示例,在下覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。當(dāng)普通微信用戶向公眾賬號發(fā)消息時,微信服務(wù)器將POST消息的XML數(shù)據(jù)包到開發(fā)者填寫的URL上。請注意:1、關(guān)于重試的消息排重,推薦使用msgid排重。
2、微信服務(wù)器在五秒內(nèi)收不到響應(yīng)會斷掉連接,并且重新發(fā)起請求,總共重試三次。假如服務(wù)器無法保證在五秒內(nèi)處理并回復(fù),可以直接回復(fù)空串,微信服務(wù)器不會對此作任何處理,并且不會發(fā)起重試。詳情請見“發(fā)送消息-被動回復(fù)消息”。
3、為了保證更高的安全保障,開發(fā)者可以在公眾平臺官網(wǎng)的開發(fā)者中心處設(shè)置消息加密。開啟加密后,用戶發(fā)來的消息會被加密,公眾號被動回復(fù)用戶的消息也需要加密(但開發(fā)者通過客服接口等API調(diào)用形式向用戶發(fā)送消息,則不受影響)。關(guān)于消息加解密的詳細(xì)說明,請見“消息加解密說明”。各消息類型的推送XML數(shù)據(jù)包結(jié)構(gòu)如下:<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>圖片消息
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1348831860</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
<PicUrl><![CDATA[this
is
a
url]]></PicUrl>
<MediaId><![CDATA[media_id]]></MediaId>
<MsgId>1234567890123456</MsgId>
</xml>語音消息<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1357290913</CreateTime>
<MsgType><![CDATA[voice]]></MsgType>
<MediaId><![CDATA[media_id]]></MediaId>
<Format><![CDATA[Format]]></Format>
<MsgId>1234567890123456</MsgId>
</xml>請注意,開通語音識別后,用戶每次發(fā)送語音給公眾號時,微信會在推送的語音消息XML數(shù)據(jù)包中,增加一個Recongnition字段(注:由于客戶端緩存,開發(fā)者開啟或者關(guān)閉語音識別功能,對新關(guān)注者立刻生效,對已關(guān)注用戶需要24小時生效。開發(fā)者可以重新關(guān)注此帳號進行測試)。開啟語音識別后的語音XML數(shù)據(jù)包如下:<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1357290913</CreateTime>
<MsgType><![CDATA[voice]]></MsgType>
<MediaId><![CDATA[media_id]]></MediaId>
<Format><![CDATA[Format]]></Format>
<Recognition><![CDATA[騰訊微信團隊]]></Recognition>
<MsgId>1234567890123456</MsgId>
</xml>多出的字段中,F(xiàn)ormat為語音格式,一般為amr,Recognition為語音識別結(jié)果,使用UTF8編碼。視頻消息<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1357290913</CreateTime>
<MsgType><![CDATA[video]]></MsgType>
<MediaId><![CDATA[media_id]]></MediaId>
<ThumbMediaId><![CDATA[thumb_media_id]]></ThumbMediaId>
<MsgId>1234567890123456</MsgId>
</xml>小視頻消息<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1357290913</CreateTime>
<MsgType><![CDATA[shortvideo]]></MsgType>
<MediaId><![CDATA[media_id]]></MediaId>
<ThumbMediaId><![CDATA[thumb_media_id]]></ThumbMediaId>
<MsgId>1234567890123456</MsgId>
</xml>地理位置消息<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1351776360</CreateTime>
<MsgType><![CDATA[location]]></MsgType>
<Location_X>23.134521</Location_X>
<Location_Y>113.358803</Location_Y>
<Scale>20</Scale>
<Label><![CDATA[位置信息]]></Label>
<MsgId>1234567890123456</MsgId>
</xml>鏈接消息<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1351776360</CreateTime>
<MsgType><![CDATA[link]]></MsgType>
<Title><![CDATA[公眾平臺官網(wǎng)鏈接]]></Title>
<Description><![CDATA[公眾平臺官網(wǎng)鏈接]]></Description>
<Url><![CDATA[url]]></Url>
<MsgId>1234567890123456</MsgId>
</xml>消息id,64位整型接上篇,看ResponseXML(postString);方法如下///<summary>
///獲取用戶發(fā)送的消息
///</summary>
///<paramname="postString"></param>
privatevoidResponseXML(stringpostString)
{
//使用XMLDocument加載信息結(jié)構(gòu)
XmlDocumentxmlDoc=newXmlDocument();
xmlDoc.LoadXml(postString);
XmlElementrootElement=xmlDoc.DocumentElement;//獲取文檔的根
XmlNodeMsgType=rootElement.SelectSingleNode("MsgType");//獲取消息的文本類型
RequestXMLrequestXML=newRequestXML();//聲明實例,獲取各個屬性并賦值
requestXML.ToUserName=rootElement.SelectSingleNode("ToUserName").InnerText;//公眾號
requestXML.FromUserName=rootElement.SelectSingleNode("FromUserName").InnerText;//用戶
requestXML.CreateTime=rootElement.SelectSingleNode("CreateTime").InnerText;//創(chuàng)建時間
requestXML.MsgType=MsgType.InnerText;//消息類型
///對消息的不同類型進行賦值
if(requestXML.MsgType=="text")
{
//賦值文本信息內(nèi)容
requestXML.Content=rootElement.SelectSingleNode("Content").InnerText;
}
if(requestXML.MsgType.Trim()=="location")
{
///賦值地理位置緯度,經(jīng)度,地圖縮放比例,地理位置說明
requestXML.Location_X=rootElement.SelectSingleNode("Location_X").InnerText;
requestXML.Location_Y=rootElement.SelectSingleNode("Location_Y").InnerText;
requestXML.Scale=rootElement.SelectSingleNode("Scale").InnerText;
requestXML.Label=rootElement.SelectSingleNode("Label").InnerText;
}
if(requestXML.MsgType.Trim().ToLower()=="event")
{
///賦值事件名稱和事件key值
requestXML.EventName=rootElement.SelectSingleNode("Event").InnerText;
requestXML.EventKey=rootElement.SelectSingleNode("EventKey").InnerText;
}if(requestXML.MsgType.Trim().ToLower()=="voice")
{
///賦值語音識別結(jié)果,賦值之前一定要記得在開發(fā)者模式下,把語音識別功能開啟,否則獲取不到
requestXML.Recognition=rootElement.SelectSingleNode("Recognition").InnerText;
}
ResponseMsg(requestXML);}語音識別功能開啟如下:requestXML是我單獨創(chuàng)建的一個類,該類聲明了消息中常用的屬性字段,如下:///<summary>
///接收消息的實體類
///</summary>
publicclassRequestXML
{
privateStringtoUserName=String.Empty;
///<summary>
///本公眾號
///</summary>
publicStringToUserName{get;set;}
///<summary>
///用戶微信號
///</summary>
publicStringFromUserName{get;set;}
///<summary>
///創(chuàng)建時間
///</summary>
publicStringCreateTime{get;set;}
///<summary>
///信息類型
///</summary>
publicStringMsgType{get;set;}
///<summary>
///信息內(nèi)容
///</summary>
publicStringContent{get;set;}
/*以下為事件類型的消息特有的屬性*/
///<summary>
///事件名稱
///</summary>
publicStringEventName{get;set;}
///<summary>
///事件值
///</summary>
publicstringEventKey{get;set;}
/*以下為圖文類型的消息特有的屬性*/
///<summary>
///圖文消息的個數(shù)
///</summary>
publicintArticleCount{get;set;}
///<summary>
///圖文消息的標(biāo)題
///</summary>
publicstringTitle{get;set;}
///<summary>
///圖文消息的簡介
///</summary>
publicstringDescription{get;set;}
///<summary>
///圖文消息圖片的鏈接地址
///</summary>
publicstringPicUrl{get;set;}
///<summary>
///圖文消息詳情鏈接地址
///</summary>
publicstringUrl{get;set;}
///<summary>
///圖文消息集合
///</summary>
publicList<RequestXML>Articles{get;set;}
/*以下為地理位置類型的消息特有的屬性*/
///<summary>
///地理位置緯度
///</summary>
publicStringLocation_X{get;set;}
///<summary>
///地理位置經(jīng)度
///</summary>
publicStringLocation_Y{get;set;}
///<summary>
///地圖縮放比例
///</summary>
publicStringScale{get;set;}
///<summary>
///地圖位置說明
///</summary>
publicStringLabel{get;set;}///<summary>
///語音消息特有字段
///</summary>
publicStringRecognition{get;set;}
}繼續(xù)關(guān)注
ResponseMsg(requestXML);方法如下,privatevoidResponseMsg(RequestXMLrequestXML)
{
stringMsgType=requestXML.MsgType;
try
{
//根據(jù)消息類型判斷發(fā)送何種類型消息
switch(MsgType)
{
case"text":
SendTextCase(requestXML);//發(fā)送文本消息
break;
case"event"://發(fā)送事件消息
if(!string.IsNullOrWhiteSpace(requestXML.EventName)&&requestXML.EventName.ToString().Trim().Equals("subscribe"))
{
SendWelComeMsg(requestXML);//關(guān)注時返回的圖文消息
}
elseif(!string.IsNullOrWhiteSpace(requestXML.EventName)&&requestXML.EventName.ToString().Trim().Equals("CLICK"))
{
SendEventMsg(requestXML);//發(fā)送事件消息
}
break;case"voice":
SendVoiceMsg(requestXML);//發(fā)送語音消息
break;
case"location"://發(fā)送位置消息
SendMapMsg(requestXML);
break;
default:
break;
}
}
catch(Exceptionex)
{
HttpContext.Current.Response.Write(ex.ToString());
}
}先來關(guān)注發(fā)送文本消息,SendTextCase(requestXML);//發(fā)送文本消息///<summary>
///發(fā)送文本
///</summary>
///<paramname="requestXML"></param>
privatevoidSendTextCase(RequestXMLrequestXML)
{
stringresponseContent=FormatTextXML(requestXML.FromUserName,requestXML.ToUserName,requestXML.Content);
HttpContext.Current.Response.ContentType="text/xml";
HttpContext.Current.Response.ContentEncoding=Encoding.UTF8;
HttpContext.Current.Response.Write(responseContent);
HttpContext.Current.Response.End();
}FormatTextXML方法制定格式///<summary>
///返回格式化的Xml格式內(nèi)容
///</summary>
///<paramname="p1">公眾號</param>
///<paramname="p2">用戶號</param>
///<paramname="p3">回復(fù)內(nèi)容</param>
///<returns></returns>
privatestringFormatTextXML(stringp1,stringp2,stringp3)
{
return"<xml><ToUserName><![CDATA["+p1+"]]></ToUserName><FromUserName><![CDATA["+p2+"]]></FromUserName><CreateTime>"+DateTime.Now.Subtract(newDateTime(1970,1,1,8,0,0)).TotalSeconds.ToString()+"</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA["+p3+"]]></Content><FuncFlag>1</FuncFlag></xml>";
}這樣就能實現(xiàn)消息的應(yīng)答,如果用戶點擊的按鈕,如下代碼:case"event"://發(fā)送事件消息
if
(!string.IsNullOrWhiteSpace(requestXML.EventName)&&
requestXML.EventName.ToString().Trim().Equals("subscribe"))
{
SendWelComeMsg(requestXML);//關(guān)注時返回的圖文消息
}
elseif(!string.IsNullOrWhiteSpace(requestXML.EventName)&&
requestXML.EventName.ToString().Trim().Equals("CLICK"))
{
SendEventMsg(requestXML);//發(fā)送事件消息
}
break;///<summary>
///發(fā)送響應(yīng)事件消息
///</summary>
///<paramname="requestXML"></param>
privatevoidSendEventMsg(RequestXMLrequestXML)
{
stringkeyStr=requestXML.EventKey.ToString();
switch(keyStr)
{
case"mypay":
SendPayDetails(requestXML);//發(fā)送薪資賬單
break;
case"tianqiyubao":
SendWeaterMessage(requestXML);//發(fā)送天氣預(yù)報
break;
case"kaixinyixiao":
SendKaiXinMessage(requestXML);//發(fā)送開心一笑結(jié)果集
break;
case
"updateMessage":
SendUpdateMessage(requestXML);//發(fā)送修改信息鏈接
break;
case"yuangonghuodong":
SendYuanGongHuoDong(requestXML);//發(fā)送學(xué)生活動
break;
case"yuangongtongzhi":
SendYuanGongTongZhi(requestXML);//發(fā)送員工通知
break;
case"youwenbida":
SendWenti(requestXML);//發(fā)送員工提交問題鏈接
break;
case"mywen":
SendWentiList(requestXML);//發(fā)送問題列表鏈接
break;
case"PhoneSerices":
SendKeFuMessage(requestXML);//接入客服
break;
default:
StringresponseContent=String.Empty;
responseContent=FormatTextXML(requestXML.FromUserName,requestXML.ToUserName,"此功能暫未開放!敬請期待!");
HttpContext.Current.Response.ContentType="text/xml";
HttpContext.Current.Response.ContentEncoding=Encoding.UTF8;
HttpContext.Current.Response.Write(responseContent);
HttpContext.Current.Response.End();
break;
}
}SendWelComeMsg(requestXML);//關(guān)注時返回的圖文消息///<summary>
///發(fā)送關(guān)注時的圖文消息
///</summary>
///<paramname="requestXML"></param>
privatevoidSendWelComeMsg(RequestXMLrequestXML)
{
StringresponseContent=String.Empty;
stringnewdate=DateTime.Now.Subtract(newDateTime(1970,1,1,8,0,0)).TotalSeconds.ToString();
stringPUrlfileName="/weixin/welcome.jpg";
responseContent=string.Format(Message_News_Main,requestXML.FromUserName,requestXML.ToUserName,newdate,"1",
string.Format(Message_News_Item,"歡迎關(guān)注德橋員工服務(wù)中心","蘇州德橋人力資源創(chuàng)立于2002年...",PUrlfileName,"/weixin/WxGsjianjie.aspx"));
HttpContext.Current.Response.ContentType="text/xml";
HttpContext.Current.Response.ContentEncoding=Encoding.UTF8;
HttpContext.Current.Response.Write(responseContent);
HttpContext.Current.Response.End();
}Message_News_Main和Message_News_Item是圖文消息格式化///<summary>
///返回圖文消息主體
///</summary>
publicstaticstringMessage_News_Main
{
get
{
return@"<xml>
<ToUserName><![CDATA[{0}]]></ToUserName>
<FromUserName><![CDATA[{1}]]></FromUserName>
<CreateTime>{2}</CreateTime>
<MsgType><![CDATA[news]]></MsgTy
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電信基站戶外機柜的智能化管理與節(jié)能策略
- 慢性病管理與健康促進考核試卷
- 用戶體驗視角下的移動社交網(wǎng)絡(luò)用戶行為解析
- 班級調(diào)研與需求分析計劃
- 2025年01月河南省牧原實驗室公開招聘93人筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解-1
- 修理門店合同范本
- 小麥種植經(jīng)濟效益評價考核試卷
- 電子音樂制作的技術(shù)創(chuàng)新與教育應(yīng)用
- 學(xué)科教學(xué)與課程設(shè)計方案計劃
- 固體飲料的口感調(diào)配與消費者喜好考核試卷
- 2024年12月大學(xué)英語四級CET-4真題試卷
- 高中生物學(xué)選擇性必修一測試卷及答案解析
- 佳能EOS700D使用說明書
- 煤礦應(yīng)急叫應(yīng)、回應(yīng)、響應(yīng)機制
- 圓圈正義讀書分享課件
- DL∕T 1910-2018 配電網(wǎng)分布式饋線自動化技術(shù)規(guī)范
- 護理人力資源配置原則及調(diào)配方案
- 2023級武漢大學(xué)臨床醫(yī)學(xué)畢業(yè)考試試卷
- 高中體育與健康課耐久跑教案
- 三年(2022-2024)高考化學(xué)真題分類匯編(全國)專題12 工藝流程綜合題(學(xué)生卷)
- 人教版數(shù)學(xué)二年級下冊全冊核心素養(yǎng)目標(biāo)教學(xué)設(shè)計
評論
0/150
提交評論