微信文本消息处理

来源:互联网 发布:淘宝收货时间是多久 编辑:程序博客网 时间:2024/05/17 06:30

(1)目录结构如图:


(2)核心业务逻辑类

package com.zk.service;import java.io.IOException;import java.io.PrintWriter;import java.util.Date;import java.util.HashMap;import java.util.Map;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.dom4j.DocumentException;import com.zk.entity.TextMessage;import com.zk.util.messageUtil;import com.zk.util.signUtil;public class coreService extends HttpServlet{private static final long serialVersionUID = 1L;/** * 验证是否是微信客户端发来的请求 */@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubString signature = req.getParameter("signature");String timestamp = req.getParameter("timestamp");String nonce = req.getParameter("nonce");String echostr = req.getParameter("echostr");//开发者通过检验signature对请求进行校验(下面有校验方式)。//若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,//成为开发者成功,否则接入失败PrintWriter out = resp.getWriter();System.out.println("signature:"+signature+",timestamp:"+timestamp+",nonce:"+nonce+",echostr:"+echostr);if (signUtil.checkSignatrue(signature,timestamp,nonce)) {System.out.println(2);//不能被執行out.print(echostr);System.out.println(3);}System.out.println(4);out.close();out=null;}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubreq.setCharacterEncoding("utf-8");resp.setCharacterEncoding("utf-8");System.out.println("現在執行的是doPost請求");PrintWriter out = resp.getWriter();try {Map<String, String> map = messageUtil.xmlToMap(req);String fromUserName = map.get("ToUserName");String toUserName = map.get("FromUserName");String msgType = map.get("MsgType");String content =map.get("Content");String messgae = null;if ("text".equals(msgType)) {TextMessage text = new TextMessage();text.setFromUserName(fromUserName);text.setToUserName(toUserName);text.setMsgType("text");text.setCreateTime(new Date().getTime());text.setContent("你發送的消息是:"+content);messgae = messageUtil.textMessageToXml(text);System.out.println(messgae);}out.print(messgae);} catch (DocumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {out.close();}}}
(2工具类

1.校验签名工具类

package com.zk.util;import java.security.MessageDigest;import java.util.Arrays;public class signUtil {public static final String token = "imooc";public static boolean checkSignatrue(String signature, String timestamp, String nonce) {// 1)将token、timestamp、nonce三个参数进行字典序排序String[] strings = new String[] { token, timestamp, nonce };Arrays.sort(strings);// 2)将三个参数字符串拼接成一个字符串进行sha1加密StringBuffer sb = new StringBuffer();for (int i = 0; i < strings.length; i++) {sb.append(strings[i]);}// 3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信String tmpStr = getSha1(sb.toString());return tmpStr.equals(signature);}// Sha1签名public static String getSha1(String str) {if (str == null || str.length() == 0) {return null;}char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };try {MessageDigest mdTemp = MessageDigest.getInstance("SHA1");mdTemp.update(str.getBytes("UTF-8"));byte[] md = mdTemp.digest();int j = md.length;char buf[] = new char[j * 2];int k = 0;for (int i = 0; i < j; i++) {byte byte0 = md[i];buf[k++] = hexDigits[byte0 >>> 4 & 0xf];buf[k++] = hexDigits[byte0 & 0xf];}return new String(buf);} catch (Exception e) {return null;}}}

2.文本消息工具类

package com.zk.util;import java.io.IOException;import java.io.InputStream;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.zk.entity.TextMessage;public class messageUtil {/** * xml转为map集合 * @param req * @return * @throws IOException * @throws DocumentException */public static Map<String, String> xmlToMap(HttpServletRequest req) throws IOException, DocumentException{Map<String, String> map = new HashMap<String, String>();SAXReader reader = new SAXReader();InputStream ins = req.getInputStream();Document doc = reader.read(ins);Element root = doc.getRootElement();List<Element> list = root.elements();for (Element element : list) {map.put(element.getName(), element.getText());}ins.close();return map;}/** * 消息對象轉化為xml * @param textMessage * @return */public static String textMessageToXml(TextMessage textMessage){XStream xStream = new XStream();xStream.alias("xml",textMessage.getClass());return xStream.toXML(textMessage);}}

(3)实体类

package com.zk.entity;public class TextMessage {private String ToUserName;private String FromUserName;private long CreateTime;public long getCreateTime() {return CreateTime;}public void setCreateTime(long createTime) {CreateTime = createTime;}private String MsgType;private String Content;private String MsgId;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 String getMsgType() {return MsgType;}public void setMsgType(String msgType) {MsgType = msgType;}public String getContent() {return Content;}public void setContent(String content) {Content = content;}public String getMsgId() {return MsgId;}public void setMsgId(String msgId) {MsgId = msgId;}}
(4)web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  <display-name>Archetype Created Web Application</display-name>  <welcome-file-list>  <welcome-file>  index.jsp  </welcome-file>  </welcome-file-list>  <servlet>  <servlet-name>WeiXinServlet</servlet-name>  <servlet-class>com.zk.service.coreService</servlet-class>  </servlet>  <servlet-mapping>  <servlet-name>WeiXinServlet</servlet-name>  <url-pattern>*.do</url-pattern>  </servlet-mapping></web-app>
(5)pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.zk</groupId><artifactId>WeiXin</artifactId><packaging>war</packaging><version>0.0.1-SNAPSHOT</version><name>WeiXin Maven Webapp</name><url>http://maven.apache.org</url><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><!-- https://mvnrepository.com/artifact/dom4j/dom4j --><dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>1.6.1</version></dependency><!-- https://mvnrepository.com/artifact/com.thoughtworks.xstream/xstream --><dependency><groupId>com.thoughtworks.xstream</groupId><artifactId>xstream</artifactId><version>1.4.9</version></dependency></dependencies><build><finalName>WeiXin</finalName><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>2.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build></project>


(6)结果展示


(8)忠告:别忘了开外网映射
下一步:将处理图文消息



原创粉丝点击