1. 程式人生 > >第三篇 :微信公眾平臺開發實戰Java版之請求訊息,響應訊息以及事件訊息類的封裝

第三篇 :微信公眾平臺開發實戰Java版之請求訊息,響應訊息以及事件訊息類的封裝

微信伺服器和第三方伺服器之間究竟是通過什麼方式進行對話的?

下面,我們先看下圖:

其實我們可以簡單的理解:

(1)首先,使用者向微信伺服器傳送訊息;

(2)微信伺服器接收到使用者的訊息處理之後,通過開發者配置的URL和Token 來找到第三方伺服器,並以XML形式向第三方伺服器傳送訊息。

(3)第三方伺服器獲取這些訊息之後,需要按照微信伺服器傳過來的XML的語言進行解析,獲取到資訊之後,根據使用者的需求,提供服務,然後封裝成XML資料,傳回到微信伺服器上去。

(4)微信伺服器解析這些XML,並把相應的內容還回給使用者。

基本就結束了一個基本的請求與相應。

一、封裝請求資訊


當普通微信使用者向公眾賬號發訊息時,微信伺服器將POST訊息的XML資料包到開發者填寫的URL上。

各訊息型別的推送XML資料包結構如下:

 ----------------------------------------------------------------------------------------------------------------------------------------

文字訊息

 <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> 引數 描述 ToUserName 開發者微訊號 FromUserName 傳送方帳號(一個OpenID) CreateTime 訊息建立時間 (整型) MsgType text Content 文字訊息內容 MsgId 訊息id,64位整型 圖片訊息 <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> 引數 描述 ToUserName 開發者微訊號 FromUserName 傳送方帳號(一個OpenID) CreateTime 訊息建立時間 (整型) MsgType image PicUrl 圖片連結 MediaId 圖片訊息媒體id,可以呼叫多媒體檔案下載介面拉取資料。 MsgId 訊息id,64位整型 語音訊息 <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> 引數 描述 ToUserName 開發者微訊號 FromUserName 傳送方帳號(一個OpenID) CreateTime 訊息建立時間 (整型) MsgType 語音為voice MediaId 語音訊息媒體id,可以呼叫多媒體檔案下載介面拉取資料。 Format 語音格式,如amr,speex等 MsgID 訊息id,64位整型 請注意,開通語音識別後,使用者每次傳送語音給公眾號時,微信會在推送的語音訊息XML資料包中,增加一個Recongnition欄位 (注:由於客戶端快取,開發者開啟或者關閉語音識別功能,對新關注者立刻生效,對已關注使用者需要24小時生效。開發者可以重新關注此帳號進行測試)。開啟 語音識別後的語音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> <Recognition><![CDATA[騰訊微信團隊]]></Recognition> <MsgId>1234567890123456</MsgId> </xml> 多出的欄位中,Format為語音格式,一般為amr,Recognition為語音識別結果,使用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> 引數 描述 ToUserName 開發者微訊號 FromUserName 傳送方帳號(一個OpenID) CreateTime 訊息建立時間 (整型) MsgType 視訊為video MediaId 視訊訊息媒體id,可以呼叫多媒體檔案下載介面拉取資料。 ThumbMediaId 視訊訊息縮圖的媒體id,可以呼叫多媒體檔案下載介面拉取資料。 MsgId 訊息id,64位整型 小視訊訊息 <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> 引數 描述 ToUserName 開發者微訊號 FromUserName 傳送方帳號(一個OpenID) CreateTime 訊息建立時間 (整型) MsgType 小視訊為shortvideo MediaId 視訊訊息媒體id,可以呼叫多媒體檔案下載介面拉取資料。 ThumbMediaId 視訊訊息縮圖的媒體id,可以呼叫多媒體檔案下載介面拉取資料。 MsgId 訊息id,64位整型 地理位置訊息 <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> 引數 描述 ToUserName 開發者微訊號 FromUserName 傳送方帳號(一個OpenID) CreateTime 訊息建立時間 (整型) MsgType location Location_X 地理位置維度 Location_Y 地理位置經度 Scale 地圖縮放大小 Label 地理位置資訊 MsgId 訊息id,64位整型 連結訊息 <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1351776360</CreateTime> <MsgType><![CDATA[link]]></MsgType> <Title><![CDATA[公眾平臺官網連結]]></Title> <Description><![CDATA[公眾平臺官網連結]]></Description> <Url><![CDATA[url]]></Url> <MsgId>1234567890123456</MsgId> </xml> 引數 描述 ToUserName 接收方微訊號 FromUserName 傳送方微訊號,若為普通使用者,則是一個OpenID CreateTime 訊息建立時間 MsgType 訊息型別,link Title 訊息標題 Description 訊息描述 Url 訊息連結 MsgId 訊息id,64位整型
