这篇文章主要为大家详细介绍了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;
}
}
各种类型消息封装完成。
【相关推荐】
1. 微信公众号平台源码 下载
2. 微信投票源码
以上就是微信二次开发之各类型消息封装的详细内容。
