微信信息回复 java,微信公众平台开发中使用Java如何实现一个消息回复功能
微信公众平台开发中使用Java如何实现一个消息回复功能
发布时间:2020-11-17 16:11:11
来源:亿速云
阅读:82
作者:Leah
本篇文章给大家分享的是有关微信公众平台开发中使用Java如何实现一个消息回复功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
(一)回复文本消息
在前面我们已经完成了对消息的分类和回复消息实体的建立,这里回复文本消息需要用到的就是我们的TextMessage,我们把回复文本消息在【文本消息】类型中给出回复!在我们做消息回复的时候需要设置消息的接收人ToUserName(openid)、消息的发送方FromUserName、消息类型MsgType、创建时间CreateTime以及消息体Content,由于我们我们的消息回复格式是需要为xml,所以最终我们需要将其装换成xml再做返回输出!
首先我们在工具类MessageUtil的代码做出部分修改和添加,实现最后版本为:
package com.cuiyongzhi.wechat.util;
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.D ocument;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import com.cuiyongzhi.wechat.message.resp.Article;
import com.cuiyongzhi.wechat.message.resp.ImageMessage;
import com.cuiyongzhi.wechat.message.resp.MusicMessage;
import com.cuiyongzhi.wechat.message.resp.NewsMessage;
import com.cuiyongzhi.wechat.message.resp.TextMessage;
import com.cuiyongzhi.wechat.message.resp.VideoMessage;
import com.cuiyongzhi.wechat.message.resp.VoiceMessage;
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;
/**
* ClassName: MessageUtil
*
* @Description: 消息工具类
* @author dapengniao
* @date 2016年3月7日 上午10:05:04
*/
public class MessageUtil {
/**
* 返回消息类型:文本
*/
public static final String RESP_MESSAGE_TYPE_TEXT = "text";
/**
* 返回消息类型:音乐
*/
public static final String RESP_MESSAGE_TYPE_MUSIC = "music";
/**
* 返回消息类型:图文
*/
public static final String RESP_MESSAGE_TYPE_NEWS = "news";
/**
* 返回消息类型:图片
*/
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 REQ_MESSAGE_TYPE_TEXT = "text";
/**
* 请求消息类型:图片
*/
public static final String REQ_MESSAGE_TYPE_IMAGE = "image";
/**
* 请求消息类型:链接
*/
public static final String REQ_MESSAGE_TYPE_LINK = "link";
/**
* 请求消息类型:地理位置
*/
public static final String REQ_MESSAGE_TYPE_LOCATION = "location";
/**
* 请求消息类型:音频
*/
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_EVENT = "event";
/**
* 事件类型:subscribe(订阅)
*/
public static final String EVENT_TYPE_SUBSCRIBE = "subscribe";
/**
* 事件类型:unsubscribe(取消订阅)
*/
public static final String EVENT_TYPE_UNSUBSCRIBE = "unsubscribe";
/**
* 事件类型:CLICK(自定义菜单点击事件)
*/
public static final String EVENT_TYPE_CLICK = "CLICK";
/**
* 事件类型:VIEW(自定义菜单URl视图)
*/
public static final String EVENT_TYPE_VIEW = "VIEW";
/**
* 事件类型:LOCATION(上报地理位置事件)
*/
public static final String EVENT_TYPE_LOCATION = "LOCATION";
/**
* 事件类型:LOCATION(上报地理位置事件)
*/
public static final String EVENT_TYPE_SCAN = "SCAN";
/**
* @Description: 解析微信发来的请求(XML)
* @param @param request
* @param @return
* @param @throws Exception
* @author dapengniao
* @date 2016年3月7日 上午10:04:02
*/
@SuppressWarnings("unchecked")
public static Map parseXml(HttpServletRequest request)
throws Exception {
// 将解析结果存储在HashMap中
Map map = new HashMap();
// 从request中取得输入流
InputStream inputStream = request.getInputStream();
// 读取输入流
SAXReader reader = new SAXReader();
Document document = reader.read(inputStream);
// 得到xml根元素
Element root = document.getRootElement();
// 得到根元素的所有子节点
List elementList = root.elements();
// 遍历所有子节点
for (Element e : elementList)
map.put(e.getName(), e.getText());
// 释放资源
inputStream.close();
inputStream = null;
return map;
}
/**
* @Description: 文本消息对象转换成xml
* @param @param textMessage
* @param @return
* @author dapengniao
* @date 2016年3月8日 下午4:13:22
*/
public static String textMessageToXml(TextMessage textMessage) {
xstream.alias("xml", textMessage.getClass());
return xstream.toXML(textMessage);
}
/**
* @Description: 图文消息对象转换成xml
* @param @param newsMessage
* @param @return
* @author dapengniao
* @date 2016年3月8日 下午4:14:09
*/
public static String newsMessageToXml(NewsMessage newsMessage) {
xstream.alias("xml", newsMessage.getClass());
xstream.alias("item", new Article().getClass());
return xstream.toXML(newsMessage);
}
/**
* @Description: 图片消息对象转换成xml
* @param @param imageMessage
* @param @return
* @author dapengniao
* @date 2016年3月9日 上午9:25:51
*/
public static String imageMessageToXml(ImageMessage imageMessage) {
xstream.alias("xml", imageMessage.getClass());
return xstream.toXML(imageMessage);
}
/**
* @Description: 语音消息对象转换成xml
* @param @param voiceMessage
* @param @return
* @author dapengniao
* @date 2016年3月9日 上午9:27:26
*/
public static String voiceMessageToXml(VoiceMessage voiceMessage) {
xstream.alias("xml", voiceMessage.getClass());
return xstream.toXML(voiceMessage);
}
/**
* @Description: 视频消息对象转换成xml
* @param @param videoMessage
* @param @return
* @author dapengniao
* @date 2016年3月9日 上午9:31:09
*/
public static String videoMessageToXml(VideoMessage videoMessage) {
xstream.alias("xml", videoMessage.getClass());
return xstream.toXML(videoMessage);
}
/**
* @Description: 音乐消息对象转换成xml
* @param @param musicMessage
* @param @return
* @author dapengniao
* @date 2016年3月8日 下午4:13:36
*/
public static String musicMessageToXml(MusicMessage musicMessage) {
xstream.alias("xml", musicMessage.getClass());
return xstream.toXML(musicMessage);
}
/**
* 对象到xml的处理
*/
private static XStream xstream = new XStream(new XppDriver() {
public HierarchicalStreamWriter createWriter(Writer out) {
return new PrettyPrintWriter(out) {
// 对所有xml节点的转换都增加CDATA标记
boolean cdata = true;
@SuppressWarnings("rawtypes")
public void startNode(String name, Class clazz) {
super.startNode(name, clazz);
}
protected void writeText(QuickWriter writer, String text) {
if (cdata) {
writer.write("
writer.write(text);
writer.write("]]>");
} else {
writer.write(text);
}
}
};
}
});
}
我们回复文本消息的简单实现:修改MsgDispatcher,在消息分类为【文本消息】中加入如下代码:
String openid=map.get("FromUserName"); //用户openid
String mpid=map.get("ToUserName"); //公众号原始ID
//普通文本消息
TextMessage txtmsg=new TextMessage();
txtmsg.setToUserName(openid);
txtmsg.setFromUserName(mpid);
txtmsg.setCreateTime(new Date().getTime());
txtmsg.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
if (map.get("MsgType").equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) { // 文本消息
txtmsg.setContent("你好,这里是崔用志个人账号!");
return MessageUtil.textMessageToXml(txtmsg);
}
启动项目,当我们发送任何文本消息后我们可以看到我们的回复内容,如图:
(二)图文消息回复
图文消息的回复和文本消息的实现模式是一样的,只不过对应消息体的字段有所区别而已,这里为了和文本消息能有所区分我在【图片消息】实现图文消息的回复,修改MsgDispatcher:
//对图文消息
NewsMessage newmsg=new NewsMessage();
newmsg.setToUserName(openid);
newmsg.setFromUserName(mpid);
newmsg.setCreateTime(new Date().getTime());
newmsg.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_NEWS);
if (map.get("MsgType").equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE)) { // 图片消息
System.out.println("==============这是图片消息!");
Article article=new Article();
article.setDescription("这是图文消息1"); //图文消息的描述
article.setPicUrl("http://res.cuiyongzhi.com/2016/03/201603086749_6850.png"); //图文消息图片地址
article.setTitle("图文消息1"); //图文消息标题
article.setUrl("http://www.cuiyongzhi.com"); //图文url链接
List list=new ArrayList();
list.add(article); //这里发送的是单图文,如果需要发送多图文则在这里list中加入多个Article即可!
newmsg.setArticleCount(list.size());
newmsg.setArticles(list);
return MessageUtil.newsMessageToXml(newmsg);
}
实现结果如下图所示:
在整个的谱图消息发送的过程中没有任何项目结构的变化,只是对文件内容作了简单代码增加和修改,下一篇将讲述【微信开发中的token生成】以方便后面多媒体消息发送的讲解,感谢你的查阅,如有疑问获需源码可留言!
以上就是微信公众平台开发中使用Java如何实现一个消息回复功能,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。
微信信息回复 java,微信公众平台开发中使用Java如何实现一个消息回复功能相关推荐
- java读取微信消息_微信公众平台开发中使用Java如何实现获取用户的信息
微信公众平台开发中使用Java如何实现获取用户的信息 发布时间:2020-11-18 15:09:28 来源:亿速云 阅读:93 作者:Leah 本篇文章为大家展示了微信公众平台开发中使用Java如何 ...
- 微信公众平台开发教程(二) 基本原理及消息接口
微信公众平台开发教程(二) 基本原理及消息接口 一.基本原理 在开始做之前,大家可能对这个很感兴趣,但是又比较茫然.是不是很复杂?很难学啊? 其实恰恰相反,很简单.为了打消大家的顾虑,先简单介绍了微信 ...
- 微信公众平台开发中提示“该公众号提供的服务出现故障”问题解决
问题描述: 在处理室内数据推送的时候,服务器能正常接收并处理请求,,客户端也能正常接收消息 但是在每次收到消息后,微信界面会出现,"该公众号提供的服务出现故障"字样. 解决思路一: ...
- PHP7.0微信公众平台开发4: 实例一:接收普通消息和接收事件推送
PHP7.0微信公众平台开发4: 实例一:接收普通消息和接收事件推送 1. API接口的声明 2. PHP脚本代码 3. 运行结果 由于消息类型有多钟,本文中,"接收普通消息"我以 ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十八):Web代理功能
在Senparc.Weixin.dll v4.5.7版本开始,我们提供了Web代理功能,以方便在受限制的局域网内的应用可以顺利调用接口. 有关的修改都在Senparc.Weixin/Utilities ...
- 微信公众平台开发中-SAE不支持XStream框架的解决方案
问题描述 最近几天(2014年8月20日之后),突然有不少网友反应,柳峰博客中的微信公众平台开发代码在SAE上运行会报错,或者是能正常部署,但向公众号发消息没反应.以前也有一些初学者质疑过我博客中的代 ...
- 微信公众平台开发(PHP)(七) 聊天机器人功能开发
一.简介 上一篇文章介绍了微信公众平台翻译功能的开发,实现了中.英.日语言互译,在实际生活中也能使用到.在接下来的这一篇文章中,我们将完成一个比较有趣的功能,那就是聊天机器人,可以在你无聊的时候陪你聊 ...
- 微信公众平台开发中重复响应问题
问题描述: 在项目开发中 我们有些功能是需要查询远程数据库或者是获取设备端上传数据的,这时候如果远程服务器响应不及时,或者设备端响应延迟高,微信公众号就会出现该"该微信公众号出现故障&quo ...
- 易信公众平台开发从入门到精通之接收普通消息
对公众号来说,这是一种新的接收用户发送消息的方式.公众号不需要再登录平台,就可以接收用户发送的文本,图片,语音,视频,地理位置等消息 当普通易信用户向公众账号发消息时,易信服务器将POST消息的XML ...
最新文章
- 占用栅格地图算法的理解
- 远程桌面linux服务器配置,linux平台下远程桌面服务器的安装和设置
- wxss 点击样式_小程序05-样式WXSS(示例代码)
- MIT教授Tomaso Poggio演讲与专访:智能背后的科学与工程 | 腾讯AI Lab学术论坛
- 算法导论一个让人很不爽的地方
- 灰鸽子木马的原理和清除方法
- BZOJ3133[Baltic2013]ballmachine
- fgets阻塞 stdin 退出_来自stdin问题的fgets[c]
- HTML页面把list转成array,c# – 将Collection转换为Array或List的快速方法?
- [JavaWeb基础] 015.Struts2 表单验证框架
- 鲲鹏基础软件开发赛道openLooKeng赛题火热报名中,数十万大奖等您来收割
- 39-如何共享数据?
- ES6-异步async await学习
- 关于AE中出现 “对 COM 组件的调用返回了错误 HRESULT E_FAIL” 错误
- 安川服务器显示fn001,安川伺服驱动器功能参数设置
- VS2012+ArcGIS Engine10.2安装教程
- 使用 docker-pan 一键搭建可离线磁力种子的私有云盘
- 怎么解决Myeclipse导入项目中文乱码?
- PDP Context 激活流程(UE发起)
- GeoPandas库入门教程
热门文章
- 哈希记账小工具(wordpress、woocommerce、kafka、frp分布式集成)
- WebMatrix 简介
- IPD思想指导下的企业研发管理成熟度演进模型
- webpack代理 host文件 微信小程序公众号开发必配
- 关于使用GPS天线需要注意的事项
- 网易严选上半年开设线下店?说好不学无印良品的
- oracle exception others,Oracle PL/SQL之EXCEPTION -- WHEN OTHERS THEN
- 计算机报录比多少算高,报录比多少合适?怎么算好考?我来告诉你答案
- 【Teradata】windows部署安装Teradata数据库(附虚拟机扩展包)
- Python开发的Web在线学习教育培训网课系统