View Code

----------------------------------------------------------------------------------------------------------------------------------------

詳細的介紹可以參照  官網介紹

其中使用者可以向微信伺服器傳送的訊息型別大概可以分為:文字訊息圖片訊息語音訊息視訊訊息小視訊訊息地理位置訊息連結訊息

根據觀察可以知道這些訊息中,都會傳回來這些公共的欄位如:

ToUserName(開發者微訊號);

FromUserName(傳送方帳 號,OPEN_ID);

CreateTime(訊息的建立時間);

MsgType(訊息型別);

MsgId(訊息ID)。

我們把這些封裝成一個基類,然後 不同的部分,分別封裝為各自的類,這樣提高程式碼的重用性。

這個請求訊息的基類BaseMessage ,主要是封裝了一些共同的欄位。

package com.souvc.weixin.message.req;

/**
* 類名: BaseMessage </br>
* 描述: 請求訊息的基類 </br>
* 開發人員: souvc</br>
* 建立時間:  Sep 29, 2015 </br>
* 釋出版本:V1.0  </br>
 */
public class BaseMessage {

    // 開發者微訊號
    private String ToUserName;
    // 傳送方帳號(一個OpenID)
    private String FromUserName;
    // 訊息建立時間 (整型)
    private long CreateTime;
    // 訊息型別(text/image/location/link)
    private String MsgType;
    // 訊息id,64位整型
    private long MsgId;

    
    public String getToUserName() {
        return ToUserName;
    }

    public void setToUserName(String toUserName) {
        ToUserName = toUserName;
    }

    public String getFromUserName() {
        return FromUserName;
    }

    public void setFromUserName(String fromUserName) {
        FromUserName = fromUserName;
    }

    public long getCreateTime() {
        return CreateTime;
    }

    public void setCreateTime(long createTime) {
        CreateTime = createTime;
    }

    public String getMsgType() {
        return MsgType;
    }

    public void setMsgType(String msgType) {
        MsgType = msgType;
    }

    public long getMsgId() {
        return MsgId;
    }

    public void setMsgId(long msgId) {
        MsgId = msgId;
    }
}
View Code

(1)文字訊息類Content ,主要是文字訊息內容。

package com.souvc.weixin.message.req;

/**
* 類名: TextMessage </br>
* 描述: 請求訊息之文字訊息 </br>
* 開發人員: souvc </br>
* 建立時間:  Sep 29, 2015 </br>
* 釋出版本:V1.0  </br>
 */

public class TextMessage extends BaseMessage {

    // 訊息內容
    private String Content;

    public String getContent() {
        return Content;
    }

    public void setContent(String content) {
        Content = content;
    }
}
View Code

(2)圖片訊息:

PicUrl 圖片連結
MediaId 圖片訊息媒體id,可以呼叫多媒體檔案下載介面拉取資料。
package com.souvc.weixin.message.req;

/**
* 類名: ImageMessage </br>
* 描述: 請求訊息之圖片訊息 </br>
* 開發人員: souvc </br>
* 建立時間:  Sep 29, 2015 </br>
* 釋出版本:V1.0  </br>
 */
public class ImageMessage extends BaseMessage {
    // 圖片連結
    private String PicUrl;
    private String MediaId;

    public String getPicUrl() {
        return PicUrl;
    }

    public void setPicUrl(String picUrl) {
        PicUrl = picUrl;
    }

    public String getMediaId() {
        return MediaId;
    }

