微信二次开发之文本消息请求与发送
这篇文章主要为大家详细介绍了Java微信二次开发第二篇,Java微信文本消息接口请求与发送功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
第二篇,做微信文本消息接口请求与发送,具体内容如下
需要导入库:dom4j-1.6.1.jar,xstream-1.3.1.jar
第一步:新建包com.wtz.message.response,新建类BaseMessage.javapackage com.wtz.message.response;/** * @author wangtianze QQ:864620012 * @date 2017年4月19日 下午3:12:40 * <p>version:1.0</p> * <p>description:基础消息类</p> */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.javapackage com.wtz.message.response;/** *@author wangtianze QQ:864620012 * @date 2017年4月19日 下午3:22:33 * <p>version:1.0</p> *<p>description:文本消息类</p> */public class TextMessage extends BaseMessage{ //消息内容 private String Content;public String getContent() {return Content; } public void setContent(String content) {Content = content; }}第三步:找到包com.wtz.util,新建类MessageUtil.javapackage 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 * <p>version:1.0</p> *<p>description:消息处理工具类</p> */public class MessageUtil { //定义了消息类型(常量:文本类型) public static final String RESP_MESSAGE_TYPE_TEXT = "text";//从流中解析出每个节点的内容 public static Map<String,String> parseXml(HttpServletRequest request) throws IOException{Map<String,String> map = new HashMap<String,String>();//从输入流中获取流对象InputStream in = request.getInputStream();//构建SAX阅读器对象SAXReader reader = new SAXReader();try {//从流中获得文档对象Document doc = reader.read(in);//获得根节点Element root = doc.getRootElement();//获取根节点下的所有子节点List<Element> 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 blocke.printStackTrace();}return map; }/*** 用于扩展节点数据按照<ToUserName><![CDATA[toUser]]></ToUserName>,中间加了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("<![CDATA[");writer.write(text);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.javapackage 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 * <p>version:1.0</p> *<p>description:核心服务类</p> */public class ProcessService { public static String dealRequest(HttpServletRequest request) throws IOException{//响应的XML串String respXml = "";//要响应的文本内容String respContent = "未知的消息类型";Map<String,String> requestMap = 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 * <p>version:1.0</p> *<p>description:微信请求验证类</p> */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 blocke.printStackTrace();}out.print(respXml);}out.close();out = null; }}完成微信文本消息接口请求与发送。
【相关推荐】
1. 微信公众号平台源码下载
2. 微信投票源码以上就是微信二次开发之文本消息请求与发送的详细内容,更多请关注小潘博客其它相关文章!