1. 程式人生 > >微信公眾號平臺開發(二)信息的分類.md

微信公眾號平臺開發(二)信息的分類.md

數據 msg 額外 環境 con pic 響應 我們 高質量

在上一篇博客中,我們只是簡單地與微信服務器建立了連接,接下來就是從微信服務器中接收信息了。在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