    public void setMediaId(String mediaId) {
        MediaId = mediaId;
    }

}
View Code

(3) 語音訊息:

MediaId 語音訊息媒體id,可以呼叫多媒體檔案下載介面拉取資料。
Format 語音格式,如amr,speex等
package com.souvc.weixin.message.req;

/**
* 類名: VoiceMessage </br>
* 描述: 請求訊息之語音訊息 </br>
* 開發人員: souvc </br>
* 建立時間:  Sep 29, 2015 </br>
* 釋出版本:V1.0  </br>
 */
public class VoiceMessage extends BaseMessage {

    // 媒體ID
    private String MediaId;
    // 語音格式
    private String Format;

    public String getMediaId() {
        return MediaId;
    }

    public void setMediaId(String mediaId) {
        MediaId = mediaId;
    }

    public String getFormat() {
        return Format;
    }

    public void setFormat(String format) {
        Format = format;
    }
}
View Code

(4)視訊訊息:

MediaId 視訊訊息媒體id,可以呼叫多媒體檔案下載介面拉取資料。
ThumbMediaId 視訊訊息縮圖的媒體id,可以呼叫多媒體檔案下載介面拉取資料。
package com.souvc.weixin.message.req;
/**
* 類名: VideoMessage </br>
* 描述: 請求訊息之視訊訊息 </br>
* 開發人員: souvc </br>
* 建立時間:  Sep 29, 2015 </br>
* 釋出版本:V1.0  </br>
 */
public class VideoMessage  extends BaseMessage{

    // 媒體ID
    private String MediaId;
    // 語音格式
    private String ThumbMediaId;

    public String getMediaId() {
        return MediaId;
    }
    public void setMediaId(String mediaId) {
        MediaId = mediaId;
    }
    public String getThumbMediaId() {
        return ThumbMediaId;
    }
    public void setThumbMediaId(String thumbMediaId) {
        ThumbMediaId = thumbMediaId;
    }
    
    
    
}
View Code

(5)小視訊訊息:

MediaId 視訊訊息媒體id,可以呼叫多媒體檔案下載介面拉取資料。
ThumbMediaId 視訊訊息縮圖的媒體id,可以呼叫多媒體檔案下載介面拉取資料。

(6) 地理位置訊息:

Location_X 地理位置維度
Location_Y 地理位置經度
Scale 地圖縮放大小
Label 地理位置資訊
package com.souvc.weixin.message.req;

/**
* 類名: LocationMessage </br>
* 描述: 請求訊息之地理位置訊息 </br>
* 開發人員:souvc</br>
* 建立時間:  Sep 29, 2015 </br>
* 釋出版本:V1.0  </br>
 */
public class LocationMessage extends BaseMessage {
    
    // 地理位置維度
    private String Location_X;
    // 地理位置經度
    private String Location_Y;
    // 地圖縮放大小
    private String Scale;
    // 地理位置資訊
    private String Label;

    
    public String getLocation_X() {
        return Location_X;
    }

    public void setLocation_X(String location_X) {
        Location_X = location_X;
    }

    public String getLocation_Y() {
        return Location_Y;
    }

    public void setLocation_Y(String location_Y) {
        Location_Y = location_Y;
    }

    public String getScale() {
        return Scale;
    }

    public void setScale(String scale) {
        Scale = scale;
    }

    public String getLabel() {
        return Label;
    }

    public void setLabel(String label) {
        Label = label;
    }
}
View Code

(7) 連結訊息:

Title 訊息標題
Description 訊息描述
Url 訊息連結
package com.souvc.weixin.message.req;

/**
* 類名: LinkMessage </br>
* 描述: 請求訊息之連結訊息 </br>
* 開發人員: souvc </br>
* 建立時間:  Sep 29, 2015 </br>
* 釋出版本:V1.0  </br>
 */
public class LinkMessage extends BaseMessage {

    // 訊息標題
    private String Title;
    // 訊息描述
    private String Description;
    // 訊息連結
    private String Url;

    public String getTitle() {
        return Title;
    }

    public void setTitle(String title) {
        Title = title;
    }

    public String getDescription() {
        return Description;
    }

