Java开发微信公众号---微信服务器请求消息,响应消息,事件消息以及工具处理类的封装

Posted han108

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java开发微信公众号---微信服务器请求消息,响应消息,事件消息以及工具处理类的封装相关的知识,希望对你有一定的参考价值。

在前面几篇文章我们讲了微信公众号环境的配置 和微信公众号服务的接入,接下来我们来说一下微信服务器请求消息,响应消息以及事件消息的相关内容,首先我们来分析一下消息类型和返回xml格式及实体类的封装。

(一)封装请求信息

首先打开微信提供的开发者文档:http://mp.weixin.qq.com/wiki/home/ ,点击左侧的“消息管理”----“接收普通消息”,在右侧我们可以看到微信普通消息类型大致有:文本消息、图片消息、语音消息、视频消息、小视频消息、地理位置消息、链接消息;通过查看开发者文档,我们可以发现消息类型的格式为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>

 当我们接收消息的时候,微信将向我们发送Post请求,并以XML的格式发送与接收数据。那么此时我们就需要一个工具类来处理XML格式的文件:MessageType.parseXml()

技术分享图片
  1 package com.webchat.util.weixin;
  2 
  3 import java.io.InputStream;
  4 import java.io.Writer;
  5 import java.util.HashMap;
  6 import java.util.List;
  7 import java.util.Map;
  8 
  9 import javax.servlet.http.HttpServletRequest;
 10 import javax.servlet.http.HttpServletResponse;
 11 
 12 import org.dom4j.Document;
 13 import org.dom4j.Element;
 14 import org.dom4j.io.SAXReader;
 15 
 16 import com.thoughtworks.xstream.XStream;
 17 import com.thoughtworks.xstream.core.util.QuickWriter;
 18 import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
 19 import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;
 20 import com.thoughtworks.xstream.io.xml.XppDriver;
 21 import com.webchat.entity.PageData;
 22  
 23 public class MessageType {
 24     /*
 25      * 文本消息
 26      */
 27     public static final String TEXT_MESSAGE = "text";
 28     /*
 29      * 图片消息
 30      */
 31     public static final String IMAGE_MESSAGE = "image";
 32     /*
 33      * 语音消息
 34      */
 35     public static final String VOICE_MESSAGE = "voice";
 36     /*
 37      * 视频消息
 38      */
 39     public static final String VIDEO_MESSAGE = "video";
 40     /*
 41      * 小视频消息消息
 42      */
 43     public static final String SHORTVIDEO_MESSAGE = "shortvideo";
 44     /*
 45      * 地理位置消息
 46      */
 47     public static final String POSOTION_MESSAGE = "location";
 48     /*
 49      * 链接消息
 50      */
 51     public static final String LINK_MESSAGE = "link";
 52     /*
 53      * 音乐消息
 54      */
 55     public static final String MUSIC_MESSAGE = "music";
 56     /*
 57      * 图文消息
 58      */
 59     public static final String IMAGE_TEXT_MESSAGE = "news";
 60     /*
 61      * 请求消息类型:事件推送
 62      */
 63     public static final String REQ_MESSAGE_TYPE_EVENT = "event";
 64     /*
 65      * 事件类型:subscribe(订阅)
 66      */
 67     public static final String EVENT_TYPE_SUBSCRIBE = "subscribe";
 68     /*
 69      * 事件类型:unsubscribe(取消订阅)
 70      */
 71     public static final String EVENT_TYPE_UNSUBSCRIBE = "unsubscribe";
 72     /*
 73      * 事件类型:scan(用户已关注时的扫描带参数二维码)
 74      */
 75     public static final String EVENT_TYPE_SCAN = "scan";
 76     /*
 77      * 事件类型:LOCATION(上报地理位置)
 78      */
 79     public static final String EVENT_TYPE_LOCATION = "location";
 80     /*
 81      * 事件类型:CLICK(自定义菜单)
 82      */
 83     public static final String EVENT_TYPE_CLICK = "click";
 84 
 85     /*
 86      * 响应消息类型:文本
 87      */
 88     public static final String RESP_MESSAGE_TYPE_TEXT = "text";
 89     /*
 90      * 响应消息类型:图片
 91      */
 92     public static final String RESP_MESSAGE_TYPE_IMAGE = "image";
 93     /*
 94      * 响应消息类型:语音
 95      */
 96     public static final String RESP_MESSAGE_TYPE_VOICE = "voice";
 97     /*
 98      * 响应消息类型:视频
 99      */
100     public static final String RESP_MESSAGE_TYPE_VIDEO = "video";
101     /*
102      * 响应消息类型:音乐
103      */
104     public static final String RESP_MESSAGE_TYPE_MUSIC = "music";
105     /*
106      * 响应消息类型:图文
107      */
108     public static final String RESP_MESSAGE_TYPE_NEWS = "news";
109 
110     /**
111      * @Title parseXml
112      * @Description 将用户的xml消息提取成map key value 类型
113      * @param request
114      * @param response
115      * @return
116      * @throws Exception
117      */
118     public static Map<String, String> parseXml(HttpServletRequest request, HttpServletResponse response)
119             throws Exception {
120         // 将解析结果存储在HashMap中
121         Map<String, String> map = new HashMap<String, String>();
122         // 从request中取得输入流
123         InputStream inputStream = request.getInputStream();
124         // 读取输入流
125         SAXReader reader = new SAXReader();
126         Document document = reader.read(inputStream);
127         // 得到xml根元素
128         Element root = document.getRootElement();
129         // 得到根元素的所有子节点
130         List<Element> elementList = root.elements();
131         // 遍历所有子节点
132         for (Element e : elementList) {
133             map.put(e.getName(), e.getText());
134         }
135         // 释放资源
136         inputStream.close();
137         inputStream = null;
138         return map;
139     }
140 }
View Code

 

通过对开发文档的分析我们可以发现这些消息类型中,都会传回来这些公共的字段如:

    ToUserName(开发者微信号);

    FromUserName(发送方帐 号,OPEN_ID);

    CreateTime(消息的创建时间);

    MsgType(消息类型);

    MsgId(消息ID)。

我们把这些封装成一个基类,然后 不同的部分,分别封装为各自的类然后继承这个基类,提高代码的重用性。

(一)消息实体基础类 -- BaseMessage

技术分享图片
 1 package com.webchat.entity.message;
 2 
 3 /**
 4  * 请求消息的公共字段类
 5  * 
 6  * @author Administrator
 7  *
 8  */
 9 public abstract class BaseMessage {
10     // 开发者微信号
11     private String ToUserName;
12     // 发送方帐号(一个OpenID)
13     private String FromUserName;
14     // 消息创建时间 (整型)
15     private long CreateTime;
16     // 消息id,64位整型
17     private long MsgId;
18     /**
19      * 获取 消息类型
20      *
21      * @return 消息类型
22      */
23     public abstract String getMsgType();
24 
25     public String getToUserName() {
26         return ToUserName;
27     }
28 
29     public void setToUserName(String toUserName) {
30         ToUserName = toUserName;
31     }
32 
33     public String getFromUserName() {
34         return FromUserName;
35     }
36 
37     public void setFromUserName(String fromUserName) {
38         FromUserName = fromUserName;
39     }
40 
41     public long getCreateTime() {
42         return CreateTime;
43     }
44 
45     public void setCreateTime(long createTime) {
46         CreateTime = createTime;
47     }
48     
49     public long getMsgId() {
50         return MsgId;
51     }
52 
53     public void setMsgId(long msgId) {
54         MsgId = msgId;
55     }
56 }
View Code

(二)普通消息类

   1,文本消息

技术分享图片
 1 package com.webchat.entity.message;
 2 
 3 import com.webchat.util.weixin.MessageType;
 4 
 5 /**
 6  * 文本消息
 7  * @author Administrator
 8  *
 9  */
10 public class TextMessage extends BaseMessage {
11     //文本消息内容
12     private String Content;
13 
14     public String getContent() {
15         return Content;
16     }
17 
18     public void setContent(String content) {
19         Content = content;
20     }
21 
22     @Override
23     public String getMsgType() {
24         return MessageType.TEXT_MESSAGE.toString();
25     }
26 
27 }
View Code

   2,图片消息

技术分享图片
 1 package com.webchat.entity.message;
 2 
 3 import com.webchat.util.weixin.MessageType;
 4 /**
 5  * 图片消息
 6  * @author Administrator
 7  *
 8  */
 9 public class ImageMessage extends BaseMessage{
10     // 图片链接
11     private String PicUrl;
12     //图片消息媒体id,可以调用多媒体文件下载接口拉取数据。
13     private String MediaId;
14 
15     public String getPicUrl() {
16         return PicUrl;
17     }
18 
19     public void setPicUrl(String picUrl) {
20         PicUrl = picUrl;
21     }
22 
23     public String getMediaId() {
24         return MediaId;
25     }
26 
27     public void setMediaId(String mediaId) {
28         MediaId = mediaId;
29     }
30 
31     @Override
32     public String getMsgType() {
33         return MessageType.IMAGE_MESSAGE.toString();
34     }
35 
36 }
View Code

   3,语音消息

