已确保:
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);
}
用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就会注册成功。
您好,请问下您解决了吗?遇到了一摸一样的问题
补一个解决方案:https://www.jianshu.com/p/e8eecf1f13c4
这个问题是由于微信获取URL进行签名验证的时候,URL不是最新的。对于SPA应用来说,URL会变,但微信用于签名验证的URL始终是第一次打开SPA的地址。
搞清楚问题原因,就好解决了。
就是SPA需要在初始化的时候,把URL记下来,用于生成签名。
自己的经验,可以按顺序排查
1、如果是单页应用,需要取进入页面时的页面路径来验签,安卓动态取链接来延签
2、检查进入链接时,是否有特殊字符,比如!'()*。因为有一个特殊场景,encodeURIComponent是不会转义这些字符的,如果是小程序webview打开H5链接的场景,参数的值有这些特殊字符,也会无法转义,然后进入到页面,微信就会拿第一个进入的链接来验签(待括号的),但是浏览器又会把括号转义,造成H5的js获取到的是括号被转义的链接(举例,没转义:a.b.com/f=(k),转义的a.b.com/f=%28k%29)
是不是hash模式下就无解?
测试环境的安全域名在测试公众号配置哈!!!耗时半天终于找到原因了
你们的加密是服务端加密的吗?还是前端自己加密
哪位解决了能给个demo吗? 签名校对过没问题, 怀疑是url但试了好几种还是报错
我的是企微的页面,遇到同样的问题,关键我们页面都上线很久了,没做任何改动,有一天突然就不行了,只要页面url上带&,wx.config()就会报invalid signature, 去掉&就可以。