微信服務器和第三方服務器之間究竟是通過什么方式進行對話的?
下面,我們先看下圖:
其實我們可以簡單的理解:
(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位整型
----------------------------------------------------------------------------------------------------------------------------------------
詳細的介紹可以參照 官網介紹
其中用戶可以向微信服務器發送的消息類型大概可以分為:文本消息,圖片消息,語音消息,視頻消息,小視頻消息,地理位置消息,鏈接消息。
根據觀察可以知道這些消息中,都會傳回來這些公共的字段如:
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; } }
(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; } }
(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; } }
(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; } }
(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; } }
(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; } }
(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; } }
二、封裝事件
在微信用戶和公眾號產生交互的過程中,用戶的某些操作會使得微信服務器通過事件推送的形式通知到開發者在開發者中心處設置的服務器地址,從而開發者可以獲取到該信息。
事件的數據格式為:

關注/取消關注事件 用戶在關注與取消關注公眾號時,微信會把這個事件推送到開發者填寫的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
詳細可以參照 官網
事件基類封裝

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; } }
(1)關注/取消關注事件

package com.souvc.weixin.message.event; /** * 類名: SubscribeEvent </br> * 描述: 關注/取消關注事件 </br> * 開發人員: souvc </br> * 創建時間: 2015-9-30 </br> * 發布版本:V1.0 </br> */ public class SubscribeEvent extends BaseEvent { }
(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; } }
(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; } }
(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; } }
三、封裝響應消息
當用戶發送消息給公眾號時(或某些特定的用戶操作引發的事件推送時),會產生一個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 否 音樂鏈接 HQMusicUrl 否 高質量音樂鏈接,WIFI環境優先使用該鏈接播放音樂 ThumbMediaId 否 縮略圖的媒體id,通過素材管理接口上傳多媒體文件,得到的id 回復圖文消息 <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType><![CDATA[news]]></MsgType> <ArticleCount>2</ArticleCount> <Articles> <item> <Title><![CDATA[title1]]></Title> <Description><![CDATA[description1]]></Description> <PicUrl><![CDATA[picurl]]></PicUrl> <Url><![CDATA[url]]></Url> </item> <item> <Title><![CDATA[title]]></Title> <Description><![CDATA[description]]></Description> <PicUrl><![CDATA[picurl]]></PicUrl> <Url><![CDATA[url]]></Url> </item> </Articles> </xml> 參數 是否必須 說明 ToUserName 是 接收方帳號(收到的OpenID) FromUserName 是 開發者微信號 CreateTime 是 消息創建時間 (整型) MsgType 是 news ArticleCount 是 圖文消息個數,限制為10條以內 Articles 是 多條圖文消息信息,默認第一個item為大圖,注意,如果圖文數超過10,則將會無響應 Title 否 圖文消息標題 Description 否 圖文消息描述 PicUrl 否 圖片鏈接,支持JPG、PNG格式,較好的效果為大圖360*200,小圖200*200 Url 否 點擊圖文消息跳轉鏈接
詳細可以查看 官網
同樣,把消息回復中定義的所有消息都有的字段提取出來,封裝成一個基類,
這些公有的字段包括:
ToUserName(接收方帳號,用戶的OPEN_ID);
FromUserName(開發者的微信號);
CreateTime(消 息的創建時間);
MsgType(消息類型);
FuncFlag(消息的星標標識)。
響應消息的基類BaseMessage:

package com.souvc.weixin.message.resp; /** * 類名: BaseMessage </br> * 描述: 消息基類(公眾帳號 -> 普通用戶) </br> * 開發人員: souvc </br> * 創建時間: 2015-9-30 </br> * 發布版本:V1.0 </br> */ public class BaseMessage { // 接收方帳號(收到的OpenID) private String ToUserName; // 開發者微信號 private String FromUserName; // 消息創建時間 (整型) private long CreateTime; // 消息類型 private String MsgType; 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; } }
(1)回復文本消息

package com.souvc.weixin.message.resp; /** * 類名: TextMessage </br> * 描述: 文本消息 </br> * 開發人員: souvc </br> * 創建時間: 2015-9-30 </br> * 發布版本:V1.0 </br> */ public class TextMessage extends BaseMessage { // 回復的消息內容 private String Content; public String getContent() { return Content; } public void setContent(String content) { Content = content; } }
(2)回復圖片消息

package com.souvc.weixin.message.resp; /** * 類名: Image </br> * 描述: 圖片 </br> * 開發人員:souvc </br> * 創建時間: 2015-9-30 </br> * 發布版本:V1.0 </br> */ public class Image { private String MediaId; public String getMediaId() { return MediaId; } public void setMediaId(String mediaId) { MediaId = mediaId; } }

package com.souvc.weixin.message.resp; /** * 類名: ImageMessage </br> * 描述: 圖片消息</br> * 開發人員: souvc </br> * 創建時間: 2015-9-30 </br> * 發布版本:V1.0 </br> */ public class ImageMessage extends BaseMessage { private Image Image; public Image getImage() { return Image; } public void setImage(Image image) { Image = image; } }
(3)回復語音消息

package com.souvc.weixin.message.resp; /** * 類名: Voice </br> * 描述: 語音model </br> * 開發人員: souvc </br> * 創建時間: 2015-9-30 </br> * 發布版本:V1.0 </br> */ public class Voice { // 媒體文件id private String MediaId; public String getMediaId() { return MediaId; } public void setMediaId(String mediaId) { MediaId = mediaId; } }

package com.souvc.weixin.message.resp; /** * 類名: VoiceMessage </br> * 描述: 語音消息</br> * 開發人員: souvc </br> * 創建時間: 2015-9-30 </br> * 發布版本:V1.0 </br> */ public class VoiceMessage extends BaseMessage { // 語音 private Voice Voice; public Voice getVoice() { return Voice; } public void setVoice(Voice voice) { Voice = voice; } }
(4)回復視頻消息

package com.souvc.weixin.message.resp; /** * 類名: Video </br> * 描述: 視頻model </br> * 開發人員: souvc </br> * 創建時間: 2015-9-30 </br> * 發布版本:V1.0 </br> */ public class Video { // 媒體文件id private String MediaId; // 縮略圖的媒體id 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; } }

package com.souvc.weixin.message.resp; /** * 類名: VideoMessage </br> * 描述: 視頻消息 </br> * 開發人員: souvc </br> * 創建時間: 2015-9-30 </br> * 發布版本:V1.0 </br> */ public class VideoMessage extends BaseMessage { // 視頻 private Video Video; public Video getVideo() { return Video; } public void setVideo(Video video) { Video = video; } }
(5)回復音樂消息

package com.souvc.weixin.message.resp; /** * 類名: Music </br> * 描述: 音樂model </br> * 開發人員: souvc </br> * 創建時間: 2015-9-30 </br> * 發布版本:V1.0 </br> */ public class Music { // 音樂標題 private String Title; // 音樂描述 private String Description; // 音樂鏈接 private String MusicUrl; // 高質量音樂鏈接,WIFI環境優先使用該鏈接播放音樂 private String HQMusicUrl; // 縮略圖的媒體id,通過上傳多媒體文件得到的id private String ThumbMediaId; 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 getMusicUrl() { return MusicUrl; } public void setMusicUrl(String musicUrl) { MusicUrl = musicUrl; } public String getHQMusicUrl() { return HQMusicUrl; } public void setHQMusicUrl(String musicUrl) { HQMusicUrl = musicUrl; } public String getThumbMediaId() { return ThumbMediaId; } public void setThumbMediaId(String thumbMediaId) { ThumbMediaId = thumbMediaId; } }

package com.souvc.weixin.message.resp; /** * 類名: MusicMessage </br> * 描述: 音樂消息 </br> * 開發人員: souvc </br> * 創建時間: 2015-9-30 </br> * 發布版本:V1.0 </br> */ public class MusicMessage extends BaseMessage { // 音樂 private Music Music; public Music getMusic() { return Music; } public void setMusic(Music music) { Music = music; } }
(6) 回復圖文消息

package com.souvc.weixin.message.resp; /** * 類名: Article </br> * 描述: 圖文model </br> * 開發人員: souvc </br> * 創建時間: 2015-9-30 </br> * 發布版本:V1.0 </br> */ public class Article { // 圖文消息名稱 private String Title; // 圖文消息描述 private String Description; // 圖片鏈接,支持JPG、PNG格式,較好的效果為大圖640*320,小圖80*80 private String PicUrl; // 點擊圖文消息跳轉鏈接 private String Url; public String getTitle() { return Title; } public void setTitle(String title) { Title = title; } public String getDescription() { return null == Description ? "" : Description; } public void setDescription(String description) { Description = description; } public String getPicUrl() { return null == PicUrl ? "" : PicUrl; } public void setPicUrl(String picUrl) { PicUrl = picUrl; } public String getUrl() { return null == Url ? "" : Url; } public void setUrl(String url) { Url = url; } }

package com.souvc.weixin.message.resp; import java.util.List; /** * 類名: NewsMessage </br> * 描述: 文本消息 </br> * 開發人員: souvc </br> * 創建時間: 2015-9-30 </br> * 發布版本:V1.0 </br> */ public class NewsMessage extends BaseMessage { // 圖文消息個數,限制為10條以內 private int ArticleCount; // 多條圖文消息信息,默認第一個item為大圖 private List<Article> Articles; public int getArticleCount() { return ArticleCount; } public void setArticleCount(int articleCount) { ArticleCount = articleCount; } public List<Article> getArticles() { return Articles; } public void setArticles(List<Article> articles) { Articles = articles; } }
封裝結束。
為了方便,提供一下這些類的源碼:
http://yunpan.cn/cL7KUQ4Q5tMeh 訪問密碼 75e7
其他文章關聯:
第一篇:微信公眾平台開發實戰Java版之了解微信公眾平台基礎知識以及資料准備
第二篇 :微信公眾平台開發實戰Java版之開啟開發者模式,接入微信公眾平台開發
第三篇 :微信公眾平台開發實戰Java版之請求消息,響應消息以及事件消息類的封裝
第四篇 :微信公眾平台開發實戰Java版之完成消息接受與相應以及消息的處理
第五篇 :微信公眾平台開發實戰Java版之如何獲取公眾號的access_token以及緩存access_token
第六篇 :微信公眾平台開發實戰Java版之如何自定義微信公眾號菜單
第七篇 :微信公眾平台開發實戰Java版之如何獲取微信用戶基本信息
第八篇 :微信公眾平台開發實戰Java版之如何網頁授權獲取用戶基本信息
第九篇 :微信公眾平台開發實戰Java版之如何實現自定義分享內容