1.申請訂閱號(適合個人)或者服務號(適合企業)
微信公眾平台
2.填寫配置
服務器地址: 需要接收消息 的服務端接口地址
令牌:通話識別碼,隨便寫,后端接收時,使用一樣的就可以了。
消息加密秘鑰 :(目前不用)
提交這些配置信息,就能與后端通訊了,這個項目使用的是SSM框架,springboot項目做的后端接收。
注:
因為項目在本地測試,需要用到內網穿透相關。
這里就不一一敘述了這里有教程,不懂可以問我。QQ:794171011
實現的效果 : 接收到 用戶給公眾號發送的消息,並處理。
有圖有真相
我這里的功能比較簡單只是過濾消息中的 鏈接
附上代碼:

1 @Controller 2 @RequestMapping("/wecha") 3 public class WeChaturlController extends BaseController { 4 5 private final static Logger logger = Logger.getLogger(WeChaturlController.class.getName()); 6 7 @Resource 8 private INewsCommentService newsCommentService; 9 @Resource 10 private IReviewNewsService reviewNewsService; 11 @Resource 12 protected IWaitParseDao waitParseDao; 13 14 public static String BIND_TOKEN = "CX_TEST"; 15 private static SAXReader saxReader = new SAXReader(); 16 17 /** 18 * 消息接收端 19 * @param response 20 * @param request 21 */ 22 @RequestMapping(value = "/get") 23 public void msgIn(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 * @param response 38 * @param request 39 */ 40 public void bindMsg(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 * @param response 60 * @param request 61 */ 62 public void handleMsgIn(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<String, String> 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 (new BrandUrlUtil().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 }