博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信开发之消息接收--文本消息(五)
阅读量:5161 次
发布时间:2019-06-13

本文共 7876 字,大约阅读时间需要 26 分钟。

一、消息格式

1348831860
1234567890123456
参数 描述
ToUserName 开发者微信号
FromUserName 发送方帐号(一个OpenID)
CreateTime 消息创建时间 (整型)
MsgType text
Content 文本消息内容
MsgId 消息id,64位整型

 

 

 

 

 

 

 

 

二、编写消息类实体,代码如下:

     BaseMessage.java   ---基础消息类

package com.weixin.message;/** * 消息实体类 * @author Code猿猿 * */public class BaseMessage {		/**	 * 开发者微信号	 */	public String ToUserName;	/**	 * 发送方帐号(一个OpenID)	 */	public String FromUserName;	/**	 * 消息创建时间 (整型)	 */	public long CreateTime;	/**	 * text	 */	public String MsgType ;		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;	}	}

  TextMessage.java  ---文本消息

package com.weixin.message;/** * 文本消息 * @author Zhangsy * */public class TextMessage extends BaseMessage {	/**	 * 文本消息内容	 */	public String Content;	/**	 * 消息id,64位整型	 */	public long MsgId ;		public String getContent() {		return Content;	}	public void setContent(String content) {		Content = content;	}	public long getMsgId() {		return MsgId;	}	public void setMsgId(long msgId) {		MsgId = msgId;	}	}

三、编写消息类(读取xml)

     MessageUtil.java  --》解析接收的xml信息、封装返回的xml信息

     注意:这里用到了2个JAR包:xstream-1.3.jar、dom4j.jar

package com.weixin.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 java.util.regex.Pattern;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.weixin.message.TextMessage;/** * 对消息的处理 * @author Code猿猿 * */public class MessageUtil {			/**	 * text	 */	public static final String RESP_MESSAGE_TYPE_TEXT = "text";	/**	 * music	 */	public static final String RESP_MESSAGE_TYPE_MUSIC = "music";	/**	 * news	 */	public static final String RESP_MESSAGE_TYPE_NEWS = "news";	/**	 * text	 */	public static final String REQ_MESSAGE_TYPE_TEXT = "text";	/**	 * image	 */	public static final String REQ_MESSAGE_TYPE_IMAGE = "image";	/**	 * link	 */	public static final String REQ_MESSAGE_TYPE_LINK = "link";	/**	 * location	 */	public static final String REQ_MESSAGE_TYPE_LOCATION = "location";	/**	 * voice	 */	public static final String REQ_MESSAGE_TYPE_VOICE = "voice";		/**	 * video	 */	public static final String REQ_MESSAGE_TYPE_VIDEO = "video";		/**	 * shortvideo	 */	public static final String REQ_MESSAGE_TYPE_SHORTVIDEO = "shortvideo";	/**	 * event	 */	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";				public static Map
parseXml(HttpServletRequest request){ Map
messageMap=new HashMap
(); InputStream inputStream=null; try { //读取request Stream信息 inputStream=request.getInputStream(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } SAXReader reader = new SAXReader(); Document document=null; try { document = reader.read(inputStream); } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } Element root=document.getRootElement(); List
elementsList=root.elements(); for(Element e:elementsList){ messageMap.put(e.getName(),e.getText()); } try { inputStream.close(); inputStream=null; } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } return messageMap; } /** * 转换文本消息 * * @param textMessage * * @return xml */ public static String textMessageToXml(TextMessage textMessage) { xstream.alias("xml", textMessage.getClass()); return xstream.toXML(textMessage); } /** * * 定义xstream让value自动加上CDATA标签 */ private static XStream xstream = new XStream(new XppDriver() { public HierarchicalStreamWriter createWriter(Writer out) { return new PrettyPrintWriter(out) { boolean cdata = false; @SuppressWarnings("unchecked") public void startNode(String name, Class clazz) { if (!name.equals("xml")) { char[] arr = name.toCharArray(); if (arr[0] >= 'a' && arr[0] <= 'z') { // arr[0] -= 'a' - 'A'; arr[0] = (char) ((int) arr[0] - 32); } name = new String(arr); } super.startNode(name, clazz); } @Override public void setValue(String text) { if (text != null && !"".equals(text)) { Pattern patternInt = Pattern .compile("[0-9]*(\\.?)[0-9]*"); Pattern patternFloat = Pattern.compile("[0-9]+"); if (patternInt.matcher(text).matches() || patternFloat.matcher(text).matches()) { cdata = false; } else { cdata = true; } } super.setValue(text); } protected void writeText(QuickWriter writer, String text) { if (cdata) { writer.write(""); } else { writer.write(text); } } }; } }); }

四、修改Servlet中的Post方法,加入如下代码:

/**	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)	 */	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {						request.setCharacterEncoding("UTF-8");		response.setCharacterEncoding("UTF-8");				Map
message=MessageUtil.parseXml(request); String messageType=message.get("MsgType"); if(messageType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)){ //接收的是文本消息 //打印接收所有参数 System.out.println("ToUserName:"+message.get("ToUserName")); System.out.println("FromUserName:"+message.get("FromUserName")); System.out.println("CreateTime:"+message.get("CreateTime")); System.out.println("MsgType:"+message.get("MsgType")); System.out.println("Content:"+message.get("Content")); System.out.println("MsgId:"+message.get("MsgId")); String req_content=message.get("Content"); String res_content=""; //组装回复消息 //我们做个小实验 //接收内容:你好 回复:你好 //接收内容:大家好 回复:大家好 //接收内容:同志们好 回复:为人民服务 if("你好".equals(req_content)){ res_content="你好"; }else if ("大家好".equals(req_content)){ res_content="大家好"; }else if("同志们好".equals(req_content)){ res_content="为人民服务"; }else{ //否则原样输出输入内容 res_content=req_content; } TextMessage textMessage=new TextMessage(); textMessage.setToUserName(message.get("FromUserName")); //这里的ToUserName 是刚才接收xml中的FromUserName textMessage.setFromUserName(message.get("ToUserName")); //这里的FromUserName 是刚才接收xml中的ToUserName 这里一定要注意,否则会出错 textMessage.setCreateTime(new Date().getTime()); textMessage.setContent(res_content); textMessage.setMsgType(messageType); String xml=MessageUtil.textMessageToXml(textMessage); System.out.println("xml:"+xml); PrintWriter out = response.getWriter(); out.print(xml); out.close(); }

五、部署测试

向公众号发送信息,看是否能够正常返回信息。

给各位推荐一个在线测试的平台:http://debug.fangbei.org/

操作步骤:

录入我们接入微信平台的URL和TOKEN

选择消息类型:文本

内容:输入要发送给公众号的内容

在右侧可看到效果的预览。

 

转载于:https://www.cnblogs.com/codejackanapes/p/5470842.html

你可能感兴趣的文章
delphi的消息对话框
查看>>
java:Apache Shiro 权限管理
查看>>
38.输出1到最大的N位数[Print 1 to max number of N bits]
查看>>
ZOJ - 2165 Red and Black
查看>>
objective c的注释规范
查看>>
FreeNas安装配置使用
查看>>
机器学习中的F1-score
查看>>
编译安装php5.5.38
查看>>
常用查找数据结构及算法(Python实现)
查看>>
Scrapy框架-CrawlSpider
查看>>
Django(一)框架简介
查看>>
java.lang.OutOfMemoryError: Java heap space
查看>>
多行内容放到一行中(内容的合并)
查看>>
不成功的MVC Repository模式,记录下来,后面看看原因在哪里(三) IDevTypeRepository 及 DevTypeRepository...
查看>>
Swift基础(二)
查看>>
【leetcode_easy】530. Minimum Absolute Difference in BST
查看>>
spring上下文快速获取方法
查看>>
PAT 甲级 1068 Find More Coins(0,1背包)
查看>>
POJ-2329 Nearest number - 2(BFS)
查看>>
读阮一峰博客《互联网协议入门》笔记
查看>>