• springboot进行微信公众号相关开发:(一)编写接口激活配置信息用,用以实现公众号与配置信息接口的绑定


    做后端开发,难免碰到对接微信公众号相关业务功能的时候,整理下相关的知识点,做个公众号博文系列用以备忘。

    因为正式公众号的限制挺多,所以一般使用微信公众平台的测试号进行相关功能接口的开发调试,开发完成后直接切换成相关的正式环境即可直接使用相关功能。

    做公众号相关业务,首先离不开的一个东西就是微信公众号配置信息的绑定激活,绑定激活成功后才可以使用微信公众号的各项功能。本文主要讲述微信公众号测试号管理页面的一些基础参数及配置信息的绑定激活方法。

    首先注册测试号进入测试号平台页面:
    在这里插入图片描述

    登录成功后,已经默认存在的信息包括右上角的微信号、正文部分的测试号信息模块的appID和appsecret,空缺的信息输入框包括接口配置信息模块的URL和Token、JS接口安全域名模块的域名。

    参数信息说明:

    (1)微信号是用以和关注用户等其他方交互用的身份标识,是微信固定给你的标识不可更改。

    (2)测试号信息模块的appID和appsecret是获取微信access_token用的身份标识和口令,在测试号内皆不可更改,但是在正式号内appsecret可以更改。

    (3)接口配置模块的URL用以微信公众号确定你的网络位置信息,你首先需要把这个信息提交给微信进行确认,相当于一个微信公众号方面的注册备案。微信确定这个地址是你的后,会把这个地址与你绑定,以后来自此地址的信息即视为你的调用,同样微信会把与你有关的信息通过这个地址发送给你。微信所有的功能使用必须首先从该配置信息的激活生效开始,所以你首先必须存在这么一个与微信进行交互的接口。这个接口的激活逻辑是,你输入接口地址,点击确定后,微信会以GET形式发送一些参数到接口内,参数如下:

    参数描述
    signature微信加密签名,signature结合了开发者填写的 token 参数和请求中的 timestamp 参数、nonce参数。
    timestamp时间戳
    nonce随机数
    echostr随机字符串

    可以看到,微信会发送四个参数,其中签名+时间戳+随机数用以确定请求方的合法性,让你验证是否是来自微信,echostr随机字符串用以在你验证没问题后响应回复给微信,微信收到响应的随机字符串与发送的一致,则会把该接口与你的微信号(右上角那个)进行绑定。

    接口配置模块的Token用以配合签名+时间戳+随机数进行身份验证,确认请求来自微信是合法请求,token的值自己随便输入一个字符串即可,输入什么值,自己校验的时候就使用什么值进行校验。比如我这里使用“gbx”作为Token,我校验的时候也必须使用这个值。

    校验的方式,官方文档如下:

    开发者通过检验 signature 对请求进行校验(下面有校验方式)。若确认此次 GET 请求来自微信服务器,请原样返回 echostr 参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下:
    
    1)将token、timestamp、nonce三个参数进行字典序排序 2)将三个参数字符串拼接成一个字符串进行sha1加密 3)开发者获得加密后的字符串可与 signature 对比,标识该请求来源于微信
    
    • 1
    • 2
    • 3

    因为URL和Token填写完成点击确定时,微信会立即发送请求到接口,所以我们在页面填写信息前需要提前按照要求准备好接口处理。因为我们本地调试没有公网环境,没有公网环境的情况下我们没法产生一个可以接受微信请求的地址,所以我们必须拥有一个外网地址才可以进行后续的操作,所以此处我们一般需要使用第三方工具获得一个虚拟的外网地址,从而获得内网穿透能力。博主使用的是花生壳,博主花几块钱开通了个基础体验版,使用其中的https模式产生一个外网地址绑定我本地springboot程序的5232端口(启动springboot后再绑定花生壳,否则花生壳可能因为端口空置而绑定失败)。

    花生壳配置图如下:
    在这里插入图片描述

    花生壳激活启用如下:
    在这里插入图片描述

    右侧提示连接成功并且没有红色错误提示,此时代表花生壳绑定成功,你可以使用绑定的外网地址在postman工具上直接调用你的测试接口看看是否成功,如果没问题,此时可以编写微信激活接口了。

    根据之前激活方式说明,编写接口如下:

        /**
         * 恒定配置接口:get类型用以响应微信发送的Token验证,启用微信相关功能
         *
         * @param signature 签名
         * @param timestamp 时间戳
         * @param nonce     随机数
         * @param echostr   验签成功后的返回值
         * @return 返回值
         */
        @GetMapping("/auth")
        public String sayHi(String signature, String timestamp, String nonce, String echostr) {
            String token = "gbx";
    
            List<String> strList = new ArrayList<>();
            strList.add(token);
            strList.add(timestamp);
            strList.add(nonce);
            //对参数进行字典序排序
            Collections.sort(strList);
    
            //生成待验签字符串
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.append(strList.get(0));
            stringBuilder.append(strList.get(1));
            stringBuilder.append(strList.get(2));
            String str = stringBuilder.toString();
    
            //按照指定算法生成签名(sha1)
            Digester sha1 = new Digester(DigestAlgorithm.SHA1);
            String digestHex = sha1.digestHex(str);
    
            //验签
            if (signature.equals(digestHex)) {
                log.info("验证成功!");
                //验签成功后响应指定参数
                return echostr;
            } else {
                return "error";
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    编写完成接口,重启springboot使其生效,确认接口没问题后,在接口配置信息内配置上你的URL接口地址和Token,点击确定,如果没错误提示,界面从输入框变成文档页面如我图中一样那就证明激活绑定成功。

  • 相关阅读:
    《中国棒球》:推进备战·开启新篇章
    微信小程序使用vant组件的输入框搭配弹层选择器注意事项
    web前端开发基础---制作表单类页面
    c语言编程题经典100例——(41~45例)
    MapReduce核心原理(下)
    易点易动固定资产管理系统场景应用一:集成ERP/财务系统
    Linux 救援模式
    基于PHP+MySQL的校园餐厅展示订餐系统
    java面向对象的三大特征【继承、封装、多态】
    Docker基本使用
  • 原文地址:https://blog.csdn.net/yssa1125001/article/details/126347371