Java微信二次开发(三)

各种类型消息的封装

第一步:找到com.wtz.message.response包,新建类Image.java

 1 package com.wtz.message.response;
 2 
 3 /**
 4  *     @author wangtianze QQ:864620012
 5  *    @date 2017年4月20日 上午8:38:37
 6  *  <p>version:1.0</p>
 7  *     <p>description:图片的实体类</p>
 8  */
 9 public class Image {
10     //图片媒体ID
11     private String MediaId;
12     
13     public String getMediaId() {
14         return MediaId;
15     }
16     public void setMediaId(String mediaId) {
17         MediaId = mediaId;
18     }
19 }

 

第二步:找到com.wtz.message.response包,新建类ImageMessage.java

 1 package com.wtz.message.response;
 2 
 3 /**
 4  *     @author wangtianze QQ:864620012
 5  *    @date 2017年4月20日 上午8:49:57
 6  *  <p>version:1.0</p>
 7  *     <p>description:图片消息类</p>
 8  */
 9 public class ImageMessage extends BaseMessage {
10     //图片对象
11     private Image image;
12 
13     public Image getImage() {
14         return image;
15     }
16 
17     public void setImage(Image image) {
18         this.image = image;
19     }
20 }

 

第三步:找到com.wtz.message.response包,新建类Video.java

 1 package com.wtz.message.response;
 2 
 3 /**
 4  *     @author wangtianze QQ:864620012
 5  *    @date 2017年4月20日 上午9:02:14
 6  *  <p>version:1.0</p>
 7  *     <p>description:视频的实体类</p>
 8  */
 9 public class Video {
10     //视频消息的媒体ID
11     private String MediaId;
12     //视频消息的标题
13     private String Title;
14     //视频消息的描述
15     private String Description;
16     
17     public String getMediaId() {
18         return MediaId;
19     }
20     public void setMediaId(String mediaId) {
21         MediaId = mediaId;
22     }
23     public String getTitle() {
24         return Title;
25     }
26     public void setTitle(String title) {
27         Title = title;
28     }
29     public String getDescription() {
30         return Description;
31     }
32     public void setDescription(String description) {
33         Description = description;
34     }
35 }

 

第四步:找到com.wtz.message.response包,新建类VideoMessage.java

 1 package com.wtz.message.response;
 2 
 3 /**
 4  *     @author wangtianze QQ:864620012
 5  *    @date 2017年4月20日 上午9:10:14
 6  *  <p>version:1.0</p>
 7  *     <p>description:视频消息类</p>
 8  */
 9 public class VideoMessage extends BaseMessage{
10     //视频对象
11     private Video video;
12 
13     public Video getVideo() {
14         return video;
15     }
16 
17     public void setVideo(Video video) {
18         this.video = video;
19     }
20 }

 

第五步:找到com.wtz.message.response包,新建类Voice.java

 1 package com.wtz.message.response;
 2 
 3 /**
 4  *     @author wangtianze QQ:864620012
 5  *    @date 2017年4月20日 上午9:21:47
 6  *  <p>version:1.0</p>
 7  *     <p>description:语音消息实体类</p>
 8  */
 9 public class Voice {
10     //语音媒体编号
11     private String MediaId;
12     
13     public String getMediaId() {
14         return MediaId;
15     }
16     public void setMediaId(String mediaId) {
17         MediaId = mediaId;
18     }
19 }

 

第六步:找到com.wtz.message.response包,新建类VoiceMessage.java

 1 package com.wtz.message.response;
 2 
 3 /**
 4  *     @author wangtianze QQ:864620012
 5  *    @date 2017年4月20日 上午9:44:58
 6  *  <p>version:1.0</p>
 7  *     <p>description:语音消息类</p>
 8  */
 9 public class VoiceMessage extends BaseMessage{
10     //语音对象
11     private Voice voice;
12 
13     public Voice getVoice() {
14         return voice;
15     }
16 
17     public void setVoice(Voice voice) {
18         this.voice = voice;
19     }
20 }

 

