重庆小潘seo博客

当前位置:首页 > 重庆网络营销 > 小潘杂谈 >

小潘杂谈

微信二次开发之各类型消息封装

时间:2020-09-12 02:00:06 作者:重庆seo小潘 来源:
这篇文章主要为大家详细介绍了Java微信二次开发第三篇,Java微信各类型消息封装,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了Java微信各种类型消息的封装,供大家参考,具体内容如下 第一步:找到com.wtz.message.response包,

这篇文章主要为大家详细介绍了Java微信二次开发第三篇,Java微信各类型消息封装,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Java微信各种类型消息的封装,供大家参考,具体内容如下

第一步:找到com.wtz.message.response包,新建类Image.javapackage com.wtz.message.response;/** * @author wangtianze QQ:864620012 * @date 2017年4月20日 上午8:38:37 * version:1.0 * description:图片的实体类 */public class Image { //图片媒体ID private String MediaId;public String getMediaId() { return MediaId; } public void setMediaId(String mediaId) { MediaId = mediaId; }}第二步:找到com.wtz.message.response包,新建类ImageMessage.javapackage com.wtz.message.response;/** * @author wangtianze QQ:864620012 * @date 2017年4月20日 上午8:49:57 * version:1.0 * description:图片消息类 */public class ImageMessage extends BaseMessage { //图片对象 private Image image; public Image getImage() { return image; } public void setImage(Image image) { this.image = image; }}第三步:找到com.wtz.message.response包,新建类Video.javapackage com.wtz.message.response;/** * @author wangtianze QQ:864620012 * @date 2017年4月20日 上午9:02:14 * version:1.0 * description:视频的实体类 */public class Video { //视频消息的媒体ID private String MediaId; //视频消息的标题 private String Title; //视频消息的描述 private String Description;public String getMediaId() { return MediaId; } public void setMediaId(String mediaId) { MediaId = mediaId; } public String getTitle() { return Title; } public void setTitle(String title) { Title = title; } public String getDescription() { return Description; } public void setDescription(String description) { Description = description; }}第四步:找到com.wtz.message.response包,新建类VideoMessage.javapackage com.wtz.message.response;/** * @author wangtianze QQ:864620012 * @date 2017年4月20日 上午9:10:14 * version:1.0 * description:视频消息类 */public class VideoMessage extends BaseMessage{ //视频对象 private Video video; public Video getVideo() { return video; } public void setVideo(Video video) { this.video = video; }}第五步:找到com.wtz.message.response包,新建类Voice.javapackage com.wtz.message.response;/** * @author wangtianze QQ:864620012 * @date 2017年4月20日 上午9:21:47 * version:1.0 * description:语音消息实体类 */public class Voice { //语音媒体编号 private String MediaId;public String getMediaId() { return MediaId; } public void setMediaId(String mediaId) { MediaId = mediaId; }}第六步:找到com.wtz.message.response包,新建类VoiceMessage.javapackage com.wtz.message.response;/** * @author wangtianze QQ:864620012 * @date 2017年4月20日 上午9:44:58 * version:1.0</p> * description:语音消息类 */public class VoiceMessage extends BaseMessage{ //语音对象 private Voice voice; public Voice getVoice() { return voice; } public void setVoice(Voice voice) { this.voice = voice; }}第七步:找到com.wtz.message.response包,新建类Music.javapackage com.wtz.message.response;/** * @author wangtianze QQ:864620012 * @date 2017年4月20日 上午9:48:11 * version:1.0 * description:音乐消息实体类 */public class Music { //音乐标题 private String Title; //音乐描述 private String Description; //音乐链接 private String MusicUrl; //高品质音乐链接 private String HQMusicUrl; //缩略图的媒体ID private String ThumbMediaId;public String getTitle() { return Title; } public void setTitle(String title) { Title = title; } public String getDescription() { return Description; } public void setDescription(String description) { Description = description; } public String getMusicUrl() { return MusicUrl; } public void setMusicUrl(String musicUrl) { MusicUrl = musicUrl; } public String getHQMusicUrl() { return HQMusicUrl; } public void setHQMusicUrl(String hQMusicUrl) { HQMusicUrl = hQMusicUrl; } public String getThumbMediaId() { return ThumbMediaId; } public void setThumbMediaId(String thumbMediaId) { ThumbMediaId = thumbMediaId; }}第八步:找到com.wtz.message.response包,新建类MusicMessage.javapackage com.wtz.message.response;/** * @author wangtianze QQ:864620012 * @date 2017年4月20日 上午9:58:21 * <p>version:1.0</p> * <p>description:音乐消息类</p> */public class MusicMessage extends BaseMessage{ //音乐对象 private Music music; public Music getMusic() { return music; } public void setMusic(Music music) { this.music = music; }}第九步:找到com.wtz.message.response包,新建类Article.javapackage com.wtz.message.response;/** * @author wangtianze QQ:864620012 * @date 2017年4月20日 上午10:05:29 * <p>version:1.0</p> * <p>description:图文实体类</p> */public class Article { //图文标题 private String Title; //图文描述 private String Description; //图片链接,支持JPG,PNG格式,较好的效果为大图 private String PicUrl; //图文消息跳转链接 private String Url;public String getTitle() { return Title; } public void setTitle(String title) { Title = title; } public String getDescription() { return Description; } public void setDescription(String description) { Description = description; } public String getPicUrl() { return PicUrl; } public void setPicUrl(String picUrl) { PicUrl = picUrl; } public String getUrl() { return Url; } public void setUrl(String url) { Url = url; }}第十步:找到com.wtz.message.response包,新建类NewsMessage.javapackage com.wtz.message.response;import java.util.List;/** * @author wangtianze QQ:864620012 * @date 2017年4月20日 上午10:16:22 * <p>version:1.0</p> * <p>description:图文消息类</p> */public class NewsMessage extends BaseMessage{ //图文条数 private int ArticleCount; //多条图文消息信息,默认第一个item为大图 private List<Article> Articles;public int getArticleCount() { return ArticleCount; } public void setArticleCount(int articleCount) { ArticleCount = articleCount; } public List<Article> getArticles() { return Articles; } public void setArticles(List<Article> articles) { Articles = articles; }}第十一步:新建包com.wtz.message.request,新建类BaseMessage.javapackage com.wtz.message.request;/** * @author wangtianze QQ:864620012 * @date 2017年4月20日 上午10:53:23 * <p>version:1.0</p> * <p>description:请求消息基类(普通用户->公众账号)</p> * <p>站在服务器端的视角:接收信息</p> */public class BaseMessage { //开发者微信号 private String ToUserName; //发送方账号(一个OpenId) private String FromUserName; //消息创建时间(整型) private long CreateTime; //消息类型 private String MsgType; //消息ID,64位整型 private long MsgId;public String getToUserName() { return ToUserName; } public void setToUserName(String toUserName) { ToUserName = toUserName; } public String getFromUserName() { return FromUserName; } public void setFromUserName(String fromUserName) { FromUserName = fromUserName; } public long getCreateTime() { return CreateTime; } public void setCreateTime(long createTime) { CreateTime = createTime; } public String getMsgType() { return MsgType; } public void setMsgType(String msgType) { MsgType = msgType; } public long getMsgId() { return MsgId; } public void setMsgId(long msgId) { MsgId = msgId; }}第十二步:找到com.wtz.message.request包,新建类TextMessage.javapackage com.wtz.message.request;/** * @author wangtianze QQ:864620012 * @date 2017年4月20日 上午11:04:35 * <p>version:1.0</p> * <p>description:文本消息</p> */public class TextMessage extends BaseMessage{ //消息内容 private String Content; public String getContent() { return Content; } public void setContent(String content) { Content = content; }}第十三步:找到com.wtz.message.request包,新建类ImageMessage.javapackage com.wtz.message.request;/** * @author wangtianze QQ:864620012 * @date 2017年4月20日 上午11:20:50 * <p>version:1.0</p> * <p>description:图片消息</p> */public class ImageMessage extends BaseMessage{ //图片链接 private String PicUrl; //图片消息媒体ID private String MediaId;public String getPicUrl() { return PicUrl; } public void setPicUrl(String picUrl) { PicUrl = picUrl; } public String getMediaId() { return MediaId; } public void setMediaId(String mediaId) { MediaId = mediaId; }}第十四步:找到com.wtz.message.request包,新建类VoiceMessage.javapackage com.wtz.message.request;/** * @author wangtianze QQ:864620012 * @date 2017年4月20日 上午11:27:40 * <p>version:1.0</p> * <p>description:语音消息类</p> */public class VoiceMessage extends BaseMessage { //媒体ID private String MediaId; //语音格式 private String Format; public String getMediaId() { return MediaId; } public void setMediaId(String mediaId) { MediaId = mediaId; } public String getFormat() { return Format; } public void setFormat(String format) { Format = format; }}第十五步:找到com.wtz.message.request包,新建类VideoMessage.javapackage com.wtz.message.request;/** * @author wangtianze QQ:864620012 * @date 2017年4月20日 下午3:28:03 * <p>version:1.0</p> * <p>description:视频消息类</p> */public class VideoMessage extends BaseMessage { //视频消息媒体ID private String MediaId; //视频消息缩略图的媒体ID private String ThumbMediaId;public String getMediaId() { return MediaId; } public void setMediaId(String mediaId) { MediaId = mediaId; } public String getThumbMediaId() { return ThumbMediaId; } public void setThumbMediaId(String thumbMediaId) { ThumbMediaId = thumbMediaId; }}第十六步:找到com.wtz.message.request包,新建类LocatonMessage.javapackage com.wtz.message.request;/** * @author wangtianze QQ:864620012 * @date 2017年4月20日 下午3:27:40 * <p>version:1.0</p> * <p>description:地理位置消息类</p> */public class LocationMessage extends BaseMessage { //地理位置纬度 private String Location_X; //地理位置经度 private String Location_Y; //地图缩放大小 private String Scale; //地理位置信息 private String Label;public String getLocation_X() { return Location_X; } public void setLocation_X(String location_X) { Location_X = location_X; } public String getLocation_Y() { return Location_Y; } public void setLocation_Y(String location_Y) { Location_Y = location_Y; } public String getScale() { return Scale; } public void setScale(String scale) { Scale = scale; } public String getLabel() { return Label; } public void setLabel(String label) { Label = label; }}第十七步:找到com.wtz.message.request包,新建类LinkMessage.javapackage com.wtz.message.request;/** * @author wangtianze QQ:864620012 * @date 2017年4月20日 下午1:58:04 * <p>version:1.0</p> * <p>description:链接消息类</p> */public class LinkMessage extends BaseMessage { //消息标题 private String Title; //消息描述 private String Description; //消息链接 private String Url;public String getTitle() { return Title; } public void setTitle(String title) { Title = title; } public String getDescription() { return Description; } public void setDescription(String description) { Description = description; } public String getUrl() { return Url; } public void setUrl(String url) { Url = url; }}第十八步:新建包com.wtz.message.event,新建类BaseEventMessage.javapackage com.wtz.message.event;/** * @author wangtianze QQ:864620012 * @date 2017年4月20日 上午10:44:09 * <p>version:1.0</p> * <p>description:基础事件消息类</p> */public class BaseEventMessage { //开发者微信号 private String ToUserName; //发送方账号(一个OpenID) private String FromUserName; //消息创建时间(整型) private long CreateTime; //消息类型 private String MsgType; //事件类型 private String Event;public String getToUserName() { return ToUserName; } public void setToUserName(String toUserName) { ToUserName = toUserName; } public String getFromUserName() { return FromUserName; } public void setFromUserName(String fromUserName) { FromUserName = fromUserName; } public long getCreateTime() { return CreateTime; } public void setCreateTime(long createTime) { CreateTime = createTime; } public String getMsgType() { return MsgType; } public void setMsgType(String msgType) { MsgType = msgType; } public String getEvent() { return Event; } public void setEvent(String event) { Event = event; }}第十九步:找到包com.wtz.message.event,新建类QRCodeEventMessage.javapackage com.wtz.message.event;/** * @author wangtianze QQ:864620012 * @date 2017年4月20日 下午3:24:30 * <p>version:1.0</p> * <p>description:扫描带参数二维码事件类</p> */public class QRCodeEventMessage extends BaseEventMessage{ //事件Key值 private String EventKey; //用于换取二维码图片 private String Ticket;public String getEventKey() { return EventKey; } public void setEventKey(String eventKey) { EventKey = eventKey; } public String getTicket() { return Ticket; } public void setTicket(String ticket) { Ticket = ticket; } }第二十步:找到包com.wtz.message.event,新建类SubscribeEventMessage.javapackage com.wtz.message.event;/** * @author wangtianze QQ:864620012 * @date 2017年4月20日 下午3:27:11 * <p>version:1.0</p> * <p>description:关注/取消关注事件类</p> */public class SubscribeEventMessage extends BaseEventMessage{ }第二十一步:找到包com.wtz.message.event,新建类MenuEventMessage.javapackage com.wtz.message.event;/** * @author wangtianze QQ:864620012 * @date 2017年4月20日 下午3:32:42 * <p>version:1.0</p> * <p>description:自定义菜单事件类</p> */public class MenuEventMessage extends BaseEventMessage{ //事件Key值,与自定义菜单接口中Key值对应 private String EventKey; public String getEventKey() { return EventKey; } public void setEventKey(String eventKey) { EventKey = eventKey; }}第二十二步:找到包com.wtz.message.event,新建类LocationEventMessage.javapackage com.wtz.message.event;/** * @author wangtianze QQ:864620012 * @date 2017年4月20日 下午3:37:50 * <p>version:1.0</p> * <p>description:上报地理位置事件类</p> */public class LocationEventMessage extends BaseEventMessage{ //地理位置纬度 private String Latitude; //地理位置经度 private String Longitude; //地理位置精度 private String Precision;public String getLatitude() { return Latitude; } public void setLatitude(String latitude) { Latitude = latitude; } public String getLongitude() { return Longitude; } public void setLongitude(String longitude) { Longitude = longitude; } public String getPrecision() { return Precision; } public void setPrecision(String precision) { Precision = precision; }}第二十三步:找到包com.wtz.util下的MessageUtil.java类,修改这个类添加请求和回复的各种消息类型,事件类型,添加将各种类型消息转换成XML格式的方法package com.wtz.util;import java.io.IOException;import java.io.InputStream;import java.io.Writer;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;import com.thoughtworks.xstream.XStream;import com.thoughtworks.xstream.core.util.QuickWriter;import com.thoughtworks.xstream.io.HierarchicalStreamWriter;import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;import com.thoughtworks.xstream.io.xml.XppDriver;import com.wtz.message.response.ImageMessage;import com.wtz.message.response.MusicMessage;import com.wtz.message.response.NewsMessage;import com.wtz.message.response.TextMessage;import com.wtz.message.response.VideoMessage;import com.wtz.message.response.VoiceMessage;/** * @author wangtianze QQ:864620012 * @date 2017年4月19日 下午3:29:58 * <p>version:1.0</p> * <p>description:消息处理工具类</p> */public class MessageUtil { //请求消息类型:文本 public static final String REQ_MESSAGE_TYPE_TEXT = "text"; //请求消息类型:图片 public static final String REQ_MESSAGE_TYPE_IMAGE = "image"; //请求消息类型:语音 public static final String REQ_MESSAGE_TYPE_VOICE = "voice"; //请求消息类型:视频 public static final String REQ_MESSAGE_TYPE_VIDEO = "video"; //请求消息类型:地理位置 public static final String REQ_MESSAGE_TYPE_LOCATION = "location"; //请求消息类型:链接 public static final String REQ_MESSAGE_TYPE_LINK = "link"; //请求消息类型:事件推送 public static final String REQ_MESSAGE_TYPE_EVENT = "event";//---------------------------------------------------------------//事件类型:subscribe(订阅) public static final String EVENT_TYPE_SUBSCRIBE = "subscribe"; //事件类型:unsubscribe(取消订阅) public static final String EVENT_TYPE_UNSUBSCRIBE = "unsubscribe"; //事件类型:scan(用户已关注时的扫描带参数的二维码) public static final String EVENT_TYPE_SCAN = "scan"; //事件类型:LOCATION(上报地理位置) public static final String EVENT_TYPE_LOCATION = "LOCATION"; //事件类型:CLICK(自定义菜单) public static final String EVENT_TYPE_CLICK = "CLICK";//---------------------------------------------------------------//响应消息类型:文本 public static final String RESP_MESSAGE_TYPE_TEXT = "text"; //响应详细类型:图片 public static final String RESP_MESSAGE_TYPE_IMAGE = "image"; //响应消息类型:语音 public static final String RESP_MESSAGE_TYPE_VOICE = "voice"; //响应消息类型:视频 public static final String RESP_MESSAGE_TYPE_VIDEO = "video"; //响应详细类型:音乐 public static final String RESP_MESSAGE_TYPE_MUSIC = "music"; //响应消息类型:图文 public static final String RESP_MESSAGE_TYPE_NEWS = "news";//---------------------------------------------------------------//从流中解析出每个节点的内容 public static Map<String,String> parseXml(HttpServletRequest request) throws IOException{ Map<String,String> map = new HashMap<String,String>();//从输入流中获取流对象 InputStream in = request.getInputStream();//构建SAX阅读器对象 SAXReader reader = new SAXReader(); try {//从流中获得文档对象Document doc = reader.read(in);//获得根节点Element root = doc.getRootElement();//获取根节点下的所有子节点List<Element> children = root.elements();for(Element e:children){//遍历每一个节点,并按照节点名--节点值放入map中map.put(e.getName(), e.getText());System.out.println("用户发送的消息XML解析为:" + e.getName() + e.getText());}//关闭流in.close();in = null; } catch (DocumentException e) {// TODO Auto-generated catch blocke.printStackTrace(); }return map; }/** * 用于扩展节点数据按照<ToUserName><![CDATA[toUser]]></ToUserName>,中间加了CDATA段 */ private static XStream xstream = new XStream(new XppDriver(){ public HierarchicalStreamWriter createWriter(Writer out){return new PrettyPrintWriter(out){boolean cdata = true;public void startNode(String name,Class clazz){super.startNode(name,clazz);}protected void writeText(QuickWriter writer,String text){if(cdata){writer.write("<![CDATA[");writer.write(text);writer.write("]]>");}else{writer.write(text);}}}; } });/** * 将文本消息对象转换成XML格式 * params:textMessage 文本消息对象 * return:xml */ public static String messageToXml(TextMessage textMessage){ xstream.alias("xml",textMessage.getClass()); return xstream.toXML(textMessage); }/** * 将图片消息对象转换成XML格式 * params:imageMessage * return:xml */ public static String messageToXml(ImageMessage imageMessage){ xstream.alias("xml", imageMessage.getClass()); return xstream.toXML(imageMessage); }/** * 将语音消息对象转换成XML格式 * params:voiceMessage * return:xml */ public static String messageToXml(VoiceMessage voiceMessage){ xstream.alias("xml",voiceMessage.getClass()); return xstream.toXML(voiceMessage); }/** * 将视频消息对象转换成XML格式 * params:videoMessage * return:xml */ public static String messageToXml(VideoMessage videoMessage){ xstream.alias("xml",videoMessage.getClass()); return xstream.toXML(videoMessage); }/** * 将音乐消息对象转换成XML格式 * params:musicMessage * return:xml */ public static String messageToXml(MusicMessage musicMessage){ xstream.alias("xml",musicMessage.getClass()); return xstream.toXML(musicMessage); }/** * 将图文消息对象转换成XML格式 * params:newsMessage * return:xml */ public static String messageToXml(NewsMessage newsMessage){ xstream.alias("xml",newsMessage.getClass()); return xstream.toXML(newsMessage); }}第二十四步:找到包com.wtz.util下的ProcessService.java类,修改dealRequest方法响应各种类型的消息package com.wtz.util;import java.io.IOException;import java.util.Date;import java.util.Map;import javax.servlet.http.HttpServletRequest;import com.wtz.message.response.TextMessage;/** * @author wangtianze QQ:864620012 * @date 2017年4月19日 下午8:04:14 * <p>version:1.0</p> * <p>description:核心服务类</p> */public class ProcessService { public static String dealRequest(HttpServletRequest request){ //XML格式的消息数据 String respXml = ""; //默认返回的文本消息内容 String respContent = "未知的消息类型"; //调用parseXml方法解析请求消息 Map<String, String> requestMap; try {requestMap = MessageUtil.parseXml(request);//发送方账号String fromUserName = requestMap.get("FromUserName");//开发者微信号String toUserName = requestMap.get("ToUserName");//消息类型String MsgType = requestMap.get("MsgType");//回复文本消息TextMessage textMessage = new TextMessage();textMessage.setToUserName(fromUserName);textMessage.setFromUserName(toUserName);textMessage.setCreateTime(new Date().getTime());textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)){respContent = "您发送的是文本消息";}else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE)){respContent = "您发送的是图片消息";}else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VOICE)){respContent = "您发送的是语音消息";}else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VIDEO)){respContent = "您发送的是视频消息";}else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LOCATION)){respContent = "您发送的是地理位置消息";}else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LINK)){respContent = "您发送的是链接消息";}else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)){//事件类型String eventType = requestMap.get("Event");if(eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)){respContent = "感谢您的关注";}else if(eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)){//TODO 取消订阅后用户不会再收到公众号发送的消息,因此不需要回复}else if(eventType.equals(MessageUtil.EVENT_TYPE_SCAN)){//TODO 处理扫描带参数二维码事件}else if(eventType.equals(MessageUtil.EVENT_TYPE_LOCATION)){//TODO 处理上报地理位置事件}else if(eventType.equals(MessageUtil.EVENT_TYPE_CLICK)){//TODO 处理菜单点击事件}}//设置文本消息的内容textMessage.setContent(respContent);//将文本消息对象转换成xmlrespXml = MessageUtil.messageToXml(textMessage); } catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace(); }return respXml; }}各种类型消息封装完成。

【相关推荐】

1. 微信公众号平台源码 下载

2. 微信投票源码以上就是微信二次开发之各类型消息封装的详细内容,更多请关注小潘博客其它相关文章!