第三篇:微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

微信服务器和第三方服务器之间究竟是通过什么方式进行对话的?

下面,我们先看下图:

其实我们可以简单的理解:

(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[thisis 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[thisis 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 :

packagecom.souvc.weixin.message.req;/*** 类名: BaseMessage </br>

* 描述: 请求消息的基类 </br>

* 开发人员: souvc</br>

* 创建时间: Sep 29, 2015 </br>

* 发布版本:V1.0 </br>*/publicclassBaseMessage {//开发者微信号PRivateString ToUserName;//发送方帐号(一个OpenID)privateString FromUserName;//消息创建时间 (整型)privatelongCreateTime;//消息类型(text/image/location/link)privateString MsgType;//消息id,64位整型privatelongMsgId;publicString getToUserName() {returnToUserName;

}publicvoidsetToUserName(String toUserName) {

ToUserName=toUserName;

}publicString getFromUserName() {returnFromUserName;

}publicvoidsetFromUserName(String fromUserName) {

FromUserName=fromUserName;

}publiclonggetCreateTime() {returnCreateTime;

}publicvoidsetCreateTime(longcreateTime) {

CreateTime=createTime;

}publicString getMsgType() {returnMsgType;

}publicvoidsetMsgType(String msgType) {

MsgType=msgType;

}publiclonggetMsgId() {returnMsgId;

}publicvoidsetMsgId(longmsgId) {

MsgId=msgId;

}

}

(1)文本消息:Content 文本消息内容:

packagecom.souvc.weixin.message.req;/*** 类名: TextMessage </br>

* 描述: 请求消息之文本消息 </br>

* 开发人员: souvc </br>

* 创建时间: Sep 29, 2015 </br>

* 发布版本:V1.0 </br>*/publicclassTextMessageextendsBaseMessage {//消息内容privateString Content;publicString getContent() {returnContent;

}publicvoidsetContent(String content) {

Content=content;

}

}

(2)图片消息:

PicUrl

图片链接

MediaId

图片消息媒体id,可以调用多媒体文件下载接口拉取数据。

packagecom.souvc.weixin.message.req;/*** 类名: ImageMessage </br>

* 描述: 请求消息之图片消息 </br>

* 开发人员: souvc </br>

* 创建时间: Sep 29, 2015 </br>

* 发布版本:V1.0 </br>*/publicclassImageMessageextendsBaseMessage {//图片链接privateString PicUrl;privateString MediaId;publicString getPicUrl() {returnPicUrl;

}publicvoidsetPicUrl(String picUrl) {

PicUrl=picUrl;

}publicString getMediaId() {returnMediaId;

}publicvoidsetMediaId(String mediaId) {

MediaId=mediaId;

}

}

(3)语音消息:

MediaId

语音消息媒体id,可以调用多媒体文件下载接口拉取数据。

Format

语音格式,如amr,speex等

packagecom.souvc.weixin.message.req;/*** 类名: VoiceMessage </br>

* 描述: 请求消息之语音消息 </br>

* 开发人员: souvc </br>

* 创建时间: Sep 29, 2015 </br>

* 发布版本:V1.0 </br>*/publicclassVoiceMessageextendsBaseMessage {//媒体IDprivateString MediaId;//语音格式privateString Format;publicString getMediaId() {returnMediaId;

}publicvoidsetMediaId(String mediaId) {

MediaId=mediaId;

}publicString getFormat() {returnFormat;

}publicvoidsetFormat(String format) {

Format=format;

}

}

(4)视频消息:

MediaId

视频消息媒体id,可以调用多媒体文件下载接口拉取数据。

ThumbMediaId

视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。

packagecom.souvc.weixin.message.req;/*** 类名: VideoMessage </br>

* 描述: 请求消息之视频消息 </br>

* 开发人员: souvc </br>

* 创建时间: Sep 29, 2015 </br>

* 发布版本:V1.0 </br>*/publicclassVideoMessageextendsBaseMessage{//媒体IDprivateString MediaId;//语音格式privateString ThumbMediaId;

publicString getMediaId() {returnMediaId;

}publicvoidsetMediaId(String mediaId) {

MediaId=mediaId;

}publicString getThumbMediaId() {returnThumbMediaId;

}publicvoidsetThumbMediaId(String thumbMediaId) {

ThumbMediaId=thumbMediaId;

}

}

(5)小视频消息:

MediaId

视频消息媒体id,可以调用多媒体文件下载接口拉取数据。

ThumbMediaId

视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。

(6)地理位置消息:

Location_X

地理位置维度

Location_Y

地理位置经度

Scale

地图缩放大小

Label