第七步:找到com.wtz.message.response包,新建类Music.java

 1 package com.wtz.message.response;
 2 
 3 /**
 4  *     @author wangtianze QQ:864620012
 5  *    @date 2017年4月20日 上午9:48:11
 6  *  <p>version:1.0</p>
 7  *     <p>description:音乐消息实体类</p>
 8  */
 9 public class Music {
10     //音乐标题
11     private String Title;
12     //音乐描述
13     private String Description;
14     //音乐链接
15     private String MusicUrl;
16     //高品质音乐链接
17     private String HQMusicUrl;
18     //缩略图的媒体ID
19     private String ThumbMediaId;
20     
21     public String getTitle() {
22         return Title;
23     }
24     public void setTitle(String title) {
25         Title = title;
26     }
27     public String getDescription() {
28         return Description;
29     }
30     public void setDescription(String description) {
31         Description = description;
32     }
33     public String getMusicUrl() {
34         return MusicUrl;
35     }
36     public void setMusicUrl(String musicUrl) {
37         MusicUrl = musicUrl;
38     }
39     public String getHQMusicUrl() {
40         return HQMusicUrl;
41     }
42     public void setHQMusicUrl(String hQMusicUrl) {
43         HQMusicUrl = hQMusicUrl;
44     }
45     public String getThumbMediaId() {
46         return ThumbMediaId;
47     }
48     public void setThumbMediaId(String thumbMediaId) {
49         ThumbMediaId = thumbMediaId;
50     }
51 }

 

第八步:找到com.wtz.message.response包,新建类MusicMessage.java

 1 package com.wtz.message.response;
 2 
 3 /**
 4  *     @author wangtianze QQ:864620012
 5  *    @date 2017年4月20日 上午9:58:21
 6  *  <p>version:1.0</p>
 7  *     <p>description:音乐消息类</p>
 8  */
 9 public class MusicMessage extends BaseMessage{
10     //音乐对象
11     private Music music;
12 
13     public Music getMusic() {
14         return music;
15     }
16 
17     public void setMusic(Music music) {
18         this.music = music;
19     }
20 }

 

第九步:找到com.wtz.message.response包,新建类Article.java

 1 package com.wtz.message.response;
 2 
 3 /**
 4  *     @author wangtianze QQ:864620012
 5  *    @date 2017年4月20日 上午10:05:29
 6  *  <p>version:1.0</p>
 7  *     <p>description:图文实体类</p>
 8  */
 9 public class Article {
10     //图文标题
11     private String Title;
12     //图文描述
13     private String Description;
14     //图片链接,支持JPG,PNG格式,较好的效果为大图
15     private String PicUrl;
16     //图文消息跳转链接
17     private String Url;
18     
19     public String getTitle() {
20         return Title;
21     }
22     public void setTitle(String title) {
23         Title = title;
24     }
25     public String getDescription() {
26         return Description;
27     }
28     public void setDescription(String description) {
29         Description = description;
30     }
31     public String getPicUrl() {
32         return PicUrl;
33     }
34     public void setPicUrl(String picUrl) {
35         PicUrl = picUrl;
36     }
37     public String getUrl() {
38         return Url;
39     }
40     public void setUrl(String url) {
41         Url = url;
42     }
43 }

 

第十步:找到com.wtz.message.response包,新建类NewsMessage.java

 1 package com.wtz.message.response;
 2 
 3 import java.util.List;
 4 
 5 /**
 6  *     @author wangtianze QQ:864620012
 7  *    @date 2017年4月20日 上午10:16:22
 8  *  <p>version:1.0</p>
 9  *     <p>description:图文消息类</p>
10  */
11 public class NewsMessage extends BaseMessage{
12     //图文条数
13     private int ArticleCount;
14     //多条图文消息信息,默认第一个item为大图
15     private List<Article> Articles;
16     
17     public int getArticleCount() {
18         return ArticleCount;
19     }
20     public void setArticleCount(int articleCount) {
21         ArticleCount = articleCount;
22     }
23     public List<Article> getArticles() {
24         return Articles;
25     }
26     public void setArticles(List<Article> articles) {
27         Articles = articles;
28     }
29 }

 