    public void setDescription(String description) {
        Description = description;
    }

    public String getUrl() {
        return Url;
    }

    public void setUrl(String url) {
        Url = url;
    }
}
View Code

二、封裝事件

在微信使用者和公眾號產生互動的過程中,使用者的某些操作會使得微信伺服器通過事件推送的形式通知到開發者在開發者中心處設定的伺服器地址,從而開發者可以獲取到該資訊。

事件的資料格式為:

關注/取消關注事件

使用者在關注與取消關注公眾號時,微信會把這個事件推送到開發者填寫的URL。方便開發者給使用者下發歡迎訊息或者做帳號的解綁。 

微信伺服器在五秒內收不到響應會斷掉連線,並且重新發起請求,總共重試三次 

關於重試的訊息排重,推薦使用FromUserName + CreateTime 排重。 

假如伺服器無法保證在五秒內處理並回復,可以直接回復空串,微信伺服器不會對此作任何處理,並且不會發起重試。 

推送XML資料包示例: 
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[FromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[subscribe]]></Event>
</xml>


引數說明: 


引數 

描述 

ToUserName  開發者微訊號  
FromUserName  傳送方帳號(一個OpenID)  
CreateTime  訊息建立時間 (整型)  
MsgType  訊息型別,event  
Event  事件型別,subscribe(訂閱)、unsubscribe(取消訂閱)  

使用網頁除錯工具除錯該介面 

掃描帶引數二維碼事件

使用者掃描帶場景值二維碼時,可能推送以下兩種事件: 
1. 如果使用者還未關注公眾號,則使用者可以關注公眾號,關注後微信會將帶場景值關注事件推送給開發者。 
2. 如果使用者已經關注公眾號,則微信會將帶場景值掃描事件推送給開發者。 

1. 使用者未關注時,進行關注後的事件推送 

推送XML資料包示例: 
<xml><ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[FromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[subscribe]]></Event>
<EventKey><![CDATA[qrscene_123123]]></EventKey>
<Ticket><![CDATA[TICKET]]></Ticket>
</xml>


引數說明: 


引數 

描述 

ToUserName  開發者微訊號  
FromUserName  傳送方帳號(一個OpenID)  
CreateTime  訊息建立時間 (整型)  
MsgType  訊息型別,event  
Event  事件型別,subscribe  
EventKey  事件KEY值,qrscene_為字首,後面為二維碼的引數值  
Ticket  二維碼的ticket,可用來換取二維碼圖片  

2. 使用者已關注時的事件推送 

推送XML資料包示例: 
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[FromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[SCAN]]></Event>
<EventKey><![CDATA[SCENE_VALUE]]></EventKey>
<Ticket><![CDATA[TICKET]]></Ticket>
</xml>


引數說明: 


引數 

描述 

ToUserName  開發者微訊號  
FromUserName  傳送方帳號(一個OpenID)  
CreateTime  訊息建立時間 (整型)  
MsgType  訊息型別,event  
Event  事件型別,SCAN  
EventKey  事件KEY值,是一個32位無符號整數,即建立二維碼時的二維碼scene_id  
Ticket  二維碼的ticket,可用來換取二維碼圖片  

使用網頁除錯工具除錯該介面 

上報地理位置事件

使用者同意上報地理位置後,每次進入公眾號會話時,都會在進入時上報地理位置,或在進入會話後每5秒上報一次地理位置,公眾號可以在公眾平臺網站中修改以上設定。上報地理位置時,微信會將上報地理位置事件推送到開發者填寫的URL。 

推送XML資料包示例: 
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[LOCATION]]></Event>
<Latitude>23.137466</Latitude>
<Longitude>113.352425</Longitude>
<Precision>119.385040</Precision>
</xml>


引數說明: 


引數 

描述 

ToUserName  開發者微訊號  
FromUserName  傳送方帳號(一個OpenID)  
CreateTime  訊息建立時間 (整型)  
MsgType  訊息型別,event  
Event  事件型別,LOCATION  
Latitude  地理位置緯度  
Longitude  地理位置經度  
Precision  地理位置精度  

使用網頁除錯工具除錯該介面 