地理位置信息

packagecom.souvc.weixin.message.req;/*** 类名: LocationMessage </br>

* 描述: 请求消息之地理位置消息 </br>

* 开发人员:souvc</br>

* 创建时间: Sep 29, 2015 </br>

* 发布版本:V1.0 </br>*/publicclassLocationMessageextendsBaseMessage {//地理位置维度privateString Location_X;//地理位置经度privateString Location_Y;//地图缩放大小privateString Scale;//地理位置信息privateString Label;publicString getLocation_X() {returnLocation_X;

}publicvoidsetLocation_X(String location_X) {

Location_X=location_X;

}publicString getLocation_Y() {returnLocation_Y;

}publicvoidsetLocation_Y(String location_Y) {

Location_Y=location_Y;

}publicString getScale() {returnScale;

}publicvoidsetScale(String scale) {

Scale=scale;

}publicString getLabel() {returnLabel;

}publicvoidsetLabel(String label) {

Label=label;

}

}

(7)链接消息:

Title

消息标题

Description

消息描述

Url

消息链接

packagecom.souvc.weixin.message.req;/*** 类名: LinkMessage </br>

* 描述: 请求消息之链接消息 </br>

* 开发人员: souvc </br>

* 创建时间: Sep 29, 2015 </br>

* 发布版本:V1.0 </br>*/publicclassLinkMessageextendsBaseMessage {//消息标题privateString Title;//消息描述privateString Description;//消息链接privateString Url;publicString getTitle() {returnTitle;

}publicvoidsetTitle(String title) {

Title=title;

}publicString getDescription() {returnDescription;

}publicvoidsetDescription(String description) {

Description=description;

}publicString getUrl() {returnUrl;

}publicvoidsetUrl(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

View Code

详细可以参照 官网

事件基类封装

packagecom.souvc.weixin.message.event;/*** 类名: BaseEvent </br>

* 描述: 事件基类</br>

* 开发人员: souvc</br>

* 创建时间: 2015-9-30 </br>

* 发布版本:V1.0 </br>*/publicclassBaseEvent {//开发者微信号privateString ToUserName;//发送方帐号(一个OpenID)privateString FromUserName;//消息创建时间 (整型)privatelongCreateTime;//消息类型privateString MsgType;//事件类型privateString Event;publicString getToUserName() {returnToUserName;

}publicvoidsetToUserName(String toUserName) {

ToUserName=toUserName;

}publicString getFromUserName() {returnFromUserName;

}publicvoidsetFromUserName(String fromUserName) {

FromUserName=fromUserName;

}publiclonggetCreateTime() {returnCreateTime;

}publicvoidsetCreateTime(longcreateTime) {

CreateTime=createTime;

}publicString getMsgType() {returnMsgType;

}publicvoidsetMsgType(String msgType) {

MsgType=msgType;

}publicString getEvent() {returnEvent;

}publicvoidsetEvent(String event) {

Event=event;

}

}

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

packagecom.souvc.weixin.message.event;/*** 类名: SubscribeEvent </br>

* 描述: 关注/取消关注事件 </br>

* 开发人员: souvc </br>

* 创建时间: 2015-9-30 </br>

* 发布版本:V1.0 </br>*/publicclassSubscribeEventextendsBaseEvent {

}

(2)扫描带参数二维码事件

packagecom.souvc.weixin.message.event;/*** 类名: QRCodeEvent </br>

* 描述: 扫描带参数二维码事件 </br>

* 开发人员: souvc </br>

* 创建时间: 2015-9-30 </br>

* 发布版本:V1.0 </br>*/publicclassQRCodeEventextendsBaseEvent {//事件KEY值privateString EventKey;//用于换取二维码图片privateString Ticket;publicString getEventKey() {returnEventKey;

}publicvoidsetEventKey(String eventKey) {

EventKey=eventKey;

}publicString getTicket() {returnTicket;

}publicvoidsetTicket(String ticket) {

Ticket=ticket;

}

}

(3)上报地理位置事件

packagecom.souvc.weixin.message.event;/*** 类名: LocationEvent </br>

* 描述: 上报地理位置事件 </br>

* 开发人员: liuhf </br>

* 创建时间: 2015-9-30 </br>

* 发布版本:V1.0 </br>*/publicclassLocationEventextendsBaseEvent {//地理位置纬度privateString Latitude;//地理位置经度privateString Longitude;//地理位置精度privateString Precision;publicString getLatitude() {returnLatitude;

}publicvoidsetLatitude(String latitude) {

Latitude=latitude;

}publicString getLongitude() {returnLongitude;

}publicvoidsetLongitude(String longitude) {

Longitude=longitude;

}publicString getPrecision() {returnPrecision;

}publicvoidsetPrecision(String precision) {

Precision=precision;

}

}