第十一步:新建包com.wtz.message.request,新建类BaseMessage.java

 1 package com.wtz.message.request;
 2 
 3 /**
 4  *     @author wangtianze QQ:864620012
 5  *    @date 2017年4月20日 上午10:53:23
 6  *  <p>version:1.0</p>
 7  *     <p>description:请求消息基类(普通用户->公众账号)</p>
 8  *  <p>站在服务器端的视角:接收信息</p>
 9  */
10 public class BaseMessage {
11     //开发者微信号
12     private String ToUserName;
13     //发送方账号(一个OpenId)
14     private String FromUserName;
15     //消息创建时间(整型)
16     private long CreateTime;
17     //消息类型
18     private String MsgType;
19     //消息ID,64位整型
20     private long MsgId;
21     
22     public String getToUserName() {
23         return ToUserName;
24     }
25     public void setToUserName(String toUserName) {
26         ToUserName = toUserName;
27     }
28     public String getFromUserName() {
29         return FromUserName;
30     }
31     public void setFromUserName(String fromUserName) {
32         FromUserName = fromUserName;
33     }
34     public long getCreateTime() {
35         return CreateTime;
36     }
37     public void setCreateTime(long createTime) {
38         CreateTime = createTime;
39     }
40     public String getMsgType() {
41         return MsgType;
42     }
43     public void setMsgType(String msgType) {
44         MsgType = msgType;
45     }
46     public long getMsgId() {
47         return MsgId;
48     }
49     public void setMsgId(long msgId) {
50         MsgId = msgId;
51     }
52 }

 

第十二步:找到com.wtz.message.request包,新建类TextMessage.java

 1 package com.wtz.message.request;
 2 
 3 /**
 4  *     @author wangtianze QQ:864620012
 5  *    @date 2017年4月20日 上午11:04:35
 6  *  <p>version:1.0</p>
 7  *     <p>description:文本消息</p>
 8  */
 9 public class TextMessage extends BaseMessage{
10     //消息内容
11     private String Content;
12 
13     public String getContent() {
14         return Content;
15     }
16 
17     public void setContent(String content) {
18         Content = content;
19     }
20 }

 

第十三步:找到com.wtz.message.request包,新建类ImageMessage.java

 1 package com.wtz.message.request;
 2 
 3 /**
 4  *     @author wangtianze QQ:864620012
 5  *    @date 2017年4月20日 上午11:20:50
 6  *  <p>version:1.0</p>
 7  *     <p>description:图片消息</p>
 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     public void setPicUrl(String picUrl) {
19         PicUrl = picUrl;
20     }
21     public String getMediaId() {
22         return MediaId;
23     }
24     public void setMediaId(String mediaId) {
25         MediaId = mediaId;
26     }
27 }

 

第十四步:找到com.wtz.message.request包,新建类VoiceMessage.java

 1 package com.wtz.message.request;
 2 
 3 /**
 4  *     @author wangtianze QQ:864620012
 5  *    @date 2017年4月20日 上午11:27:40
 6  *  <p>version:1.0</p>
 7  *     <p>description:语音消息类</p>
 8  */
 9 public class VoiceMessage extends BaseMessage {
10     //媒体ID
11     private String MediaId;
12     //语音格式
13     private String Format;
14 
15     public String getMediaId() {
16         return MediaId;
17     }
18     public void setMediaId(String mediaId) {
19         MediaId = mediaId;
20     }
21     public String getFormat() {
22         return Format;
23     }
24     public void setFormat(String format) {
25         Format = format;
26     }
27 }

 

第十五步:找到com.wtz.message.request包,新建类VideoMessage.java

 1 package com.wtz.message.request;
 2 
 3 /**
 4  *     @author wangtianze QQ:864620012
 5  *    @date 2017年4月20日 下午3:28:03
 6  *  <p>version:1.0</p>
 7  *     <p>description:视频消息类</p>
 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     public void setMediaId(String mediaId) {
19         MediaId = mediaId;
20     }
21     public String getThumbMediaId() {
22         return ThumbMediaId;
23     }
24     public void setThumbMediaId(String thumbMediaId) {
25         ThumbMediaId = thumbMediaId;
26     }
27 }

 

第十六步:找到com.wtz.message.request包,新建类LocatonMessage.java

 1 package com.wtz.message.request;
 2 
 3 /**
 4  *     @author wangtianze QQ:864620012
 5  *    @date 2017年4月20日 下午3:27:40
 6  *  <p>version:1.0</p>
 7  *     <p>description:地理位置消息类</p>
 8  */
 9 public class LocationMessage extends BaseMessage {
10     //地理位置纬度
11     private String Location_X;
12     //地理位置经度
13     private String Location_Y;
14     //地图缩放大小
15     private String Scale;
16     //地理位置信息
17     private String Label;
18     
19     public String getLocation_X() {
20         return Location_X;
21     }
22     public void setLocation_X(String location_X) {
23         Location_X = location_X;
24     }
25     public String getLocation_Y() {
26         return Location_Y;
27     }
28     public void setLocation_Y(String location_Y) {
29         Location_Y = location_Y;
30     }
31     public String getScale() {
32         return Scale;
33     }
34     public void setScale(String scale) {
35         Scale = scale;
36     }
37     public String getLabel() {
38         return Label;
39     }
40     public void setLabel(String label) {
41         Label = label;
42     }
43 }

 

第十七步:找到com.wtz.message.request包,新建类LinkMessage.java

 1 package com.wtz.message.request;
 2 
 3 /**
 4  *     @author wangtianze QQ:864620012
 5  *    @date 2017年4月20日 下午1:58:04
 6  *  <p>version:1.0</p>
 7  *     <p>description:链接消息类</p>
 8  */
 9 public class LinkMessage extends BaseMessage {
10     //消息标题
11     private String Title;
12     //消息描述
13     private String Description;
14     //消息链接
15     private String Url;
16     
17     public String getTitle() {
18         return Title;
19     }
20     public void setTitle(String title) {
21         Title = title;
22     }
23     public String getDescription() {
24         return Description;
25     }
26     public void setDescription(String description) {
27         Description = description;
28     }
29     public String getUrl() {
30         return Url;
31     }
32     public void setUrl(String url) {
33         Url = url;
34     }
35 }

 

第十八步:新建包com.wtz.message.event,新建类BaseEventMessage.java

 1 package com.wtz.message.event;
 2 
 3 /**
 4  *     @author wangtianze QQ:864620012
 5  *    @date 2017年4月20日 上午10:44:09
 6  *  <p>version:1.0</p>
 7  *     <p>description:基础事件消息类</p>
 8  */
 9 public class BaseEventMessage {
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 getToUserName() {
22         return ToUserName;
23     }
24     public void setToUserName(String toUserName) {
25         ToUserName = toUserName;
26     }
27     public String getFromUserName() {
28         return FromUserName;
29     }
30     public void setFromUserName(String fromUserName) {
31         FromUserName = fromUserName;
32     }
33     public long getCreateTime() {
34         return CreateTime;
35     }
36     public void setCreateTime(long createTime) {
37         CreateTime = createTime;
38     }
39     public String getMsgType() {
40         return MsgType;
41     }
42     public void setMsgType(String msgType) {
43         MsgType = msgType;
44     }
45     public String getEvent() {
46         return Event;
47     }
48     public void setEvent(String event) {
49         Event = event;
50     }
51 }

 

第十九步:找到包com.wtz.message.event,新建类QRCodeEventMessage.java

 1 package com.wtz.message.event;
 2 
 3 /**
 4  *     @author wangtianze QQ:864620012
 5  *    @date 2017年4月20日 下午3:24:30
 6  *  <p>version:1.0</p>
 7  *     <p>description:扫描带参数二维码事件类</p>
 8  */
 9 public class QRCodeEventMessage extends BaseEventMessage{
10     //事件Key值
11     private String EventKey;
12     //用于换取二维码图片
13     private String Ticket;
14     
15     public String getEventKey() {
16         return EventKey;
17     }
18     public void setEventKey(String eventKey) {
19         EventKey = eventKey;
20     }
21     public String getTicket() {
22         return Ticket;
23     }
24     public void setTicket(String ticket) {
25         Ticket = ticket;
26     } 
27 }

 

第二十步:找到包com.wtz.message.event,新建类SubscribeEventMessage.java

 1 package com.wtz.message.event;
 2 
 3 /**
 4  *     @author wangtianze QQ:864620012
 5  *    @date 2017年4月20日 下午3:27:11
 6  *  <p>version:1.0</p>
 7  *     <p>description:关注/取消关注事件类</p>
 8  */
 9 public class SubscribeEventMessage extends BaseEventMessage{
10     
11 }

 

