1 @Controller2 @RequestMapping("/wecha")3 public class WeChaturlController extendsBaseController {4
5 private final static Logger logger = Logger.getLogger(WeChaturlController.class.getName());6
7 @Resource8 privateINewsCommentService newsCommentService;9 @Resource10 privateIReviewNewsService reviewNewsService;11 @Resource12 protectedIWaitParseDao waitParseDao;13
14 public static String BIND_TOKEN = "CX_TEST";15 private static SAXReader saxReader = newSAXReader();16
17 /**
18 * 消息接收端19 *@paramresponse20 *@paramrequest21 */
22 @RequestMapping(value = "/get")23 public voidmsgIn(HttpServletResponse response, HttpServletRequest request) {24 if ("GET".equals(request.getMethod())) {25 bindMsg(response, request);26 } else if ("POST".equals(request.getMethod())) {27 if(WxBaseCheck.checkSignature(request, BIND_TOKEN)) {28 handleMsgIn(response, request);29 } else{30 logger.warn("消息验证失败,来源不是微信!");31 }32 }33 }34
35 /**
36 * 腾讯通过GET请求进行绑定37 *@paramresponse38 *@paramrequest39 */
40 public voidbindMsg(HttpServletResponse response, HttpServletRequest request) {41 try{42 String echostr = request.getParameter("echostr");43 //System.out.println(WxBaseCheck.checkSignature(request,44 //BIND_TOKEN));
45 if(WxBaseCheck.checkSignature(request, BIND_TOKEN)) {46 logger.warn("公众平台与本系统成功绑定!可以开始通信~~~");47 response.getWriter().write(echostr);48 } else{49 response.getWriter().write("");50 }51 } catch(IOException e) {52 logger.warn("绑定URL时:" +e.getMessage());53 e.printStackTrace();54 }55 }56
57 /**
58 * 处理腾讯服务器发送过来的消息59 *@paramresponse60 *@paramrequest61 */
62 public voidhandleMsgIn(HttpServletResponse response, HttpServletRequest request) {63 try{64 //使用response的时候必须要设置响应头,不然会乱码~~~
65 response.setHeader("Content-type", "text/xml;charset=UTF-8");66 //从request中取得输入流67 //读取输入流
68 Document document =saxReader.read(request.getInputStream());69 //得到xml根元素
70 Element element =document.getRootElement();71 //System.out.println("接口接受xml:"+element.asXML());72 //将解析结果存储在HashMap中
73 Map msgMap =XmlHandler.xmlToMap(element);74 String text = msgMap.get("Content");75 System.out.println("微信收到消息:" +text);76 Pattern pattern =GetUrl.WEB_URL;77 Matcher matcher =pattern.matcher(text);78 if(matcher.find()) {79 //取字符串中的链接,链接结尾必须有空格 必须有http 或 https开头80 //System.out.println(matcher.group());
81 if (newBrandUrlUtil().isBrandUrl(matcher.group())) {82 //链接初始化入库
83 this.newsCommentService.initNews(matcher.group());84 } else{85 //链接 未收录86 //WaitParse waitParse = new WaitParse();87 //waitParse.setUrl(matcher.group());88 //waitParse.setInfoType(0);89 //WaitParse dbWaitParse = this.waitParseDao.getWaitParse(waitParse);90 //if (dbWaitParse == null) {91 //waitParse.setCreateTime(new Date());92 //this.waitParseDao.insertWaitParse(waitParse);93 //}
94 logger.warn("微信公众号收到的链接,系统未收录[" + matcher.group() + "]");95 }96 } else{97 //其他消息 不包含链接
98 }99
100 } catch(Exception e) {101 logger.warn("微信收录链接时:" +e.toString());102 }103 }104
105 }