自定義選單事件

使用者點選自定義選單後,微信會把點選事件推送給開發者,請注意,點選選單彈出子選單,不會產生上報。 

 點選選單拉取訊息時的事件推送 

推送XML資料包示例: 
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[FromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[CLICK]]></Event>
<EventKey><![CDATA[EVENTKEY]]></EventKey>
</xml>


引數說明: 


引數 

描述 

ToUserName  開發者微訊號  
FromUserName  傳送方帳號(一個OpenID)  
CreateTime  訊息建立時間 (整型)  
MsgType  訊息型別,event  
Event  事件型別,CLICK  
EventKey  事件KEY值,與自定義選單介面中KEY值對應  




 點選選單跳轉連結時的事件推送 

推送XML資料包示例: 
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[FromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[VIEW]]></Event>
<EventKey><![CDATA[www.qq.com]]></EventKey>
</xml>


引數說明: 


引數 

描述 

ToUserName  開發者微訊號  
FromUserName  傳送方帳號(一個OpenID)  
CreateTime  訊息建立時間 (整型)  
MsgType  訊息型別,event  
Event  事件型別,VIEW  
EventKey  事件KEY值,設定的跳轉URL  
View Code

詳細可以參照   官網

 事件基類封裝

package com.souvc.weixin.message.event;

/**
* 類名: BaseEvent </br>
* 描述: 事件基類</br>
* 開發人員: souvc</br>
* 建立時間:  2015-9-30 </br>
* 釋出版本:V1.0  </br>
 */
public class BaseEvent {
    // 開發者微訊號
    private String ToUserName;
    // 傳送方帳號(一個OpenID)
    private String FromUserName;
    // 訊息建立時間 (整型)
    private long CreateTime;
    // 訊息型別
    private String MsgType;
    // 事件型別
    private String Event;

    public String getToUserName() {
        return ToUserName;
    }

    public void setToUserName(String toUserName) {
        ToUserName = toUserName;
    }

    public String getFromUserName() {
        return FromUserName;
    }

    public void setFromUserName(String fromUserName) {
        FromUserName = fromUserName;
    }

    public long getCreateTime() {
        return CreateTime;
    }

    public void setCreateTime(long createTime) {
        CreateTime = createTime;
    }

    public String getMsgType() {
        return MsgType;
    }

    public void setMsgType(String msgType) {
        MsgType = msgType;
    }

    public String getEvent() {
        return Event;
    }

    public void setEvent(String event) {
        Event = event;
    }
}
View Code

 (1)關注/取消關注事件

package com.souvc.weixin.message.event;

/**
* 類名: SubscribeEvent </br>
* 描述: 關注/取消關注事件 </br>
* 開發人員: souvc </br>
* 建立時間:  2015-9-30 </br>
* 釋出版本:V1.0  </br>
 */
public class SubscribeEvent extends BaseEvent {

}
View Code

(2)掃描帶引數二維碼事件

package com.souvc.weixin.message.event;

/**
* 類名: QRCodeEvent </br>
* 描述: 掃描帶引數二維碼事件 </br>
* 開發人員: souvc </br>
* 建立時間:  2015-9-30 </br>
* 釋出版本:V1.0  </br>
 */
public class QRCodeEvent extends BaseEvent {
    // 事件KEY值
    private String EventKey;
    // 用於換取二維碼圖片
    private String Ticket;

    public String getEventKey() {
        return EventKey;
    }

    public void setEventKey(String eventKey) {
        EventKey = eventKey;
    }

    public String getTicket() {
        return Ticket;
    }

    public void setTicket(String ticket) {
        Ticket = ticket;
    }
}
View Code

(3)上報地理位置事件

package com.souvc.weixin.message.event;

/**
* 類名: LocationEvent </br>
* 描述: 上報地理位置事件 </br>
* 開發人員: liuhf </br>
* 建立時間:  2015-9-30 </br>
* 釋出版本:V1.0  </br>
 */
public class LocationEvent extends BaseEvent {
    // 地理位置緯度
    private String Latitude;
    // 地理位置經度
    private String Longitude;
    // 地理位置精度
    private String Precision;

