微信公眾號平臺開發(二)信息的分類.md
在上一篇博客中,我們只是簡單地與微信服務器建立了連接,接下來就是從微信服務器中接收信息了。在SecurityController中,我定義了兩個方法(get和post)。Get方法是我們用來與微信服務器建立連接,而我們將通過Post方法來接收微信服務器發給我們的響應。
當我們完成服務器驗證後,以後用戶對公眾號的每個事件,微信服務器都會通過我們配置的URL推送到我們自己的服務器,然後我們服務器根據自身業務邏輯進行響應!
在正式實現用戶與服務器之間的溝通前,我們需要進行一些知識儲備和對信息的分類。
(一)消息體的類型:
當普通微信用戶向公眾賬號發消息時,微信服務器將POST消息的XML數據包到開發者填寫的URL上。
1. 普通消息類型:文本消息、圖片消息、語音消息、視頻消息、小視頻消息、地理位置消息和鏈接消息等;
2. 事件推送類型:關註/取消關註事件、掃描帶參數二維碼事件、上報地理位置事件、自定義菜單事件、點擊菜單拉取消息時的事件推送、點擊菜單跳轉鏈接時的事件推送等。
(二)額外知識
- 消息重試機制:
微信服務器在五秒內收不到響應會斷掉連接,並且重新發起請求,總共重試三次。假如服務器無法保證在五秒內處理並回復,可以直接回復空串,微信服務器不會對此作任何處理,並且不會發起重試。
- 信息加密/解密機制:
為了保證更高的安全保障,開發者可以在公眾平臺官網的開發者中心處設置消息加密。開啟加密後,用戶發來的消息會被加密,公眾號被動回復用戶的消息也需要加密(但開發者通過客服接口等API調用形式向用戶發送消息,則不受影響)。
關於消息加解密的詳細說明,請見“[消息加解密說明]”。
(三)接收信息的分類和實體的創建
篇幅關系,將省略所有實體類的Get和Set方法。
根據各種信息類型,我們將其分為一個基礎類和六個實體。
1. 接收消息基礎類
public class BaseMessage { //開發者微信號 private String ToUserName; //發送方賬號(OpenID) private String FromUserName; //消息創建時間(整型) private long CreateTime; //消息類型(text/image/location/link/video/shortvideo) private String MsgType; //消息id,64位整型 private long MsgId; }
1. 圖片消息實體
public class ImageMessage extends BaseMessage { //圖片鏈接 private String PicUrl; }
鏈接消息實體
public class LinkMessage extends BaseMessage { //消息標題 private String Title; //消息描述 private String Description; //消息鏈接 private String Url; }
地理位置消息實體
public class LocationMessage extends BaseMessage { //地理位置緯度 private String Location_X; //地理位置經度 private String Location_Y; //地圖縮放大小 private String Scale; //地圖位置信息 private String Label; }
文本消息實體
public class TextMessage extends BaseMessage { //消息內容 private String Content; }
視頻消息實體
public class VideoMessage extends BaseMessage { //視頻消息媒體id,可以調用多媒體文件下載接口拉取數據 private String MediaId; //視頻消息縮略圖的媒體id,可以調用多媒體文件下載接口拉取數據 private String ThumbMediaId; }
語音消息實體
public class VoiceMessage extends BaseMessage { //媒體Id private String MediaId; //語音格式 private String Format; }
(四)反饋信息的分類和實體的創建
篇幅關系,將省略所有實體類的Get和Set方法。
根據各種反饋信息類型,我們將其分為一個基礎類和六個實體(五個信息體)。
1. 反饋信息基礎類
public class BaseMessage { //接收方賬號(OpenID) private String ToUserName; //開發者微信號 private String FromUserName; //消息創建時間(整型) private long CreateTime; //消息類型(text/music/news……) private String MsgType; }
文本信息實體
public class TextMessage extends BaseMessage { //回復消息內容 private String Content; }
圖片信息體 和 圖片信息實體
public class Image { //圖片信息id private String MediaId; }
public class ImageMessage extends BaseMessage { private Image image; }
圖文信息體 和 圖文信息實體
public class Article { //圖文消息名稱 private String Title; //圖文消息描述 private String Description; //圖片鏈接,支持JPG、PNG格式 private String PicUrl; //點擊圖文消息跳轉鏈接 private String Url; }
public class NewsMessage extends BaseMessage { //圖文消息個數,一般限制為10條以內 private int ArticleCount; //多圖文消息信息 private List<Article> Articles; }
語音信息體 和 語音信息實體
public class Voice { private String MediaId; }
public class VoiceMessage extends BaseMessage { private Voice voice; }
音樂信息體 和 音樂信息實體
public class Music { //音樂名稱 private String Title; //音樂描述 private String Description; //音樂鏈接 private String MusicUrl; //高質量音樂鏈接,WIFI環境下優先使用該鏈接 private String HQMusicUrl; }
public class MusicMessage extends BaseMessage { private Music music; }
視頻信息體 和 視頻信息實體
public class Video { //多媒體鏈接 private String MediaId; //視頻標題 private String Title; //視頻描述 private String Description; }
public class VideoMessage extends BaseMessage { private Video video; }
(五)總結
這一篇博客主要為我們服務器與用戶進行交流時,準備好各種實體類型。通過對開發者文檔的閱讀,我們可以很快就完成實體的創建。但在閱讀的過程中,我們也將考慮到許多問題:如何進行實體與XML格式之間的轉化?什麽鬼之類的。
接下來的,我們下一篇博客再講ヾ( ̄▽ ̄)Bye~Bye~
微信公眾號平臺開發(二)信息的分類.md