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 }
接收微信消息
原文地址:https://www.cnblogs.com/atimo/p/10565705.html