第二十一步:找到包com.wtz.message.event,新建类MenuEventMessage.java

 1 package com.wtz.message.event;
 2 
 3 /**
 4  *     @author wangtianze QQ:864620012
 5  *    @date 2017年4月20日 下午3:32:42
 6  *  <p>version:1.0</p>
 7  *     <p>description:自定义菜单事件类</p>
 8  */
 9 public class MenuEventMessage extends BaseEventMessage{
10     //事件Key值,与自定义菜单接口中Key值对应
11     private String EventKey;
12 
13     public String getEventKey() {
14         return EventKey;
15     }
16 
17     public void setEventKey(String eventKey) {
18         EventKey = eventKey;
19     }
20 }

 

第二十二步:找到包com.wtz.message.event,新建类LocationEventMessage.java

 1 package com.wtz.message.event;
 2 
 3 /**
 4  *     @author wangtianze QQ:864620012
 5  *    @date 2017年4月20日 下午3:37:50
 6  *  <p>version:1.0</p>
 7  *     <p>description:上报地理位置事件类</p>
 8  */
 9 public class LocationEventMessage extends BaseEventMessage{
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     public void setLatitude(String latitude) {
21         Latitude = latitude;
22     }
23     public String getLongitude() {
24         return Longitude;
25     }
26     public void setLongitude(String longitude) {
27         Longitude = longitude;
28     }
29     public String getPrecision() {
30         return Precision;
31     }
32     public void setPrecision(String precision) {
33         Precision = precision;
34     }
35 }

 

