微信二次开发之文本消息请求与发送

互联网 17-5-10
这篇文章主要为大家详细介绍了Java微信二次开发第二篇,Java微信文本消息接口请求与发送功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

第二篇,做微信文本消息接口请求与发送,具体内容如下

需要导入库: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   * <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.java

package 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.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   * <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 block     e.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.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   * <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 block      e.printStackTrace();     }     out.print(respXml);    }    out.close();    out = null;   }  }

完成微信文本消息接口请求与发送。

【相关推荐】

1. 微信公众号平台源码下载

2. 微信投票源码

以上就是微信二次开发之文本消息请求与发送的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: 文本消息
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:二次开发微信之请求验证

相关资讯