(4)自定义菜单事件

packagecom.souvc.weixin.message.event;/*** 类名: MenuEvent </br>

* 描述: 自定义菜单事件 </br>

* 开发人员: liuhf </br>

* 创建时间: 2015-9-30 </br>

* 发布版本:V1.0 </br>*/publicclassMenuEventextendsBaseEvent {//事件KEY值,与自定义菜单接口中KEY值对应privateString EventKey;publicString getEventKey() {returnEventKey;

}publicvoidsetEventKey(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*200Url 否 点击图文消息跳转链接

View Code

详细可以查看 官网

同样,把消息回复中定义的所有消息都有的字段提取出来,封装成一个基类,

这些公有的字段包括:

ToUserName(接收方帐号,用户的OPEN_ID);

FromUserName(开发者的微信号);

CreateTime(消 息的创建时间);

MsgType(消息类型);

FuncFlag(消息的星标标识)。

响应消息的基类BaseMessage:

packagecom.souvc.weixin.message.resp;/*** 类名: BaseMessage </br>

* 描述: 消息基类(公众帐号 -> 普通用户) </br>

* 开发人员: souvc </br>

* 创建时间: 2015-9-30 </br>

* 发布版本:V1.0 </br>*/publicclassBaseMessage {//接收方帐号(收到的OpenID)privateString ToUserName;//开发者微信号privateString FromUserName;//消息创建时间 (整型)privatelongCreateTime;//消息类型privateString MsgType;publicString getToUserName() {returnToUserName;

}publicvoidsetToUserName(String toUserName) {

ToUserName=toUserName;

}publicString getFromUserName() {returnFromUserName;

}publicvoidsetFromUserName(String fromUserName) {

FromUserName=fromUserName;

}publiclonggetCreateTime() {returnCreateTime;

}publicvoidsetCreateTime(longcreateTime) {

CreateTime=createTime;

}publicString getMsgType() {returnMsgType;

}publicvoidsetMsgType(String msgType) {

MsgType=msgType;

}

}

(1)回复文本消息

packagecom.souvc.weixin.message.resp;/*** 类名: TextMessage </br>

* 描述: 文本消息 </br>

* 开发人员: souvc </br>

* 创建时间: 2015-9-30 </br>

* 发布版本:V1.0 </br>*/publicclassTextMessageextendsBaseMessage {//回复的消息内容privateString Content;publicString getContent() {returnContent;

}publicvoidsetContent(String content) {

Content=content;

}

}

(2)回复图片消息

packagecom.souvc.weixin.message.resp;/*** 类名: Image </br>

* 描述: 图片 </br>

* 开发人员:souvc </br>

* 创建时间: 2015-9-30 </br>

* 发布版本:V1.0 </br>*/publicclassImage {privateString MediaId;publicString getMediaId() {returnMediaId;

}publicvoidsetMediaId(String mediaId) {

MediaId=mediaId;

}

}

packagecom.souvc.weixin.message.resp;/*** 类名: ImageMessage </br>

* 描述: 图片消息</br>

* 开发人员: souvc </br>

* 创建时间: 2015-9-30 </br>

* 发布版本:V1.0 </br>*/publicclassImageMessageextendsBaseMessage {privateImage Image;publicImage getImage() {returnImage;

}publicvoidsetImage(Image image) {

Image=image;

}

}

(3)回复语音消息

packagecom.souvc.weixin.message.resp;/*** 类名: Voice </br>

* 描述: 语音model </br>

* 开发人员: souvc </br>

* 创建时间: 2015-9-30 </br>

* 发布版本:V1.0 </br>*/publicclassVoice {//媒体文件idprivateString MediaId;publicString getMediaId() {returnMediaId;

}publicvoidsetMediaId(String mediaId) {

MediaId=mediaId;

}

}

packagecom.souvc.weixin.message.resp;/*** 类名: VoiceMessage </br>

* 描述: 语音消息</br>

* 开发人员: souvc </br>

* 创建时间: 2015-9-30 </br>

* 发布版本:V1.0 </br>*/publicclassVoiceMessageextendsBaseMessage {//语音privateVoice Voice;publicVoice getVoice() {returnVoice;

}publicvoidsetVoice(Voice voice) {

Voice=voice;

}

}

(4)回复视频消息

packagecom.souvc.weixin.message.resp;/*** 类名: Video </br>

* 描述: 视频model </br>

* 开发人员: souvc </br>

* 创建时间: 2015-9-30 </br>

* 发布版本:V1.0 </br>*/publicclassVideo {//媒体文件idprivateString MediaId;//缩略图的媒体idprivateString ThumbMediaId;publicString getMediaId() {returnMediaId;

}publicvoidsetMediaId(String mediaId) {

MediaId=mediaId;

}publicString getThumbMediaId() {returnThumbMediaId;

}publicvoidsetThumbMediaId(String thumbMediaId) {

ThumbMediaId=thumbMediaId;

}

}

packagecom.souvc.weixin.message.resp;/*** 类名: VideoMessage </br>

* 描述: 视频消息 </br>

* 开发人员: souvc </br>

* 创建时间: 2015-9-30 </br>

* 发布版本:V1.0 </br>*/publicclassVideoMessageextendsBaseMessage {//视频privateVideo Video;publicVideo getVideo() {returnVideo;

}publicvoidsetVideo(Video video) {

Video=video;

}

}

(5)回复音乐消息

packagecom.souvc.weixin.message.resp;/*** 类名: Music </br>

* 描述: 音乐model </br>

* 开发人员: souvc </br>

* 创建时间: 2015-9-30 </br>

* 发布版本:V1.0 </br>*/publicclassMusic {//音乐标题privateString Title;//音乐描述privateString Description;//音乐链接privateString MusicUrl;//高质量音乐链接,WIFI环境优先使用该链接播放音乐privateString HQMusicUrl;//缩略图的媒体id,通过上传多媒体文件得到的idprivateString ThumbMediaId;publicString getTitle() {returnTitle;

}publicvoidsetTitle(String title) {

Title=title;

}publicString getDescription() {returnDescription;

}publicvoidsetDescription(String description) {

Description=description;

}publicString getMusicUrl() {returnMusicUrl;

}publicvoidsetMusicUrl(String musicUrl) {

MusicUrl=musicUrl;

}publicString getHQMusicUrl() {returnHQMusicUrl;

}publicvoidsetHQMusicUrl(String musicUrl) {

HQMusicUrl=musicUrl;

}publicString getThumbMediaId() {returnThumbMediaId;

}publicvoidsetThumbMediaId(String thumbMediaId) {

ThumbMediaId=thumbMediaId;

}

}

packagecom.souvc.weixin.message.resp;/*** 类名: MusicMessage </br>

* 描述: 音乐消息 </br>

* 开发人员: souvc </br>

* 创建时间: 2015-9-30 </br>

* 发布版本:V1.0 </br>*/publicclassMusicMessageextendsBaseMessage {//音乐privateMusic Music;publicMusic getMusic() {returnMusic;

}publicvoidsetMusic(Music music) {

Music=music;

}

}

(6) 回复图文消息

packagecom.souvc.weixin.message.resp;/*** 类名: Article </br>

* 描述: 图文model </br>

* 开发人员: souvc </br>

* 创建时间: 2015-9-30 </br>

* 发布版本:V1.0 </br>*/publicclassArticle {//图文消息名称privateString Title;//图文消息描述privateString Description;//图片链接,支持JPG、PNG格式,较好的效果为大图640*320,小图80*80privateString PicUrl;//点击图文消息跳转链接privateString Url;publicString getTitle() {returnTitle;

}publicvoidsetTitle(String title) {

Title=title;

}publicString getDescription() {returnnull== Description ? "": Description;

}publicvoidsetDescription(String description) {

Description=description;

}publicString getPicUrl() {returnnull== PicUrl ? "": PicUrl;

}publicvoidsetPicUrl(String picUrl) {

PicUrl=picUrl;

}publicString getUrl() {returnnull== Url ? "": Url;

}publicvoidsetUrl(String url) {

Url=url;

}

}

packagecom.souvc.weixin.message.resp;importjava.util.List;/*** 类名: NewsMessage </br>

* 描述: 文本消息 </br>

* 开发人员: souvc </br>

* 创建时间: 2015-9-30 </br>

* 发布版本:V1.0 </br>*/publicclassNewsMessageextendsBaseMessage {//图文消息个数,限制为10条以内privateintArticleCount;//多条图文消息信息,默认第一个item为大图privateList<Article>Articles;publicintgetArticleCount() {returnArticleCount;

}publicvoidsetArticleCount(intarticleCount) {

ArticleCount=articleCount;

}publicList<Article>getArticles() {returnArticles;

}publicvoidsetArticles(List<Article>articles) {

Articles=articles;

}

}

封装结束。

为了方便,提供一下这些类的源码:

http://yunpan.cn/cL7KUQ4Q5tMeh 访问密码 75e7

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航