Java微信二次开发(三) Java微信各类型消息封装
本文实例为大家分享了java微信各种类型消息的封装,供大家参考,具体内容如下
第一步:找到com.wtz.message.response包,新建类image.java
package 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.java
package 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.java
package 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.java
package 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.java
package 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.java
package 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.java
package 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.java
package 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.java
package 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.java
package 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.java
package 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.java
package 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.java
package 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.java
package 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.java
package 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.java
package 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.java
package 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.java
package 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.java
package 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.java
package 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.java
package 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.java
package 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 block e.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); //将文本消息对象转换成xml respxml = messageutil.messagetoxml(textmessage); } catch (ioexception e) { // todo auto-generated catch block e.printstacktrace(); } return respxml; } }
各种类型消息封装完成。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: Lesson02_03 表单标签
下一篇: MySQL死锁问题分析及解决方法实例详解