微信公众平台开发中使用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如何实现一个消息回复功能相关推荐

  1. java读取微信消息_微信公众平台开发中使用Java如何实现获取用户的信息

    微信公众平台开发中使用Java如何实现获取用户的信息 发布时间:2020-11-18 15:09:28 来源:亿速云 阅读:93 作者:Leah 本篇文章为大家展示了微信公众平台开发中使用Java如何 ...

  2. 微信公众平台开发教程(二) 基本原理及消息接口

    微信公众平台开发教程(二) 基本原理及消息接口 一.基本原理 在开始做之前,大家可能对这个很感兴趣,但是又比较茫然.是不是很复杂?很难学啊? 其实恰恰相反,很简单.为了打消大家的顾虑,先简单介绍了微信 ...

  3. 微信公众平台开发中提示“该公众号提供的服务出现故障”问题解决

    问题描述: 在处理室内数据推送的时候,服务器能正常接收并处理请求,,客户端也能正常接收消息 但是在每次收到消息后,微信界面会出现,"该公众号提供的服务出现故障"字样. 解决思路一: ...

  4. PHP7.0微信公众平台开发4: 实例一:接收普通消息和接收事件推送

    PHP7.0微信公众平台开发4: 实例一:接收普通消息和接收事件推送 1. API接口的声明 2. PHP脚本代码 3. 运行结果 由于消息类型有多钟,本文中,"接收普通消息"我以 ...

  5. Senparc.Weixin.MP SDK 微信公众平台开发教程(十八):Web代理功能

    在Senparc.Weixin.dll v4.5.7版本开始,我们提供了Web代理功能,以方便在受限制的局域网内的应用可以顺利调用接口. 有关的修改都在Senparc.Weixin/Utilities ...

  6. 微信公众平台开发中-SAE不支持XStream框架的解决方案

    问题描述 最近几天(2014年8月20日之后),突然有不少网友反应,柳峰博客中的微信公众平台开发代码在SAE上运行会报错,或者是能正常部署,但向公众号发消息没反应.以前也有一些初学者质疑过我博客中的代 ...

  7. 微信公众平台开发(PHP)(七) 聊天机器人功能开发

    一.简介 上一篇文章介绍了微信公众平台翻译功能的开发,实现了中.英.日语言互译,在实际生活中也能使用到.在接下来的这一篇文章中,我们将完成一个比较有趣的功能,那就是聊天机器人,可以在你无聊的时候陪你聊 ...

  8. 微信公众平台开发中重复响应问题

    问题描述: 在项目开发中 我们有些功能是需要查询远程数据库或者是获取设备端上传数据的,这时候如果远程服务器响应不及时,或者设备端响应延迟高,微信公众号就会出现该"该微信公众号出现故障&quo ...

  9. 易信公众平台开发从入门到精通之接收普通消息

    对公众号来说,这是一种新的接收用户发送消息的方式.公众号不需要再登录平台,就可以接收用户发送的文本,图片,语音,视频,地理位置等消息 当普通易信用户向公众账号发消息时,易信服务器将POST消息的XML ...

最新文章

  1. 占用栅格地图算法的理解
  2. 远程桌面linux服务器配置,linux平台下远程桌面服务器的安装和设置
  3. wxss 点击样式_小程序05-样式WXSS(示例代码)
  4. MIT教授Tomaso Poggio演讲与专访:智能背后的科学与工程 | 腾讯AI Lab学术论坛
  5. 算法导论一个让人很不爽的地方
  6. 灰鸽子木马的原理和清除方法
  7. BZOJ3133[Baltic2013]ballmachine
  8. fgets阻塞 stdin 退出_来自stdin问题的fgets[c]
  9. HTML页面把list转成array,c# – 将Collection转换为Array或List的快速方法?
  10. [JavaWeb基础] 015.Struts2 表单验证框架
  11. 鲲鹏基础软件开发赛道openLooKeng赛题火热报名中,数十万大奖等您来收割
  12. 39-如何共享数据?
  13. ES6-异步async await学习
  14. 关于AE中出现 “对 COM 组件的调用返回了错误 HRESULT E_FAIL” 错误
  15. 安川服务器显示fn001,安川伺服驱动器功能参数设置
  16. VS2012+ArcGIS Engine10.2安装教程
  17. 使用 docker-pan 一键搭建可离线磁力种子的私有云盘
  18. 怎么解决Myeclipse导入项目中文乱码?
  19. PDP Context 激活流程(UE发起)
  20. GeoPandas库入门教程

热门文章

  1. 哈希记账小工具(wordpress、woocommerce、kafka、frp分布式集成)
  2. WebMatrix 简介
  3. IPD思想指导下的企业研发管理成熟度演进模型
  4. webpack代理 host文件 微信小程序公众号开发必配
  5. 关于使用GPS天线需要注意的事项
  6. 网易严选上半年开设线下店?说好不学无印良品的
  7. oracle exception others,Oracle PL/SQL之EXCEPTION -- WHEN OTHERS THEN
  8. 计算机报录比多少算高,报录比多少合适?怎么算好考?我来告诉你答案
  9. 【Teradata】windows部署安装Teradata数据库(附虚拟机扩展包)
  10. Python开发的Web在线学习教育培训网课系统