收藏
回答

出现 realAuthUrl errMsg:config:invalid signature ?


已确保:

1.签名算法正确,已经过微信工具进行校验

2.前后端用于config的所有参数均一致,没有任何差异

3.access_token和jsapi_ticket均已进行7200秒缓存,失效后自动重新获取并缓存

4.公众号已配置js安全域名(https://applet.chinaant.net),并已配置该域名和后台所在服务器的公网IP白名单


目前怀疑原因:

url不正确,但不知道为什么不正确,已参照网上说的方案,前端处理url后进行传递,但仍会出现报错

created() {
  const script = document.createElement("script");
  script.type = "text/javascript";
  script.src = "https://res2.wx.qq.com/open/js/jweixin-1.6.0.js";
  document.body.appendChild(script);

  let url = location.href.split("#")[0];

  this.$message.toast(url);

  setTimeout(async () => {
    let data = await this.$http.quitRequest(this.$app.h5Server + "/jsapi/configJsSdk", {url: encodeURIComponent(url)});
    let config = data.list[0];

    console.log(config)

    wx.config({
      debug: true,
      appId: config.appId, // 必填,公众号的唯一标识
      timestamp: config.timestamp, // 必填,生成签名的时间戳
      nonceStr: config.nonceStr, // 必填,生成签名的随机串
      signature: config.signature,// 必填,签名
      jsApiList: ["openLocation"], // 必填,需要使用的JS接口列表
      openTagList: ["wx-open-launch-weapp"] // 可选,需要使用的开放标签列表,例如['wx-open-launch-app']
    });

    wx.ready(() => {

    });
    
    wx.error((res) => {
      console.log(res)
    });
  }, 100);
}


回答关注问题邀请回答
收藏

23 个回答

  • 哄哄
    哄哄
    2022-07-17

    用react写jssdk注册遇到类似的问题,路由用的browserRouter, 如果在a页面注册成功,然后跳转b页面,在b页面刷新一下,再回到a页面就会提示realAuthUrl errMsg:config:invalid signature。

    问题原因分析:

    http://xxx.com/a 注册成功后,去到b页面刷新后页面地址就会变成http://xxx.com/b

    此时再回来a,react路由显示的页面地址是http://xxx.com/a,但是实际前端地址还是http://xxx.com/b

    故导致realAuthUrl errMsg:config:invalid signature。

    我的解决方案:

    在单页入口,把当前页面的地址设置缓存,当在b页面刷新的时就会把缓存设置为http://xxx.com/b

    此时再回来a页面注册jssdk取缓存中的http://xxx.com/b就会注册成功。

    2022-07-17
    有用 3
    回复 1
    • 🥂
      🥂
      06-07
      就是这个原因,写的很好,不过我的解决方案是在wx.error里面重新刷新页面window.location.reload();在页面重新刷新一下,体验稍差点,但是很简单
      06-07
      回复
  • 韩焙
    韩焙
    2022-04-24

    您好,请问下您解决了吗?遇到了一摸一样的问题

    2022-04-24
    有用 3
    回复
  • 怦然心动zc
    怦然心动zc
    2023-10-18

    补一个解决方案:https://www.jianshu.com/p/e8eecf1f13c4

    2023-10-18
    有用 2
    回复
  • 陈伟峰
    陈伟峰
    2023-05-08

    这个问题是由于微信获取URL进行签名验证的时候,URL不是最新的。对于SPA应用来说,URL会变,但微信用于签名验证的URL始终是第一次打开SPA的地址。

    搞清楚问题原因,就好解决了。

    就是SPA需要在初始化的时候,把URL记下来,用于生成签名。

    2023-05-08
    有用 2
    回复 3
    • momo
      momo
      06-29
      没错没错,我的也是这样解决了,我在app.vue的onLaunch把window.location.href存下来了,传给后台生成签名的时候配置url使用,因为我的入口有多个,如果生成签名配置的url写死的话,那我从其它口进的时候这里的wx.error就会被触发
      06-29
      回复
    • 喵~~🌈
      喵~~🌈
      07-17
      使用hash路由可以直接解决这个问题吗?然后取btoa(location.split('#')[0]),后端再用base64转一次?
      07-17
      回复
    • 桃子
      桃子
      10-24回复momo
      window.location.href这个东西不就是http://www.XXX.com/,无论什么时候记录都是这个地址啊,所有vue页面都是http://www.XXX.com/#/XXXX/XXXX
      10-24
      回复
  • LauHing[666]
    LauHing[666]
    11-13

    自己的经验,可以按顺序排查

    1、如果是单页应用,需要取进入页面时的页面路径来验签,安卓动态取链接来延签

    2、检查进入链接时,是否有特殊字符,比如!'()*。因为有一个特殊场景,encodeURIComponent是不会转义这些字符的,如果是小程序webview打开H5链接的场景,参数的值有这些特殊字符,也会无法转义,然后进入到页面,微信就会拿第一个进入的链接来验签(待括号的),但是浏览器又会把括号转义,造成H5的js获取到的是括号被转义的链接(举例,没转义:a.b.com/f=(k),转义的a.b.com/f=%28k%29)


    11-13
    有用
    回复
  • 桃子
    桃子
    10-08

    是不是hash模式下就无解?

    10-08
    有用
    回复
  • fairy融
    fairy融
    08-06

    测试环境的安全域名在测试公众号配置哈!!!耗时半天终于找到原因了

    08-06
    有用
    回复
  • 山月
    山月
    2023-12-22

    你们的加密是服务端加密的吗?还是前端自己加密


    2023-12-22
    有用
    回复
  • ruinb0w
    ruinb0w
    2023-09-15

    哪位解决了能给个demo吗? 签名校对过没问题, 怀疑是url但试了好几种还是报错

    2023-09-15
    有用
    回复 1
  • 漠尘
    漠尘
    2023-06-07

    我的是企微的页面,遇到同样的问题,关键我们页面都上线很久了,没做任何改动,有一天突然就不行了,只要页面url上带&,wx.config()就会报invalid signature, 去掉&就可以。

    2023-06-07
    有用
    回复

正在加载...

登录 后发表内容