通過前面章節的學習,我們已經對微信的開發有了基本的掌握與熟悉,基本可以上手做複雜的應用了。本篇我們将詳細講解微信消息管理中普通消息的接收與處理。當普通微信使用者向公衆賬号發消息時,微信伺服器将POST消息的XML資料包到開發者填寫的URL上。接收普通消息微信官方文檔參考:[接收普通消息文檔API](https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140453)
消息接收後,就有一個處理或回複的過程,單單發送消息了沒有響應也是不人性化的,下面我們就對接收到微信各類型消息分别講解處理的方法。
通過前面章節的學習,我們已經對微信的開發有了基本的掌握與熟悉,基本可以上手做複雜的應用了。本篇我們将詳細講解微信消息管理中普通消息的接收與處理。當普通微信使用者向公衆賬号發消息時,微信伺服器将POST消息的XML資料包到開發者填寫的URL上。接收普通消息微信官方文檔參考:接收普通消息文檔API
當普通微信使用者向公衆賬号發消息時,微信伺服器會先接收到使用者發送的消息,然後将使用者消息按照指定的XML格式組裝好資料,最後POST消息的XML資料包到開發者填寫的URL上。
接收到的普通消息的消息類型目前有以下幾種:
文本消息
圖檔消息
語音消息
視訊消息
小視訊消息
地理位置消息
連結消息
每一種消息類型都有其指定的XML資料格式,這7種消息的xml格式請到官方文檔檢視,有具體的格式定義和屬性說明。格式很簡單,基本共有屬性包括ToUserName、FromUserName、CreateTime、MsgType、MsgId,并且每種類型有自己特殊的屬性。
接收消息的過程其實就是擷取post請求的這個xml,然後對這個xml進行分析的過程。post請求的入口還是之前提到的微信公衆号接入的那個位址,整個公衆号的所有請求都會走這個入口,隻是接入時是get請求,其它情況下是post請求。
微信伺服器在将使用者的消息發給公衆号的開發者伺服器位址後,會等待開發者伺服器回複響應消息。微信伺服器在五秒内收不到響應會斷掉連接配接,并且重新發起請求,總共重試三次。
假如伺服器無法保證在五秒内處理并回複,必須做出下述回複,這樣微信伺服器才不會對此作任何處理,并且不會發起重試(這種情況下,可以使用客服消息接口進行異步回複),否則,将出現嚴重的錯誤提示。詳見下面說明:
1、(推薦方式)直接回複success
2、直接回複空串(指位元組長度為0的空字元串,而不是XML結構體中content字段的内容為空)
一旦遇到以下情況,微信都會在公衆号會話中,向使用者下發系統提示“該公衆号暫時無法提供服務,請稍後再試”:
1、開發者在5秒内未回複任何内容
2、開發者回複了異常資料,比如JSON資料等
另外,請注意,回複圖檔等多媒體消息時需要預先通過素材管理接口上傳臨時素材到微信伺服器,可以使用素材管理中的臨時素材,也可以使用永久素材。
消息回複目前支援回複文本、圖檔、圖文、語音、視訊、音樂,每一種類型的消息都有特定的XML資料格式。這幾種回複消息的xml資料格式請參考官方文檔,有具體的格式定義和屬性說明。格式很簡單,基本共有屬性包括ToUserName、FromUserName、CreateTime、MsgType,并且每種類型有自己特殊的屬性。
使用Senparc.Weixin架構來快速處理各種接收的普通消息,實作非常簡單,自定義一個繼承MessageHandler的類,重寫這7種類型的方法即可。注意:DefaultResponseMessage必須重寫,用于傳回沒有處理過的消息類型(也可以用于預設消息,如幫助資訊等);其中所有原OnXX的抽象方法已經都改為虛方法,可以不必每個都重寫。若不重寫,預設傳回DefaultResponseMessage方法中的結果。
CustomMessageHandle.cs需要繼承Senparc.Weixin.MP.MessageHandlers這個抽象類,并實作部分方法。最初步的CustomMessageHandle.cs代碼
可能如下:
我們可以看到必須要重寫實作的抽象方法名為DefaultResponseMessage(),這一條資訊用于傳回一條的消息,假如對應類型(如語音)的微信消息沒有被代碼處理,那麼預設會傳回這裡的結果。在DefaultResponseMessage()方法中,我們看到這樣一句:
這裡的CreateResponseMessage方法即建立一個傳回對象,T可以為以下類型的任意一個,分别對應了不同的傳回類型:
ResponseMessageText - 對應文本消息
ResponseMessageNews - 對應圖文消息
ResponseMessageMusic - 對應音樂消息
ResponseMessageXXX - 其他類型以此類推
各種類型的消息我們可以根據我們自己的業務要求進行重寫回複,如果沒重寫就會傳回預設的消息(重寫預設響應的基礎上)。
文本消息對應的資料包XML格式如下:
參數說明:
處理文本消息參考代碼:
圖檔消息對應的資料包XML格式如下:
處理圖檔消息參考代碼:
在上面代碼中我們傳回了使用者發送的圖檔消息,同時加上了連結位址,使用者單擊消息會自動跳轉到指定的URL位址。
語音消息對應的資料包XML格式如下:
處理語音消息參考代碼:
視訊消息對應的資料包XML格式如下:
處理視訊消息參考代碼:
視訊與小視訊主要差別是在MsgType上,其他的都一樣。
小視訊消息對應的資料包XML格式如下:
處理小視訊消息參考代碼:
地理位置消息對應的資料包XML格式如下:
處理地理位置消息參考代碼:
對于回複的消息,我們還可以單擊彈出百度地圖傳回的位置詳情,具體應用可據此擴充。
連結消息對應的資料包XML格式如下:
連結位置消息參考代碼:
微信公衆平台技術文檔-官方
Senparc.Weixin SDK + 官網示例源代碼
RDIFramework.NET — 基于.NET的快速資訊化系統開發架構 — 系列目錄
RDIFramework.NET ━ .NET快速資訊化系統開發架構 ━ 工作流程元件介紹
RDIFramework.NET架構SOA解決方案(集Windows服務、WinForm形式與IIS形式釋出)-分布式應用
RDIFramework.NET代碼生成器全新V3.5版本釋出-重大更新
一路走來數個年頭,感謝RDIFramework.NET架構的支援者與使用者,大家可以通過下面的位址了解詳情。
RDIFramework.NET官方網站:http://www.rdiframework.net/
RDIFramework.NET官方部落格:http://blog.rdiframework.net/
同時需要說明的,以後的所有技術文章以官方網站為準,歡迎大家收藏!
RDIFramework.NET架構由專業團隊長期打造、一直在更新、一直在更新,請放心使用!
歡迎關注RDIFramework.net架構官方公衆微信(微信号:guosisoft),及時了解最新動态。
掃描二維碼立即關注
作者:
RDIFramework.NET
出處:http://www.cnblogs.com/huyong/
Email:[email protected]
QQ:406590790
微信:13005007127(同手機号)
架構官網:http://www.rdiframework.net/
架構官網部落格:http://blog.rdiframework.net/
架構其他部落格:http://blog.csdn.net/chinahuyong
http://www.cnblogs.com/huyong
RDIFramework.NET,基于全新.NET Framework與.NET Core的快速資訊化系統開發、整合架構,為企業快速建構垮平台、企業級的應用提供了強大支援。
關于作者:系統架構師、資訊系統項目管理師、DBA。專注于微軟平台項目架構、管理和企業解決方案,多年項目開發與管理經驗,曾多次組織并開發多個大型項目,在面向對象、面向服務以及資料庫領域有一定的造詣。現主要從事基于
架構的技術開發、咨詢工作,主要服務于金融、醫療衛生、鐵路、電信、物流、物聯網、制造、零售等行業。
如有問題或建議,請多多賜教!
本文版權歸作者和CNBLOGS部落格共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,如有問題,可以通過微信、郵箱、QQ等聯系我,非常感謝。