第二十三步:找到包com.wtz.util下的MessageUtil.java类,修改这个类添加请求和回复的各种消息类型,事件类型,添加将各种类型消息转换成XML格式的方法

  1 package com.wtz.util;
  2 
  3 import java.io.IOException;
  4 import java.io.InputStream;
  5 import java.io.Writer;
  6 import java.util.HashMap;
  7 import java.util.List;
  8 import java.util.Map;
  9 
 10 import javax.servlet.http.HttpServletRequest;
 11 
 12 import org.dom4j.Document;
 13 import org.dom4j.DocumentException;
 14 import org.dom4j.Element;
 15 import org.dom4j.io.SAXReader;
 16 
 17 import com.thoughtworks.xstream.XStream;
 18 import com.thoughtworks.xstream.core.util.QuickWriter;
 19 import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
 20 import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;
 21 import com.thoughtworks.xstream.io.xml.XppDriver;
 22 import com.wtz.message.response.ImageMessage;
 23 import com.wtz.message.response.MusicMessage;
 24 import com.wtz.message.response.NewsMessage;
 25 import com.wtz.message.response.TextMessage;
 26 import com.wtz.message.response.VideoMessage;
 27 import com.wtz.message.response.VoiceMessage;
 28 
 29 /**
 30  *     @author wangtianze QQ:864620012
 31  *    @date 2017年4月19日 下午3:29:58
 32  *  <p>version:1.0</p>
 33  *     <p>description:消息处理工具类</p>
 34  */
 35 public class MessageUtil {
 36     //请求消息类型:文本
 37     public static final String REQ_MESSAGE_TYPE_TEXT = "text";
 38     //请求消息类型:图片
 39     public static final String REQ_MESSAGE_TYPE_IMAGE = "image";
 40     //请求消息类型:语音
 41     public static final String REQ_MESSAGE_TYPE_VOICE = "voice";
 42     //请求消息类型:视频
 43     public static final String REQ_MESSAGE_TYPE_VIDEO = "video";
 44     //请求消息类型:地理位置
 45     public static final String REQ_MESSAGE_TYPE_LOCATION = "location";
 46     //请求消息类型:链接
 47     public static final String REQ_MESSAGE_TYPE_LINK = "link";
 48     //请求消息类型:事件推送
 49     public static final String REQ_MESSAGE_TYPE_EVENT = "event";
 50     
 51     //---------------------------------------------------------------
 52     
 53     //事件类型:subscribe(订阅)
 54     public static final String EVENT_TYPE_SUBSCRIBE = "subscribe";
 55     //事件类型:unsubscribe(取消订阅)
 56     public static final String EVENT_TYPE_UNSUBSCRIBE = "unsubscribe";
 57     //事件类型:scan(用户已关注时的扫描带参数的二维码)
 58     public static final String EVENT_TYPE_SCAN = "scan";
 59     //事件类型:LOCATION(上报地理位置)
 60     public static final String EVENT_TYPE_LOCATION = "LOCATION";
 61     //事件类型:CLICK(自定义菜单)
 62     public static final String EVENT_TYPE_CLICK = "CLICK";
 63     
 64     //---------------------------------------------------------------
 65     
 66     //响应消息类型:文本
 67     public static final String RESP_MESSAGE_TYPE_TEXT = "text";
 68     //响应详细类型:图片
 69     public static final String RESP_MESSAGE_TYPE_IMAGE = "image";
 70     //响应消息类型:语音
 71     public static final String RESP_MESSAGE_TYPE_VOICE = "voice";
 72     //响应消息类型:视频
 73     public static final String RESP_MESSAGE_TYPE_VIDEO = "video";
 74     //响应详细类型:音乐
 75     public static final String RESP_MESSAGE_TYPE_MUSIC = "music";
 76     //响应消息类型:图文
 77     public static final String RESP_MESSAGE_TYPE_NEWS = "news";
 78     
 79     //---------------------------------------------------------------
 80     
 81     //从流中解析出每个节点的内容
 82     public static Map<String,String> parseXml(HttpServletRequest request) throws IOException{
 83         Map<String,String> map = new HashMap<String,String>();
 84         
 85         //从输入流中获取流对象
 86         InputStream in = request.getInputStream();
 87         
 88         //构建SAX阅读器对象
 89         SAXReader reader = new SAXReader();
 90         try {
 91             //从流中获得文档对象
 92             Document doc = reader.read(in);
 93             
 94             //获得根节点
 95             Element root = doc.getRootElement();
 96             
 97             //获取根节点下的所有子节点
 98             List<Element> children = root.elements();
 99             
100             for(Element e:children){
101                 //遍历每一个节点,并按照节点名--节点值放入map中
102                 map.put(e.getName(), e.getText());
103                 System.out.println("用户发送的消息XML解析为:" + e.getName() + e.getText());
104             }
105             
106             //关闭流
107             in.close();
108             in = null;
109         } catch (DocumentException e) {
110             // TODO Auto-generated catch block
111             e.printStackTrace();
112         }
113         
114         return map;
115     }
116     
117     /**
118      * 用于扩展节点数据按照<ToUserName><![CDATA[toUser]]></ToUserName>,中间加了CDATA段
119      */
120     private static XStream xstream = new XStream(new XppDriver(){
121         public HierarchicalStreamWriter createWriter(Writer out){
122             return new PrettyPrintWriter(out){
123                 boolean cdata = true;
124                 public void startNode(String name,Class clazz){
125                     super.startNode(name,clazz);
126                 }
127                 
128                 protected void writeText(QuickWriter writer,String text){
129                     if(cdata){
130                         writer.write("<![CDATA[");
131                         writer.write(text);
132                         writer.write("]]>");
133                     }else{
134                         writer.write(text);
135                     }
136                 }
137             };
138         }
139     });
140     
141     /**
142      * 将文本消息对象转换成XML格式
143      * params:textMessage 文本消息对象
144      * return:xml
145      */
146     public static String messageToXml(TextMessage textMessage){
147         xstream.alias("xml",textMessage.getClass());
148         return xstream.toXML(textMessage);
149     }
150     
151     /**
152      * 将图片消息对象转换成XML格式
153      * params:imageMessage
154      * return:xml
155      */
156     public static String messageToXml(ImageMessage imageMessage){
157         xstream.alias("xml", imageMessage.getClass());
158         return xstream.toXML(imageMessage);
159     }
160     
161     /**
162      * 将语音消息对象转换成XML格式
163      * params:voiceMessage
164      * return:xml
165      */
166     public static String messageToXml(VoiceMessage voiceMessage){
167         xstream.alias("xml",voiceMessage.getClass());
168         return xstream.toXML(voiceMessage);
169     }
170     
171     /**
172      * 将视频消息对象转换成XML格式
173      * params:videoMessage
174      * return:xml
175      */
176     public static String messageToXml(VideoMessage videoMessage){
177         xstream.alias("xml",videoMessage.getClass());
178         return xstream.toXML(videoMessage);
179     }
180     
181     /**
182      * 将音乐消息对象转换成XML格式
183      * params:musicMessage
184      * return:xml
185      */
186     public static String messageToXml(MusicMessage musicMessage){
187         xstream.alias("xml",musicMessage.getClass());
188         return xstream.toXML(musicMessage);
189     }
190     
191     /**
192      * 将图文消息对象转换成XML格式
193      * params:newsMessage
194      * return:xml
195      */
196     public static String messageToXml(NewsMessage newsMessage){
197         xstream.alias("xml",newsMessage.getClass());
198         return xstream.toXML(newsMessage);
199     }
200 }

 