技术分享图片
 1 package com.webchat.entity.message;
 2 
 3 import com.webchat.util.weixin.MessageType;
 4 
 5 /**
 6  * 语音消息
 7  * 
 8  * @author Administrator
 9  *
10  */
11 public class VoiceMessage extends BaseMessage {
12     // 语音消息媒体id,可以调用多媒体文件下载接口拉取数据。
13     private String MediaId;
14     // 语音格式,如amr,speex等
15     private String Format;
16     // 语音识别结果,使用UTF8编码
17     private String Recognition;
18 
19     public String getMediaId() {
20         return MediaId;
21     }
22 
23     public void setMediaId(String mediaId) {
24         MediaId = mediaId;
25     }
26 
27     public String getFormat() {
28         return Format;
29     }
30 
31     public void setFormat(String format) {
32         Format = format;
33     }
34 
35     public String getRecognition() {
36         return Recognition;
37     }
38 
39     public void setRecognition(String recognition) {
40         Recognition = recognition;
41     }
42 
43     @Override
44     public String getMsgType() {
45         return MessageType.VOICE_MESSAGE.toString();
46     }
47 
48 }
View Code

   4,视频消息

技术分享图片
 1 package com.webchat.entity.message;
 2 
 3 import com.webchat.util.weixin.MessageType;
 4 /**
 5  * 视频消息
 6  * @author Administrator
 7  *
 8  */
 9 public class VideoMessage extends BaseMessage {
10     // 视频消息媒体id,可以调用多媒体文件下载接口拉取数据。
11     private String MediaId;
12     // 视频消息 视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。
13     private String ThumbMediaId;
14 
15     public String getMediaId() {
16         return MediaId;
17     }
18 
19     public void setMediaId(String mediaId) {
20         MediaId = mediaId;
21     }
22 
23     public String getThumbMediaId() {
24         return ThumbMediaId;
25     }
26 
27     public void setThumbMediaId(String thumbMediaId) {
28         ThumbMediaId = thumbMediaId;
29     }
30 
31     @Override
32     public String getMsgType() {
33         return MessageType.VIDEO_MESSAGE.toString();
34     }
35 
36 }
View Code

   5,小视频消息

技术分享图片
 1 package com.webchat.entity.message;
 2 
 3 import com.webchat.util.weixin.MessageType;
 4 /**
 5  * 小视频消息
 6  * @author Administrator
 7  *
 8  */
 9 public class ShortVideoInputMessage extends BaseMessage {
10     // 视频消息媒体id,可以调用多媒体文件下载接口拉取数据。
11     private String MediaId;
12     // 视频消息 视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。
13     private String ThumbMediaId;
14 
15     public String getMediaId() {
16         return MediaId;
17     }
18 
19     public void setMediaId(String mediaId) {
20         MediaId = mediaId;
21     }
22 
23     public String getThumbMediaId() {
24         return ThumbMediaId;
25     }
26 
27     public void setThumbMediaId(String thumbMediaId) {
28         ThumbMediaId = thumbMediaId;
29     }
30 
31     @Override
32     public String getMsgType() {
33         return MessageType.SHORTVIDEO_MESSAGE.toString();
34     }
35 }
View Code

   6,地理位置消息

技术分享图片
 1 package com.webchat.entity.message;
 2 
 3 import com.webchat.util.weixin.MessageType;
 4 
 5 /**
 6  * 地理位置消息
 7  * 
 8  * @author Administrator
 9  *
10  */
11 public class LocationMessage extends BaseMessage {
12     // 地理位置维度
13     private String Location_X;
14     // 地理位置经度
15     private String Location_Y;
16     // 地图缩放大小
17     private Long Scale;
18     // 地理位置信息
19     private String Label;
20 
21     public String getLocation_X() {
22         return Location_X;
23     }
24 
25     public void setLocation_X(String location_X) {
26         Location_X = location_X;
27     }
28 
29     public String getLocation_Y() {
30         return Location_Y;
31     }
32 
33     public void setLocation_Y(String location_Y) {
34         Location_Y = location_Y;
35     }
36 
37     public Long getScale() {
38         return Scale;
39     }
40 
41     public void setScale(Long scale) {
42         Scale = scale;
43     }
44 
45     public String getLabel() {
46         return Label;
47     }
48 
49     public void setLabel(String label) {
50         Label = label;
51     }
52 
53     @Override
54     public String getMsgType() {
55         return MessageType.POSOTION_MESSAGE.toString();
56     }
57 
58 }
View Code

   7,链接消息

