时间:2021-05-20
上篇我们说到回复消息可以根据是否需要上传文件到微信服务器可划分为【普通消息】和【多媒体消息】,这里我们来讲述普通消息的回复实现,在消息回复中存在一个关键字段【openid】,它是微信用户对于公众号的唯一标识,这里不做过多解释后面将给出时间专门来讲解微信生态中的关键字!
(一)回复文本消息
在前面我们已经完成了对消息的分类和回复消息实体的建立,这里回复文本消息需要用到的就是我们的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<String, String> parseXml(HttpServletRequest request) throws Exception { // 将解析结果存储在HashMap中 Map<String, String> map = new HashMap<String, String>(); // 从request中取得输入流 InputStream inputStream = request.getInputStream(); // 读取输入流 SAXReader reader = new SAXReader(); Document document = reader.read(inputStream); // 得到xml根元素 Element root = document.getRootElement(); // 得到根元素的所有子节点 List<Element> 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("<![CDATA["); writer.write(text); writer.write("]]>"); } else { writer.write(text); } } }; } });}我们回复文本消息的简单实现:修改MsgDispatcher,在消息分类为【文本消息】中加入如下代码:
String openid=map.get("FromUserName"); //用户openidString 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:
实现结果如下图所示:
在整个的谱图消息发送的过程中没有任何项目结构的变化,只是对文件内容作了简单代码增加和修改,下一篇将讲述【微信开发中的token生成】以方便后面多媒体消息发送的讲解,感谢你的查阅,如有疑问获需源码可留言!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
微信公众号开发之回复图文消息,供大家参考,具体内容如下图文消息的主要参数说明通过微信官方的消息接口指南,可以看到对图文消息的参数介绍,如下图所示:从上图可以了解
微信公众号音乐功能怎么用,微信公众平台图文消息怎么添加音乐插件?之前公众平台要想在文章正文内添加音乐,是需要使用代码或者借助第三方工具才能实现,如今可以实现在后
微信公众号图文消息推送的使用方法: 1、首先搜索微信公众平台,登录微信公众号账号; 2、然后进入后,点击素材管理,在新页面中点击新建图文信息; 3、接着编
python基于新浪sae开发的微信公众平台,实现功能:输入段子---回复笑话输入开源+文章---发送消息到开源中国输入快递+订单号---查询快递信息输入天气-
微信怎么设置自动回复?其实,微信自动回复设置就是和微信公众平台怎么设置自动回复一样的,然后有粉丝给您发送微信消息时,微信就会自动回复您设置的文字/语言/图片/录