微信二次开发之文本消息请求与发送的示例分析
发表于:2024-12-13 作者:千家信息网编辑
千家信息网最后更新 2024年12月13日,这篇文章给大家分享的是有关微信二次开发之文本消息请求与发送的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。做微信文本消息接口请求与发送,具体内容如下需要导入库:do
千家信息网最后更新 2024年12月13日微信二次开发之文本消息请求与发送的示例分析
这篇文章给大家分享的是有关微信二次开发之文本消息请求与发送的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
做微信文本消息接口请求与发送,具体内容如下
需要导入库:dom4j-1.6.1.jar,xstream-1.3.1.jar
第一步:新建包com.wtz.message.response,新建类BaseMessage.java
package com.wtz.message.response;/** * @author wangtianze QQ:864620012 * @date 2017年4月19日 下午3:12:40 *version:1.0
*description:基础消息类
*/public class BaseMessage { //接收方 private String ToUserName; //发送方 private String FromUserName; //消息的创建时间 private long CreateTime; //消息类型 private 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; }}
第二步:找到包com.wtz.message.response,新建类TextMessage.java
package com.wtz.message.response;/** * @author wangtianze QQ:864620012 * @date 2017年4月19日 下午3:22:33 *version:1.0
*description:文本消息类
*/public class TextMessage extends BaseMessage{ //消息内容 private String Content; public String getContent() { return Content; } public void setContent(String content) { Content = content; }}
第三步:找到包com.wtz.util,新建类MessageUtil.java
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.TextMessage;/** * @author wangtianze QQ:864620012 * @date 2017年4月19日 下午3:29:58 *version:1.0
*description:消息处理工具类
*/public class MessageUtil { //定义了消息类型(常量:文本类型) public static final String RESP_MESSAGE_TYPE_TEXT = "text"; //从流中解析出每个节点的内容 public static MapparseXml(HttpServletRequest request) throws IOException{ Map map = new HashMap (); //从输入流中获取流对象 InputStream in = request.getInputStream(); //构建SAX阅读器对象 SAXReader reader = new SAXReader(); try { //从流中获得文档对象 Document doc = reader.read(in); //获得根节点 Element root = doc.getRootElement(); //获取根节点下的所有子节点 List 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; } /** * 用于扩展节点数据按照 ,中间加了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(""); }else{ writer.write(text); } } }; } }); /** * 将文本消息转换成XML格式 */ public static String messageToXml(TextMessage textMessage){ xstream.alias("xml",textMessage.getClass()); String xml = xstream.toXML(textMessage); System.out.println("响应所转换的XML:"+xml); return xml; }}
第四步:找到包com.wtz.service,新建类ProcessService.java
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 *version:1.0
*description:核心服务类
*/public class ProcessService { public static String dealRequest(HttpServletRequest request) throws IOException{ //响应的XML串 String respXml = ""; //要响应的文本内容 String respContent = "未知的消息类型"; MaprequestMap = MessageUtil.parseXml(request); String fromUserName = requestMap.get("FromUserName"); String toUserName = requestMap.get("ToUserName"); String MsgType = requestMap.get("MsgType"); String Content = requestMap.get("Content"); System.out.println("用户给公众号发的消息为:" + Content); //构建一条文本消息 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.RESP_MESSAGE_TYPE_TEXT)){ respContent = "王天泽的公众号收到了您的一条文本消息:" + Content + ",时间戳是:" + (new Date().getTime()); } textMessage.setContent(respContent); respXml = MessageUtil.messageToXml(textMessage); System.out.println("respXml:"+respXml); return respXml; }}
第五步:找到包com.wtz.service下的LoginServlet类,重写doPost方法
package com.wtz.service;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.wtz.util.MessageUtil;import com.wtz.util.ProcessService;import com.wtz.util.ValidationUtil;/** * @author wangtianze QQ:864620012 * @date 2017年4月17日 下午8:11:32 *version:1.0
*description:微信请求验证类
*/public class LoginServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("get请求。。。。。。"); //1.获得微信签名的加密字符串 String signature = request.getParameter("signature"); //2.获得时间戳信息 String timestamp = request.getParameter("timestamp"); //3.获得随机数 String nonce = request.getParameter("nonce"); //4.获得随机字符串 String echostr = request.getParameter("echostr"); System.out.println("获得微信签名的加密字符串:"+signature); System.out.println("获得时间戳信息:"+timestamp); System.out.println("获得随机数:"+nonce); System.out.println("获得随机字符串:"+echostr); PrintWriter out = response.getWriter(); //验证请求确认成功原样返回echostr参数内容,则接入生效,成为开发者成功,否则失败 if(ValidationUtil.checkSignature(signature, timestamp, nonce)){ out.print(echostr); } out.close(); out = null; } /** * 接受微信服务器发过来的XML数据包(通过post请求发送过来的) */ @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); //获取微信加密的签名字符串 String signature = request.getParameter("signature"); //获取时间戳 String timestamp = request.getParameter("timestamp"); //获取随机数 String nonce = request.getParameter("nonce"); PrintWriter out = response.getWriter(); if(ValidationUtil.checkSignature(signature,timestamp,nonce)){ String respXml = ""; try { respXml = ProcessService.dealRequest(request); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } out.print(respXml); } out.close(); out = null; }}
感谢各位的阅读!关于"微信二次开发之文本消息请求与发送的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
消息
文本
内容
节点
字符
字符串
时间
类型
开发
对象
随机数
加密
示例
分析
成功
信息
公众
数据
更多
用户
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
西安办公软件开发学校
网易邮箱163服务器出错
长寿区一站式软件开发流程市场价
热成像图像数据库
时序数据库 数据挖掘
中国全国省市区数据库
网络安全保险的弊端
仁寿租房软件开发
保安如何防范网络安全风险
软件开发培训学校去哪家好
天涯明月刀少女捏脸数据库
机考服务器
互联网黑科技博览会
有国家网络安全局吗
手机网络安全问题发言300字
数据库实训7
中国能源研究会网络安全
信息和网络安全教育手抄报图片
连接nba2k20服务器
上海系统软件开发培训
内江网络安全产业
政务大厅网络安全加固
手机数据库小
洛阳数字货币软件开发
山东元隆网络技术有限公司
青岛金山云网络技术公司电话
互联网时代软件开发特点
优化企业服务器系统
网上商城的数据库访问
违规外联互联网网络安全法