技术分享图片
 1 package com.webchat.entity.message;
 2 
 3 import com.webchat.util.weixin.MessageType;
 4 
 5 /**
 6  * 链接消息
 7  * 
 8  * @author Administrator
 9  *
10  */
11 public class LinkMessage extends BaseMessage {
12     // 消息标题
13     private String Title;
14     // 消息描述
15     private String Description;
16     // 消息链接
17     private String Url;
18 
19     public String getTitle() {
20         return Title;
21     }
22 
23     public void setTitle(String title) {
24         Title = title;
25     }
26 
27     public String getDescription() {
28         return Description;
29     }
30 
31     public void setDescription(String description) {
32         Description = description;
33     }
34 
35     public String getUrl() {
36         return Url;
37     }
38 
39     public void setUrl(String url) {
40         Url = url;
41     }
42 
43     @Override
44     public String getMsgType() {
45         return MessageType.LINK_MESSAGE.toString();
46     }
47 
48 }
View Code

(二)封装事件

点击左侧的“消息管理”----“接收事件推送”,在右侧我们可以看到微信接收事件推送的目录:关注/取消关注事件、扫描带参数二维码事件、上报地理位置事件、自定义菜单事件、点击菜单拉取消息时的事件推送、点击菜单跳转链接时的事件推送;推送XML数据包 和消息文本的类似,详情参考开发者文档

提取公共字段创建基础类

技术分享图片
 1 package com.webchat.entity.event;
 2 
 3 /**
 4  * 事件消息
 5  * 
 6  * @author Administrator
 7  *
 8  */
 9 public abstract class BaseEvent {
10     // 开发者微信号
11     private String ToUserName;
12     // 发送方帐号(一个OpenID)
13     private String FromUserName;
14     // 消息创建时间 (整型)
15     private long CreateTime;
16     // 消息类型
17     private String MsgType;
18     // 事件类型
19     private String Event;
20 
21     public String getEvent() {
22         return Event;
23     }
24 
25     public void setEvent(String event) {
26         Event = event;
27     }
28 
29     public String getToUserName() {
30         return ToUserName;
31     }
32 
33     public void setToUserName(String toUserName) {
34         ToUserName = toUserName;
35     }
36 
37     public String getFromUserName() {
38         return FromUserName;
39     }
40 
41     public void setFromUserName(String fromUserName) {
42         FromUserName = fromUserName;
43     }
44 
45     public long getCreateTime() {
46         return CreateTime;
47     }
48 
49     public void setCreateTime(long createTime) {
50         CreateTime = createTime;
51     }
52 
53     public String getMsgType() {
54         return MsgType;
55     }
56 
57     public void setMsgType(String msgType) {
58         MsgType = msgType;
59     }
60 }
View Code

事件封装

   1,关注/取消事件

技术分享图片
1 package com.webchat.entity.event;
2 /**
3  * 关注取消事件
4  * @author Administrator
5  *
6  */
7 public class SubscribeEvent extends BaseEvent{
8 
9 }
View Code

   2,扫描参数带二维码事件

技术分享图片
 1 package com.webchat.entity.event;
 2 
 3 /**
 4  * 扫描带参数二维码事件
 5  * 
 6  * @author Administrator
 7  *
 8  */
 9 public class QRCodeEvent extends BaseEvent {
10     // 事件KEY值
11     private String EventKey;
12     // 用于换取二维码图片
13     private String Ticket;
14 
15     public String getEventKey() {
16         return EventKey;
17     }
18 
19     public void setEventKey(String eventKey) {
20         EventKey = eventKey;
21     }
22 
23     public String getTicket() {
24         return Ticket;
25     }
26 
27     public void setTicket(String ticket) {
28         Ticket = ticket;
29     }
30 
31 }
View Code

   3,上报地理位置事件

