关于Java本地服务接入微信平台进行调试的实现

趋于愈来愈多的社交需求,使得微信公众平台开放了许多可接入、定制的个性化接口,例如:消息的收发管理、素材管理等等。html

本文是基于你已有公众号或者微信公众测试号的状况下进行介绍的。git

首先说一下要用到的主要工具。github

  1. QQ浏览器
  2. 微信调试工具(QQ浏览器插件)
  3. fastweixin微信公众号快速开发工具(GitHub地址:fastweixin)
  4. SpringMVC开发框架
  5. Maven构建工具

这里关于springMVC的搭建就再也不赘述,由于每一个人搭建的方式也不尽相同,本文是使用的注解的方式来搭建的。spring

1.使用微信号登陆微信公众测试号(公众测试号登录地址)浏览器

微信公众测试号

咱们看到这里要求填写对接咱们使用springMVC搭建的服务地址,从开发的角度来说,即便咱们有一台服务器,咱们也不能每写一段代码都发布到服务器中测试一下吧?安全

2.使用QQ浏览器微信调试工具进行本地调试服务器

那刚好QQ浏览器的一个插件帮咱们解决了这个问题(该插件可在QQ浏览器的应用中心经过搜索“微信调试工具”找到),而且提供了两种不一样的接入方式来调试公众平台的接口,以下图所示:微信

微信调试工具

咱们选择服务器端调试。微信公众平台

服务器端调试模式

这里的绑定服务咱们能够填写咱们本地所启动的服务,例如个人服务监听的是8889端口,那么我能够直接填写8889,点击启动后会获得一个可供他人访问的外部地址,以下图所示:框架

产生外部地址

3.在服务中验证服务绑定逻辑

接下来咱们在本地的服务中新建一个控制器来接收服务器的配置请求并予以回应完成服务的绑定和验证(请注意这里咱们是用的是springMVC注解形式搭建的服务),以下图所示:

本地Ctrl

这里咱们使用了fastweixin的工具库,控制器直接继承了库中的WeixinControllerSupport,稍后咱们将重写当中的某些方法进行服务绑定与消息收发,代码以下:

/**
     * 重写服务绑定.
     *
     * @param request  http请求
     * @param response http响应
     */
    @Override
    public void bindServer(HttpServletRequest request, HttpServletResponse response) {
        SignValiUtil signValiUtil = new SignValiUtil();
        // 验证微信签名
        if (signValiUtil.validSignature(request.getParameter("signature"),
                request.getParameter("timestamp"), request.getParameter("nonce"), weChatConf)) {
            // 执行绑定返回
            super.bindServer(request, response);
            LogPool.wechatLogger.info("执行微信第三方服务地址绑定:{}", "成功");
        } else {
            LogPool.wechatLogger.info("执行微信第三方服务地址绑定:{}", "失败");
        }
    }

这里的验证逻辑稍后再细说,或者你们能够直接移步这里了解具体怎么作的验证微信验证服务地址有效性

到这里咱们建立好了验证的ctrl,也就是说在图1中的URL咱们能够大胆的填写如下地址了:

http://dmom36u5kx.proxy.qqbrowser.cc/laughingwechat

那么Token又是什么呢?官方是给咱们这么解释的

Token可由开发者能够任意填写,用做生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)。

那至于你把token放在服务中什么地方,就由读者本身决定了,我这里是使用了properties存储而且在服务启动时自动读取加载到某个类模型中。

这里咱们填好了Token,在服务中咱们也重写了服务绑定的验证逻辑,先不着急点提交,咱们来了解一下服务验证时怎么完成的。

微信的服务器在验证的时候会请求咱们所填写的URL,其中带有如下四个参数:

  1. signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
  2. timestamp 时间戳
  3. nonce 随机数
  4. echostr 随机字符串(用于验证成功后返回给微信服务器)

接着咱们的bindServer方法作了如下几个动做(官方文档中是有的):

  1. 将的token、timestamp、nonce三个参数进行字典序排序
  2. 将三个参数字符串拼接成一个字符串进行sha1加密
  3. 开发者得到加密后的字符串可与signature对比,标识该请求来源于微信

在3执行确认一致后就能够返回微信给咱们的echostr字符串了(固然有的同窗说能够直接返回echostr,固然也能够,fastweixin的内部默认就是这么作的,可是出于安全性考虑仍是验证一下吧)。

接着,咱们启动服务。点击提交。

验证配置成功后以下图所示:

微信服务器验证成功

这个时候你能够重写一下WeixinControllerSupport中的handleTextMsg方法并在控制台打印一下。

接着,扫描关注公众测试号中为咱们提供的测试号的二维码,尝试给公众号发一条消息,你会在控制台看到消息的具体内容。

至此,你的服务已经绑定成功了!

PS:具体其余接口的使用请移步微信公众平台开发文档

相关文章
相关标签/搜索