• 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 }
    接收微信消息
  • 相关阅读:
    ASP.NET(C#)图片加文字、图片水印
    CMake构建Visual Studio中MFC项目的Unicode问题
    用Visual Studio 2008(VS)编译WebKit的r63513
    此时学习中
    ASP.NET进阶——初学者的提高(长期)
    继续努力
    程序员阿士顿的故事
    iOS 深拷贝和浅拷贝
    Javascript中this的取值
    Lisp的本质(The Nature of Lisp)
  • 原文地址:https://www.cnblogs.com/atimo/p/10565705.html
Copyright © 2020-2023  润新知