技术分享图片
 1 package com.webchat.entity.event;
 2 
 3 /**
 4  * 上报地理位置事件
 5  * 
 6  * @author Administrator
 7  *
 8  */
 9 public class LocationEvent extends BaseEvent {
10     // 地理位置纬度
11     private String Latitude;
12     // 地理位置经度
13     private String Longitude;
14     // 地理位置精度
15     private String Precision;
16 
17     public String getLatitude() {
18         return Latitude;
19     }
20 
21     public void setLatitude(String latitude) {
22         Latitude = latitude;
23     }
24 
25     public String getLongitude() {
26         return Longitude;
27     }
28 
29     public void setLongitude(String longitude) {
30         Longitude = longitude;
31     }
32 
33     public String getPrecision() {
34         return Precision;
35     }
36 
37     public void setPrecision(String precision) {
38         Precision = precision;
39     }
40 
41 }
View Code

   4,自定义菜单事件

技术分享图片
 1 package com.webchat.entity.event;
 2 
 3 /**
 4  * 自定义菜单事件
 5  * @author Administrator
 6  *
 7  */
 8 public class MenuEvent extends BaseEvent {
 9     // 事件KEY值,与自定义菜单接口中KEY值对应
10     private String EventKey;
11     
12     public String getEventKey() {
13         return EventKey;
14     }
15 
16     public void setEventKey(String eventKey) {
17         EventKey = eventKey;
18     }
19 
20 }
View Code

(三)回复消息的分类及实体的封装

点击左侧的“消息管理”----“被动回复用户消息”,当用户发送消息给公众号时(或某些特定的用户操作引发的事件推送时),会产生一个POST请求,开发者可以在响应包(Get)中返回特定XML结构,来对该消息进行响应(现支持回复文本、图片、图文、语音、视频、音乐)。严格来说,发送被动响应消息其实并不是一种接口,而是对微信服务器发过来消息的一次回复。

微信服务器在将用户的消息发给公众号的开发者服务器地址(开发者中心处配置)后,微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次,如果在调试中,发现用户无法收到响应的消息,可以检查是否消息处理超时。关于重试的消息排重,有msgid的消息推荐使用msgid排重。事件类型消息推荐使用FromUserName + CreateTime 排重。详情请查看开发者文档

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

响应消息的基类BaseOutMessage

技术分享图片
 1 package com.webchat.entity.output;
 2 
 3 /**
 4  * 回复消息的公共字段类
 5  * 
 6  * @author Administrator
 7  *
 8  */
 9 public abstract class BaseOutMessage {
10     // 接收方帐号(收到的OpenID)
11     private String ToUserName;
12     // 开发者微信号
13     private String FromUserName;
14     // 消息创建时间 (整型)
15     private long CreateTime;
16 
17     // 获取消息类型
18     public abstract String getMsgType();
19     
20     public String getToUserName() {
21         return ToUserName;
22     }
23 
24     public void setToUserName(String toUserName) {
25         ToUserName = toUserName;
26     }
27 
28     public String getFromUserName() {
29         return FromUserName;
30     }
31 
32     public void setFromUserName(String fromUserName) {
33         FromUserName = fromUserName;
34     }
35 
36     public long getCreateTime() {
37         return CreateTime;
38     }
39 
40     public void setCreateTime(long createTime) {
41         CreateTime = createTime;
42     }
43 
44 }
View Code

普通消息回复实体实现

   1,回复文本消息

技术分享图片
 1 package com.webchat.entity.output;
 2 
 3 import com.webchat.util.weixin.MessageType;
 4 
 5 /**
 6  * 文本回复消息
 7  * 
 8  * @author Administrator
 9  *
10  */
11 public class TextMessage extends BaseOutMessage {
12     // 文本消息
13     private String Content;
14 
15     public String getContent() {
16         return Content;
17     }
18 
19     public void setContent(String content) {
20         Content = content;
21     }
22 
23     @Override
24     public String getMsgType() {
25         return MessageType.RESP_MESSAGE_TYPE_TEXT.toString();
26     }
27 }
View Code

   2,回复图片消息

技术分享图片
 1 package com.webchat.entity.output;
 2 
 3 
 4 /**
 5  * 图片回复消息
 6  * @author Administrator
 7  *
 8  */
 9 public class Image{
10     //通过上传多媒体文件,得到的id
11     private String MediaId;
12     
13     public String getMediaId() {
14         return MediaId;
15     }
16 
17     public void setMediaId(String mediaId) {
18         MediaId = mediaId;
19     }
20 }
View Code
技术分享图片
 1 package com.webchat.entity.output;
 2 
 3 import com.webchat.util.weixin.MessageType;
 4 /**
 5  * 图片输出内容
 6  * @author Administrator
 7  *
 8  */
 9 public class ImageOutputMessage extends BaseOutMessage{
10     private Image Image;
11     public Image getImage() {
12         return Image;
13     }
14     public void setImage(Image image) {
15         Image = image;
16     }
17     @Override
18     public String getMsgType() {
19         return MessageType.RESP_MESSAGE_TYPE_IMAGE.toString();
20     }
21 }
View Code

   3,回复语音消息

技术分享图片
 1 package com.webchat.entity.output;
 2 /**
 3  * 语音model
 4  * @author Administrator
 5  *
 6  */
 7 public class Voice {
 8     // 媒体文件id
 9     private String MediaId;
10 
11     public String getMediaId() {
12         return MediaId;
13     }
14 
15     public void setMediaId(String mediaId) {
16         MediaId = mediaId;
17     }
18     
19 }
View Code
技术分享图片
 1 package com.webchat.entity.output;
 2 
 3 import com.webchat.util.weixin.MessageType;
 4 /**
 5  * 语音回复消息
 6  * @author Administrator
 7  *
 8  */
 9 public class VoiceOutputMessage extends BaseOutMessage{
10     private Voice voice;
11     
12     public Voice getVoice() {
13         return voice;
14     }
15 
16     public void setVoice(Voice voice) {
17         this.voice = voice;
18     }
19 
20     @Override
21     public String getMsgType() {
22         return MessageType.RESP_MESSAGE_TYPE_VOICE.toString();
23     }
24 }
View Code

   4,回复视频消息

技术分享图片
 1 package com.webchat.entity.output;
 2 /**
 3  * 视频model
 4  * @author Administrator
 5  *
 6  */
 7 public class Video {
 8     // 媒体文件id
 9     private String MediaId;
10     // 缩略图的媒体id
11     private String ThumbMediaId;
12     //视频消息的标题
13     private String Title; 
14     //视频消息的描述
15     private String Description;
16     public String getMediaId() {
17         return MediaId;
18     }
19 
20     public void setMediaId(String mediaId) {
21         MediaId = mediaId;
22     }
23 
24     public String getThumbMediaId() {
25         return ThumbMediaId;
26     }
27 
28     public void setThumbMediaId(String thumbMediaId) {
29         ThumbMediaId = thumbMediaId;
30     }
31 
32     public String getTitle() {
33         return Title;
34     }
35 
36     public void setTitle(String title) {
37         Title = title;
38     }
39 
40     public String getDescription() {
41         return Description;
42     }
43 
44     public void setDescription(String description) {
45         Description = description;
46     }
47     
48 }
View Code
技术分享图片
 1 package com.webchat.entity.output;
 2 
 3 import com.webchat.util.weixin.MessageType;
 4 
 5 /**
 6  * 回复视频消息
 7  * 
 8  * @author Administrator
 9  *
10  */
11 public class VideoOutPutMessage extends BaseOutMessage {
12     private Video Video;
13 
14     public Video getVideo() {
15         return Video;
16     }
17 
18     public void setVideo(Video video) {
19         Video = video;
20     }
21 
22     @Override
23     public String getMsgType() {
24         return MessageType.RESP_MESSAGE_TYPE_VIDEO.toString();
25     }
26 }
View Code

   5,回复音乐消息