第二十四步:找到包com.wtz.util下的ProcessService.java类,修改dealRequest方法响应各种类型的消息

 1 package com.wtz.util;
 2 
 3 import java.io.IOException;
 4 import java.util.Date;
 5 import java.util.Map;
 6 
 7 import javax.servlet.http.HttpServletRequest;
 8 
 9 import com.wtz.message.response.TextMessage;
10 
11 /**
12  *     @author wangtianze QQ:864620012
13  *    @date 2017年4月19日 下午8:04:14
14  *  <p>version:1.0</p>
15  *     <p>description:核心服务类</p>
16  */
17 public class ProcessService {
18     public static String dealRequest(HttpServletRequest request){
19         //XML格式的消息数据
20         String respXml = "";
21         //默认返回的文本消息内容
22         String respContent = "未知的消息类型";
23         //调用parseXml方法解析请求消息
24         Map<String, String> requestMap;
25         try {
26             requestMap = MessageUtil.parseXml(request);
27             //发送方账号
28             String fromUserName = requestMap.get("FromUserName");
29             //开发者微信号
30             String toUserName = requestMap.get("ToUserName");
31             //消息类型
32             String MsgType = requestMap.get("MsgType");
33             
34             //回复文本消息
35             TextMessage textMessage = new TextMessage();
36             textMessage.setToUserName(fromUserName);
37             textMessage.setFromUserName(toUserName);
38             textMessage.setCreateTime(new Date().getTime());
39             textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
40             
41             if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)){
42                 respContent = "您发送的是文本消息";
43             }else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE)){
44                 respContent = "您发送的是图片消息";
45             }else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VOICE)){
46                 respContent = "您发送的是语音消息";
47             }else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VIDEO)){
48                 respContent = "您发送的是视频消息";
49             }else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LOCATION)){
50                 respContent = "您发送的是地理位置消息";
51             }else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LINK)){
52                 respContent = "您发送的是链接消息";
53             }else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)){
54                 //事件类型
55                 String eventType = requestMap.get("Event");
56                 if(eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)){
57                     respContent = "感谢您的关注";
58                 }else if(eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)){
59                     //TODO 取消订阅后用户不会再收到公众号发送的消息,因此不需要回复
60                 }else if(eventType.equals(MessageUtil.EVENT_TYPE_SCAN)){
61                     //TODO 处理扫描带参数二维码事件
62                 }else if(eventType.equals(MessageUtil.EVENT_TYPE_LOCATION)){
63                     //TODO 处理上报地理位置事件
64                 }else if(eventType.equals(MessageUtil.EVENT_TYPE_CLICK)){
65                     //TODO 处理菜单点击事件
66                 }
67             }
68             //设置文本消息的内容
69             textMessage.setContent(respContent);
70             //将文本消息对象转换成xml
71             respXml = MessageUtil.messageToXml(textMessage);
72         } catch (IOException e) {
73             // TODO Auto-generated catch block
74             e.printStackTrace();
75         }
76         
77         return respXml;
78     }
79 }

各种类型消息封装完成。

posted on 2017-04-20 17:22  wangtianze  阅读(1123)  评论(0编辑  收藏  举报

导航