免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1336 | 回复: 0

微信JAVA接入公共类 [复制链接]

论坛徽章:
0
发表于 2015-06-30 10:07 |显示全部楼层
微信后台TONKEN验证以及具体的MESSAGE

java后台,微信TOKEN验证
  1. package com.wechat.core.servlet;

  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import java.util.Date;
  5. import java.util.Map;

  6. import javax.servlet.ServletException;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;

  10. import org.dom4j.DocumentException;

  11. import com.wechat.model.TextMessage;
  12. import com.wechat.util.CheckUtil;
  13. import com.wechat.util.MessageUtil;

  14. public class weixinServlet extends HttpServlet {

  15.     @Override
  16.     protected void doGet(HttpServletRequest req, HttpServletResponse resp)
  17.             throws ServletException, IOException {
  18.         //获取微信传入的四个参数
  19.         String signature = req.getParameter("signature");
  20.         String timestamp = req.getParameter("timestamp");
  21.         String nonce = req.getParameter("nonce");
  22.         String echostr = req.getParameter("echostr");
  23.         PrintWriter out = resp.getWriter();
  24.         if(CheckUtil.checkSignature(signature, timestamp, nonce)){
  25.         out.print(echostr);
  26.             
  27.         }
  28.          
  29.     }
  30.     @SuppressWarnings("null")
  31.     @Override
  32.     protected void doPost(HttpServletRequest req, HttpServletResponse resp)
  33.             throws ServletException, IOException {
  34.         // TODO Auto-generated method stub
  35.         req.setCharacterEncoding("UTF-8");
  36.         resp.setCharacterEncoding("UTF-8");
  37.         PrintWriter out = null;
  38.         try {
  39.             Map<String,String> map = MessageUtil.xmlToMap(req);
  40.             String fromUserName = map.get("FromUserName");
  41.             String toUserName = map.get("ToUserName");
  42.             String createTime = map.get("CreateTime");
  43.             String msgType = map.get("MsgType");
  44.             String content = map.get("Content");
  45.             /*String msgId = map.get("MsgId");*/
  46.             String message = null;
  47.             if("text".equals(msgType)){
  48.                  
  49.                 TextMessage text = new TextMessage();
  50.                 text.setFromUserName(toUserName);
  51.                 text.setToUserName(fromUserName);
  52.                 text.setCreateTime(Long.toString(new Date().getTime()));
  53.                 text.setMsgType("text");
  54.                 text.setContent("Test"+content);
  55.                 message = MessageUtil.textMessageToXml(text);
  56.                 System.err.println(message);
  57.             }
  58.             out.print(message);
  59.         } catch (DocumentException e) {
  60.             e.printStackTrace();
  61.     }/*finally{
  62.         out.close();
  63.     } */
  64.      
  65. }
  66.     }
复制代码
servlet的web.xml配置
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  3.   <display-name>Wechat</display-name>
  4.   <servlet>
  5.   <servlet-name>weixinServlet</servlet-name>
  6.   <servlet-class>com.wechat.core.servlet.weixinServlet</servlet-class>
  7.   </servlet>
  8.   <servlet-mapping>
  9.   <servlet-name>weixinServlet</servlet-name>
  10. <url-pattern>/wx.do</url-pattern>  
  11.   </servlet-mapping>
  12.   <welcome-file-list>
  13.     <welcome-file>index.html</welcome-file>
  14.     <welcome-file>index.htm</welcome-file>
  15.     <welcome-file>index.jsp</welcome-file>
  16.     <welcome-file>default.html</welcome-file>
  17.     <welcome-file>default.htm</welcome-file>
  18.     <welcome-file>default.jsp</welcome-file>
  19.   </welcome-file-list>
  20. </web-app>
复制代码
CheckUtil
  1. package com.wechat.util;

  2. import java.security.MessageDigest;
  3. import java.util.Arrays;

  4. public class CheckUtil {

  5.     private static final String Token = "Token";

  6.     public static boolean checkSignature(String signature,String timestamp,String nonce ){
  7.         String[] arr = new String[]{Token,timestamp,nonce};
  8.         //排序
  9.         Arrays.sort(arr);
  10.         //生成字符串
  11.         StringBuffer content = new StringBuffer();
  12.         for (int i = 0; i < arr.length; i++) {
  13.             content.append(arr[i]);
  14.         }
  15.          
  16.         String temp = getSha1(content.toString());
  17.         return temp.equals(signature);
  18.     }
  19.         //sha1加密
  20.         public static String getSha1(String str){
  21.             if(str==null||str.length()==0){
  22.                 return null;
  23.             }
  24.             char hexDigits[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
  25.             try {
  26.                 MessageDigest mdTemp = MessageDigest.getInstance("SHA1");
  27.                 mdTemp.update(str.getBytes("UTF-8"));
  28.                 byte[] md = mdTemp.digest();
  29.                 int j = md.length;
  30.                 char buf[] = new char[j*2];
  31.                 int k = 0;
  32.                 for (int i = 0; i < j; i++) {
  33.                     byte byte0 = md[i];
  34.                     buf[k++] = hexDigits[byte0>>>4&0xf];
  35.                     buf[k++] = hexDigits[byte0&0xf];
  36.                 }
  37.                 return new String(buf);
  38.             } catch (Exception e) {
  39.                 return null;
  40.             }
  41.             
  42.             
  43.         }
  44.          

  45. }
复制代码
MessageUtil
  1. package com.wechat.util;

  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;

  7. import javax.servlet.http.HttpServletRequest;

  8. import org.dom4j.Document;
  9. import org.dom4j.DocumentException;
  10. import org.dom4j.Element;
  11. import org.dom4j.io.SAXReader;

  12. import com.thoughtworks.xstream.XStream;
  13. import com.wechat.model.TextMessage;

  14. public class MessageUtil {
  15.     //xml转化map集合
  16. public static Map<String, String>xmlToMap(HttpServletRequest request) throws IOException, DocumentException{
  17.     Map<String,String> map = new HashMap<String, String>();
  18.     SAXReader reader = new SAXReader();
  19.         InputStream ins = request.getInputStream();
  20.         Document doc = reader.read(ins);
  21.         Element root = doc.getRootElement();
  22.         List<Element> list = root.elements();
  23.         for (Element e : list) {
  24.             map.put(e.getName(), e.getText());
  25.         }
  26.         ins.close();
  27.          
  28.     return map;
  29.      
  30. }
  31. // 将文本消息对象转化为XML
  32. public static String textMessageToXml(TextMessage textMessage){
  33.     XStream xstream = new XStream();
  34.     xstream.alias("xml",textMessage.getClass());
  35.     return xstream.toXML(textMessage);
  36. }

  37. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP