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 阅读(1127) 评论(0) 编辑 收藏 举报