java后台接收微信服務號/訂閱號消息


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 }
接收微信消息

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM