這篇文章主要為大家展示了“asp.net微信開發(fā)消息應答的技巧有哪些”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“asp.net微信開發(fā)消息應答的技巧有哪些”這篇文章吧。
我們提供的服務有:成都網(wǎng)站制作、成都網(wǎng)站建設、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、荔浦ssl等。為上千多家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術(shù)的荔浦網(wǎng)站制作公司
當普通微信用戶向公眾賬號發(fā)消息時,微信服務器將POST消息的XML數(shù)據(jù)包到開發(fā)者填寫的URL上。
請注意:
1、關(guān)于重試的消息排重,推薦使用msgid排重。
2、微信服務器在五秒內(nèi)收不到響應會斷掉連接,并且重新發(fā)起請求,總共重試三次。假如服務器無法保證在五秒內(nèi)處理并回復,可以直接回復空串,微信服務器不會對此作任何處理,并且不會發(fā)起重試。詳情請見“發(fā)送消息-被動回復消息”。
3、為了保證更高的安全保障,開發(fā)者可以在公眾平臺官網(wǎng)的開發(fā)者中心處設置消息加密。開啟加密后,用戶發(fā)來的消息會被加密,公眾號被動回復用戶的消息也需要加密(但開發(fā)者通過客服接口等API調(diào)用形式向用戶發(fā)送消息,則不受影響)。關(guān)于消息加解密的詳細說明,請見“消息加解密說明”。
各消息類型的推送XML數(shù)據(jù)包結(jié)構(gòu)如下:
文本消息
1348831860 1234567890123456
圖片消息
1348831860 1234567890123456
語音消息
1357290913 1234567890123456
請注意,開通語音識別后,用戶每次發(fā)送語音給公眾號時,微信會在推送的語音消息XML數(shù)據(jù)包中,增加一個Recongnition字段 (注:由于客戶端緩存,開發(fā)者開啟或者關(guān)閉語音識別功能,對新關(guān)注者立刻生效,對已關(guān)注用戶需要24小時生效。開發(fā)者可以重新關(guān)注此帳號進行測試)。開啟語音識別后的語音XML數(shù)據(jù)包如下:
1357290913 1234567890123456
多出的字段中,F(xiàn)ormat為語音格式,一般為amr,Recognition為語音識別結(jié)果,使用UTF8編碼。
視頻消息
1357290913 1234567890123456
小視頻消息
1357290913 1234567890123456
地理位置消息
1351776360 23.134521 113.358803 20 1234567890123456
鏈接消息
1351776360 1234567890123456
接上篇,看ResponseXML(postString);方法如下
////// 獲取用戶發(fā)送的消息 /// /// private void ResponseXML(string postString) { //使用XMLDocument加載信息結(jié)構(gòu) XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(postString); XmlElement rootElement = xmlDoc.DocumentElement;//獲取文檔的根 XmlNode MsgType = rootElement.SelectSingleNode("MsgType"); //獲取消息的文本類型 RequestXML requestXML = new RequestXML();//聲明實例,獲取各個屬性并賦值 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)建的一個類,該類聲明了消息中常用的屬性字段,如下:
////// 接收消息的實體類 /// public class RequestXML { private String toUserName = String.Empty; ////// 本公眾號 /// public String ToUserName{get;set;} ////// 用戶微信號 /// public String FromUserName{get;set;} ////// 創(chuàng)建時間 /// public String CreateTime{get;set;} ////// 信息類型 /// public String MsgType{get;set;} ////// 信息內(nèi)容 /// public String Content{get;set;} /*以下為事件類型的消息特有的屬性*/ ////// 事件名稱 /// public String EventName{get;set;} ////// 事件值 /// public string EventKey { get; set; } /*以下為圖文類型的消息特有的屬性*/ ////// 圖文消息的個數(shù) /// public int ArticleCount { get; set; } ////// 圖文消息的標題 /// public string Title { get; set; } ////// 圖文消息的簡介 /// public string Description { get; set; } ////// 圖文消息圖片的鏈接地址 /// public string PicUrl { get; set; } ////// 圖文消息詳情鏈接地址 /// public string Url { get; set; } ////// 圖文消息集合 /// public ListArticles { get; set;} /*以下為地理位置類型的消息特有的屬性*/ /// /// 地理位置緯度 /// public String Location_X { get; 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ù)關(guān)注 ResponseMsg(requestXML);方法如下
private void ResponseMsg(RequestXML requestXML) { string MsgType = 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)注時返回的圖文消息 } else if (!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 (Exception ex) { HttpContext.Current.Response.Write(ex.ToString()); } }
先來關(guān)注發(fā)送文本消息,SendTextCase(requestXML);//發(fā)送文本消息
////// 發(fā)送文本 /// /// private void SendTextCase(RequestXML requestXML) { string responseContent = 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方法制定格式
////// 返回格式化的Xml格式內(nèi)容 /// /// 公眾號 /// 用戶號 /// 回復內(nèi)容 ///private string FormatTextXML(string p1, string p2, string p3) { return " "; } " + DateTime.Now.Subtract(new DateTime(1970, 1, 1, 8, 0, 0)).TotalSeconds.ToString() + " 1
這樣就能實現(xiàn)消息的應答,如果用戶點擊的按鈕,如下代碼:
case "event"://發(fā)送事件消息 if (!string.IsNullOrWhiteSpace(requestXML.EventName) && requestXML.EventName.ToString().Trim().Equals("subscribe")) { SendWelComeMsg(requestXML);//關(guān)注時返回的圖文消息 } else if (!string.IsNullOrWhiteSpace(requestXML.EventName) && requestXML.EventName.ToString().Trim().Equals("CLICK")) { SendEventMsg(requestXML);//發(fā)送事件消息 } break; ////// 發(fā)送響應事件消息 /// /// private void SendEventMsg(RequestXML requestXML) { string keyStr = requestXML.EventKey.ToString(); switch (keyStr) { case "mypay": SendPayDetails(requestXML);//發(fā)送薪資賬單 break; case "tianqiyubao": SendWeaterMessage(requestXML);//發(fā)送天氣預報 break; case "kaixinyixiao": SendKaiXinMessage(requestXML);//發(fā)送開心一笑結(jié)果集 break; case "updateMessage": SendUpdateMessage(requestXML);//發(fā)送修改信息鏈接 break; case "yuangonghuodong": SendYuanGongHuoDong(requestXML);//發(fā)送學生活動 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: String responseContent = 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)注時返回的圖文消息
////// 發(fā)送關(guān)注時的圖文消息 /// /// private void SendWelComeMsg(RequestXML requestXML) { String responseContent = String.Empty; string newdate = DateTime.Now.Subtract(new DateTime(1970, 1, 1, 8, 0, 0)).TotalSeconds.ToString(); string PUrlfileName = "http://www.deqiaohr.com.cn/weixin/welcome.jpg"; responseContent = string.Format(Message_News_Main, requestXML.FromUserName, requestXML.ToUserName, newdate, "1", string.Format(Message_News_Item, "歡迎關(guān)注德橋員工服務中心", "蘇州德橋人力資源創(chuàng)立于2002年...", PUrlfileName, "http://www.deqiaohr.com.cn/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是圖文消息格式化
////// 返回圖文消息主體 /// public static string Message_News_Main { get { return @""; } } /// {2} {3} {4} /// 返回圖文消息項 /// public static string Message_News_Item { get { return @"- "; } } ///
/// 發(fā)送響應語音識別結(jié)果 /// /// private void SendVoiceMsg(RequestXML requestXML) { string responseContent = FormatTextXML(requestXML.FromUserName, requestXML.ToUserName, "您剛才說的語音消息識別結(jié)果為:" + requestXML.Recognition.ToString()); HttpContext.Current.Response.ContentType = "text/xml"; HttpContext.Current.Response.ContentEncoding = Encoding.UTF8; HttpContext.Current.Response.Write(responseContent); HttpContext.Current.Response.End(); }
以上是“asp.net微信開發(fā)消息應答的技巧有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!