    public String getLatitude() {
        return Latitude;
    }

    public void setLatitude(String latitude) {
        Latitude = latitude;
    }

    public String getLongitude() {
        return Longitude;
    }

    public void setLongitude(String longitude) {
        Longitude = longitude;
    }

    public String getPrecision() {
        return Precision;
    }

    public void setPrecision(String precision) {
        Precision = precision;
    }
}
View Code

(4)自定義選單事件

package com.souvc.weixin.message.event;

/**
* 類名: MenuEvent </br>
* 描述: 自定義選單事件 </br>
* 開發人員: liuhf </br>
* 建立時間:  2015-9-30 </br>
* 釋出版本:V1.0  </br>
 */
public class MenuEvent extends BaseEvent {
    // 事件KEY值,與自定義選單介面中KEY值對應
    private String EventKey;

    public String getEventKey() {
        return EventKey;
    }

    public void setEventKey(String eventKey) {
        EventKey = eventKey;
    }
}
View Code

三、封裝響應訊息

     當用戶傳送訊息給公眾號時(或某些特定的使用者操作引發的事件推送時),會產生一個POST請求,開發者可以在響應包(Get)中返回特定XML結構,來對 該訊息進行響應(現支援回覆文字、圖片、圖文、語音、視訊、音樂)。嚴格來說,傳送被動響應訊息其實並不是一種介面,而是對微信伺服器發過來訊息的一次回 復。

    各訊息型別需要的XML資料包結構如下:

 回覆文字訊息

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[你好]]></Content>
</xml>

引數     是否必須     描述
ToUserName     是     接收方帳號(收到的OpenID)
FromUserName     是     開發者微訊號
CreateTime     是     訊息建立時間 (整型)
MsgType     是     text
Content     是     回覆的訊息內容(換行:在content中能夠換行,微信客戶端就支援換行顯示)
回覆圖片訊息

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
<Image>
<MediaId><![CDATA[media_id]]></MediaId>
</Image>
</xml>

引數     是否必須     說明
ToUserName     是     接收方帳號(收到的OpenID)
FromUserName     是     開發者微訊號
CreateTime     是     訊息建立時間 (整型)
MsgType     是     image
MediaId     是     通過素材管理介面上傳多媒體檔案,得到的id。


回覆語音訊息

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[voice]]></MsgType>
<Voice>
<MediaId><![CDATA[media_id]]></MediaId>
</Voice>
</xml>

引數     是否必須     說明
ToUserName     是     接收方帳號(收到的OpenID)
FromUserName     是     開發者微訊號
CreateTime     是     訊息建立時間戳 (整型)
MsgType     是     語音,voice
MediaId     是     通過素材管理介面上傳多媒體檔案,得到的id


回覆視訊訊息

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[video]]></MsgType>
<Video>
<MediaId><![CDATA[media_id]]></MediaId>
<Title><![CDATA[title]]></Title>
<Description><![CDATA[description]]></Description>
</Video> 
</xml>

引數     是否必須     說明
ToUserName     是     接收方帳號(收到的OpenID)
FromUserName     是     開發者微訊號
CreateTime     是     訊息建立時間 (整型)
MsgType     是     video
MediaId     是     通過素材管理介面上傳多媒體檔案,得到的id
Title     否     視訊訊息的標題
Description     否     視訊訊息的描述
回覆音樂訊息

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[music]]></MsgType>
<Music>
<Title><![CDATA[TITLE]]></Title>
<Description><![CDATA[DESCRIPTION]]></Description>
<MusicUrl><![CDATA[MUSIC_Url]]></MusicUrl>
<HQMusicUrl><![CDATA[HQ_MUSIC_Url]]></HQMusicUrl>
<ThumbMediaId><![CDATA[media_id]]></ThumbMediaId>
</Music>
</xml>

引數     是否必須     說明
ToUserName     是     接收方帳號(收到的OpenID)
FromUserName     是     開發者微訊號
CreateTime     是     訊息建立時間 (整型)
MsgType     是     music
Title     否     音樂標題
Description     否     音樂描述
MusicURL     否     音樂連結