【微信公众号对接】有关签名一直报错,提示invalid signature问题(我的签名和使用微信开发者工具验证返回的签名的是一致的)但还是报错!!!

文章描述了一位开发者遇到微信公众号API签名错误的情况,尽管签名与官方生成的一致,但仍然收到错误提示。解决方案包括检查服务器配置,如白名单和回调地址,并提供了后端获取微信签名的代码示例,以及前端如何使用这些签名进行配置。问题可能出在文件更新、URL处理或签名算法上。
摘要由CSDN通过智能技术生成
今天对接公众号,一直提示我签名有问题!但是我的签名和官方生成的签名一致,下面是对应数据比对

我的签名
在这里插入图片描述
微信官方提供签名
在这里插入图片描述

经过比对,两者是一致的,但是,就是一直提示错误! 后面是解决思路:
1、首先是需要在公众号管理平台配置对应服务器信息,包含白名单,回调地址等等;看图:

在这里插入图片描述在这里插入图片描述

说明:这里的.txt文件,如果你的服务重新发布了,然后恰巧你的文件夹被替换掉了,此时需要重新上传一下哦

在这里插入图片描述
在这里插入图片描述

以上配置完成之后,就是写接口啦;看官方文档就行;

在这里插入图片描述

下面是我的后端代码
  /**
     * 获取微信签名
     *
     * @param url
     * @return
     */
    @GetMapping("getJsSdkSign")
    public AjaxResult getJsSdkSign(String url) {
        return wechatOpenService.getJsSdkSign(url);
    }
	/**
     * 获取微信签名
     *
     * @param url
     * @return
     */
    @Override
    public AjaxResult getJsSdkSign(String url) {
        try {
            url = new URI(url).getPath();
        } catch (URISyntaxException e) {
            throw new RuntimeException(e);
        }
        AjaxResult result = new AjaxResult();
        String token = this.getToken();
        GetAccreditReq req = new GetAccreditReq();
        String nonceStr = UUID.randomUUID().toString();
        String timestamp = (System.currentTimeMillis() / 1000) + "";
        req.setToken(token);
        String content = "jsapi_ticket=" + this.getTicket(req) + "&noncestr=" + nonceStr + "&timestamp=" + timestamp + "&url=" + url;

        logger.info(String.format("获取微信签名-加密之前信息:%s", content));

        String signature = null;
        try {
            MessageDigest md = MessageDigest.getInstance("SHA-1");
            byte[] digest = md.digest(content.getBytes());
            signature = byteToStr(digest);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        String s = signature.toLowerCase();
        result.put("timestamp", timestamp);
        result.put("nonceStr", nonceStr);
        result.put("signature", s);
        result.put("url", url);

        logger.info(String.format("获取微信签名-加密之后信息:%s", s));
        return result;
    }


    public static String byteToStr(byte[] byteArray) {
        String strDigest = "";
        for (int i = 0; i < byteArray.length; i++) {
            strDigest += byteToHexStr(byteArray[i]);
        }
        return strDigest;
    }

    public static String byteToHexStr(byte mByte) {
        char[] Digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
        char[] tempArr = new char[2];
        tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
        tempArr[1] = Digit[mByte & 0X0F];
        String s = new String(tempArr);
        return s;
    }
前端代码
   import wx from 'weixin-js-sdk'
  getWeChat() {
        var url = encodeURIComponent(window.location.href.split("#")[0]);
        axios.get(process.env.VUE_APP_BASE_API + "/wechatOpen/getJsSdkSign", {
          params: {
            url: url
          }
        }).then(res => {
          console.log("/wechatOpen/getJsSdkSign", res)
          wx.config({
            debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
            appId: 'xxxxxxx', // 必填,公众号的唯一标识
            timestamp: res.data.timestamp, // 必填,生成签名的时间戳
            nonceStr: res.data.nonceStr, // 必填,生成签名的随机串
            signature: res.data.signature, // 必填,签名
            jsApiList: [
              'closeWindow', 'scanQRCode', 'chooseWXPay', 'openProductSpecificView', 'addCard', 'chooseCard',
              'openCard'
            ] // 必填,需要使用的JS接口列表 这里填写需要用到的微信api openlocation为使用微信内置地图查看位置接口,其中关闭浏览器的接口closeWindow(),也需要写在这个列表里面
          });
        })
        wx.ready(function() { //当页面加载完成时就需要调用的一些api需要写在ready里面,例如addCard,分享等。
          console.log("=====ready=====")
        });
        wx.error(function(res) { //微信api调用失败的回调函数
          console.log(res);
          console.log("=====error=====")
        });
      },
至此,如果你的签名也是准确的,.txt文件位置也是对的, 然后该配置的也配置了,理论上就可以正常啦
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

还算善良_

如果对你的工作有所帮助,拜托啦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值