技术分享图片
 1 package com.webchat.entity.output;
 2 /**
 3  * 回复音乐消息中的音乐对象
 4  * @author Administrator
 5  *
 6  */
 7 public class Music {
 8     // 音乐标题
 9     private String Title;
10     // 音乐描述
11     private String Description;
12     // 音乐链接
13     private String MusicUrl;
14     // 高质量音乐链接,WIFI环境优先使用该链接播放音乐
15     private String HQMusicUrl;
16     // 缩略图的媒体id,通过上传多媒体文件得到的id
17     private String ThumbMediaId;
18 
19     public String getTitle() {
20         return Title;
21     }
22 
23     public void setTitle(String title) {
24         Title = title;
25     }
26 
27     public String getDescription() {
28         return Description;
29     }
30 
31     public void setDescription(String description) {
32         Description = description;
33     }
34 
35     public String getMusicUrl() {
36         return MusicUrl;
37     }
38 
39     public void setMusicUrl(String musicUrl) {
40         MusicUrl = musicUrl;
41     }
42 
43     public String getHQMusicUrl() {
44         return HQMusicUrl;
45     }
46 
47     public void setHQMusicUrl(String hQMusicUrl) {
48         HQMusicUrl = hQMusicUrl;
49     }
50 
51     public String getThumbMediaId() {
52         return ThumbMediaId;
53     }
54 
55     public void setThumbMediaId(String thumbMediaId) {
56         ThumbMediaId = thumbMediaId;
57     }
58 
59 }
View Code
技术分享图片
 1 package com.webchat.entity.output;
 2 
 3 import com.webchat.util.weixin.MessageType;
 4 /**
 5  * 回复音乐消息
 6  * @author Administrator
 7  *
 8  */
 9 public class MusicOutputMessage extends BaseOutMessage {
10     private Music Music;
11 
12     public Music getMusic() {
13         return Music;
14     }
15 
16     public void setMusic(Music music) {
17         Music = music;
18     }
19 
20     @Override
21     public String getMsgType() {
22         return MessageType.RESP_MESSAGE_TYPE_MUSIC.toString();
23     }
24 }
View Code

   6,回复图文消息

技术分享图片
 1 package com.webchat.entity.output;
 2 /**
 3  * 图文消息实体类对象
 4  * @author Administrator
 5  *
 6  */
 7 public class Articles {
 8     private String Title;
 9     // 图文消息描述
10     private String Description;
11     // 图片链接,支持JPG、PNG格式,较好的效果为大图640*320,小图80*80
12     private String PicUrl;
13     // 点击图文消息跳转链接
14     private String Url;
15 
16     public String getTitle() {
17         return Title;
18     }
19 
20     public void setTitle(String title) {
21         Title = title;
22     }
23 
24     public String getDescription() {
25         return Description;
26     }
27 
28     public void setDescription(String description) {
29         Description = description;
30     }
31 
32     public String getPicUrl() {
33         return PicUrl;
34     }
35 
36     public void setPicUrl(String picUrl) {
37         PicUrl = picUrl;
38     }
39 
40     public String getUrl() {
41         return Url;
42     }
43 
44     public void setUrl(String url) {
45         Url = url;
46     }
47 }
View Code
技术分享图片
 1 package com.webchat.entity.output;
 2 
 3 import java.util.List;
 4 import com.webchat.util.weixin.MessageType;
 5 
 6 /**
 7  * 提供了获取多条图文消息信息
 8  * 
 9  * @author Administrator
10  *
11  */
12 public class NewsOutputMessage extends BaseOutMessage {
13     // 图文消息个数,限制为10条以内
14     private int ArticleCount;
15     // 多条图文消息信息,默认第一个item为大图
16     private List<Articles> Articles;
17 
18     public int getArticleCount() {
19         return ArticleCount;
20     }
21 
22     public void setArticleCount(int articleCount) {
23         ArticleCount = articleCount;
24     }
25 
26     public List<Articles> getArticles() {
27         return Articles;
28     }
29 
30     public void setArticles(List<Articles> articles) {
31         Articles = articles;
32     }
33 
34     @Override
35     public String getMsgType() {
36         return MessageType.RESP_MESSAGE_TYPE_NEWS.toString();
37     }
38 }
View Code

至此,我们所有的内容已经封装完成

技术分享图片

接下来会更新:微信服务器 post 消息体的接收及消息处理的内容

如果在操作过程中有问题,欢迎随时讨论^.^

百度云链接:https://pan.baidu.com/s/1xQIAl14_9JKJi1BsFe7yvw    密码:ybnv

备注:我的是maven项目,此链接只为分享封装的实体类,如果项目中出现错误,可不用理会,只拿自己想要的东西即可

 





以上是关于Java开发微信公众号---微信服务器请求消息,响应消息,事件消息以及工具处理类的封装的主要内容,如果未能解决你的问题,请参考以下文章

PHP开发微信公众号的问题

使用JAVA开发微信公众平台——环境搭建与开发接入

使用JAVA开发微信公众平台——环境搭建与开发接入

使用JAVA开发微信公众平台——环境搭建与开发接入

使用JAVA开发微信公众平台——环境搭建与开发接入

使用JAVA开发微信公众平台——环境搭建与开发接入