Java:实现微信公众平台

1.  Easyui学习班.jpg    

成都创新互联是一家集网站建设,平顺企业网站建设,平顺品牌网站建设,网站定制,平顺网站建设报价,网络营销,网络优化,平顺网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

2. [文件] web.xml ~ 755B

 
 
 
 
  1.  
  2.     xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
  3.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
  4.     id="WebApp_ID" version="3.0"> 
  5.     微信公共平台开发者接口 
  6.      
  7.         WeChatFilter 
  8.         com.gson.WeChatFilter 
  9.      
  10.      
  11.         WeChatFilter 
  12.         /wechat/* 
  13.      
  14.  
  15.      
  16.         index.jsp 
  17.      
  18.  

#p#

3. [文件] WeChatFilter.java

 
 
 
 
  1. package com.gson; 
  2.  
  3. import java.io.File; 
  4. import java.io.FileInputStream; 
  5. import java.io.FileNotFoundException; 
  6. import java.io.IOException; 
  7. import java.util.Date; 
  8. import java.util.Properties; 
  9.  
  10. import javax.servlet.Filter; 
  11. import javax.servlet.FilterChain; 
  12. import javax.servlet.FilterConfig; 
  13. import javax.servlet.ServletException; 
  14. import javax.servlet.ServletInputStream; 
  15. import javax.servlet.ServletRequest; 
  16. import javax.servlet.ServletResponse; 
  17. import javax.servlet.http.HttpServletRequest; 
  18. import javax.servlet.http.HttpServletResponse; 
  19.  
  20. import org.apache.log4j.Logger; 
  21.  
  22. import com.gson.bean.Articles; 
  23. import com.gson.bean.InMessage; 
  24. import com.gson.bean.OutMessage; 
  25. import com.gson.inf.MessageProcessingHandler; 
  26. import com.gson.util.Tools; 
  27. import com.gson.util.XStreamFactory; 
  28. import com.thoughtworks.xstream.XStream; 
  29.  
  30. /** 
  31.  * 请求拦截 
  32.  * @author GodSon 
  33.  * 
  34.  */ 
  35. public class WeChatFilter implements Filter { 
  36.      
  37.     private final Logger logger = Logger.getLogger(WeChatFilter.class); 
  38.     private String _token; 
  39.     private String conf = "classPath:wechat.properties"; 
  40.     private String defaultHandler = "com.gson.inf.DefaultMessageProcessingHandlerImpl"; 
  41.     private Properties p; 
  42.  
  43.     @Override 
  44.     public void destroy() { 
  45.         logger.info("WeChatFilter已经销毁"); 
  46.     } 
  47.  
  48.     @Override 
  49.     public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { 
  50.         HttpServletRequest request = (HttpServletRequest) req; 
  51.         HttpServletResponse response = (HttpServletResponse) res; 
  52.         Boolean isGet = request.getMethod().equals("GET"); 
  53.          
  54.         String path = request.getServletPath(); 
  55.         String pathInfo = path.substring(path.lastIndexOf("/")); 
  56.          
  57.         if (pathInfo == null) { 
  58.             response.getWriter().write("error"); 
  59.         } else { 
  60.             _token = pathInfo.substring(1); 
  61.             if (isGet) { 
  62.                 doGet(request, response); 
  63.             } else { 
  64.                 doPost(request, response); 
  65.             } 
  66.         } 
  67.     } 
  68.  
  69.     private void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { 
  70.         response.setCharacterEncoding("UTF-8"); 
  71.         response.setContentType("text/xml"); 
  72.          
  73.         OutMessage oms = new OutMessage(); 
  74.         ServletInputStream in = request.getInputStream(); 
  75.         //转换微信post过来的xml内容 
  76.         XStream xs = XStreamFactory.init(false); 
  77.         xs.alias("xml", InMessage.class); 
  78.         String xmlMsg = Tools.inputStream2String(in); 
  79.         InMessage msg = (InMessage) xs.fromXML(xmlMsg); 
  80.         //获取自定消息处理器,如果自定义处理器则使用默认处理器。 
  81.         String handler = p.getProperty("MessageProcessingHandlerImpl"); 
  82.         if(handler== null) 
  83.             handler = defaultHandler; 
  84.          
  85.         try { 
  86.             //加载处理器 
  87.             Class clazz = Class.forName(handler); 
  88.             MessageProcessingHandler processingHandler = (MessageProcessingHandler) clazz.newInstance(); 
  89.             //取得消息类型 
  90.             String type = msg.getMsgType(); 
  91.             //针对不同类型消息进行处理 
  92.             if (type.equals(MessageProcessingHandler.MSG_TYPE_TEXT)) { 
  93.                 oms = processingHandler.textTypeMsg(msg); 
  94.             } else if (type.equals(MessageProcessingHandler.MSG_TYPE_LOCATION)) { 
  95.                 oms = processingHandler.locationTypeMsg(msg); 
  96.             } else if (type.equals(MessageProcessingHandler.MSG_TYPE_LINK)) { 
  97.                 oms = processingHandler.linkTypeMsg(msg); 
  98.             } else if (type.equals(MessageProcessingHandler.MSG_TYPE_IMAGE)) { 
  99.                 oms = processingHandler.imageTypeMsg(msg); 
  100.             } else if (type.equals(MessageProcessingHandler.MSG_TYPE_EVENT)) { 
  101.                 oms = processingHandler.eventTypeMsg(msg); 
  102.             } 
  103.             if(oms == null){ 
  104.                 oms = new OutMessage(); 
  105.                 oms.setContent("系统错误!"); 
  106.             } 
  107.             //设置发送信息 
  108.             oms.setCreateTime(new Date().getTime()); 
  109.             oms.setToUserName(msg.getFromUserName()); 
  110.             oms.setFromUserName(msg.getToUserName()); 
  111.         } catch (ClassNotFoundException e) { 
  112.             logger.error("没有找到" + handler + "类", e); 
  113.             oms.setContent("系统错误!"); 
  114.         } catch (InstantiationException e) { 
  115.             logger.error(e); 
  116.             oms.setContent("系统错误!"); 
  117.         } catch (IllegalAccessException e) { 
  118.             logger.error(e); 
  119.             oms.setContent("系统错误!"); 
  120.         } 
  121.          
  122.         //把发送发送对象转换为xml输出 
  123.         xs = XStreamFactory.init(false); 
  124.         xs.alias("xml", OutMessage.class); 
  125.         xs.alias("item", Articles.class); 
  126.         xs.toXML(oms, response.getWriter()); 
  127.     } 
  128.  
  129.     private void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { 
  130.         String signature = request.getParameter("signature");// 微信加密签名 
  131.         String timestamp = request.getParameter("timestamp");// 时间戳 
  132.         String nonce = request.getParameter("nonce");// 随机数 
  133.         String echostr = request.getParameter("echostr");// 
  134.         //验证 
  135.         if (Tools.checkSignature(_token, signature, timestamp, nonce)) { 
  136.             response.getWriter().write(echostr); 
  137.         } 
  138.     } 
  139.  
  140.     /** 
  141.      * 启动的时候加载wechat.properties配置 
  142.      * 可以在过滤器配置wechat.properties路径 
  143.      */ 
  144.     @Override 
  145.     public void init(FilterConfig config) throws ServletException { 
  146.         String cf = config.getInitParameter("conf"); 
  147.         if (cf != null) { 
  148.             conf = cf; 
  149.         } 
  150.         String classPath = this.getClass().getResource("/").getPath().replaceAll("%20", " "); 
  151.         conf = conf.replace("classPath:", classPath); 
  152.         p = new Properties(); 
  153.         File pfile = new File(conf); 
  154.         if (pfile.exists()) { 
  155.             try { 
  156.                 p.load(new FileInputStream(pfile)); 
  157.             } catch (FileNotFoundException e) { 
  158.                 logger.error("未找到wechat.properties", e); 
  159.             } catch (IOException e) { 
  160.                 logger.error("wechat.properties读取异常", e); 
  161.             } 
  162.         } 
  163.         logger.info("WeChatFilter已经启动!"); 
  164.     } 
  165.  

名称栏目:Java:实现微信公众平台
网站URL:http://www.36103.cn/qtweb/news15/21165.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联