直接说问题,先看公众号配置
附加: js安全域名 例如: 线上是www.aa.com/bb 我配置了多个(js安全域名最多配置5个) www.aa.com/bb和www.aa.com
这里后端返回的nonceStr长度36位,这里我看到别人返回的一般是16位或者32位,(这里我也是有疑问的)
这里 官方说的是
- 签名用的 noncestr 和timestamp必须与 wx.config 中的 nonceStr 和timestamp相同。
- 签名用的 url 必须是调用 JS 接口页面的完整URL。
- 出于安全考虑,开发者必须在服务器端实现签名的逻辑。
但是 附录5-常见错误及解决方法 invalid signature
3.确认 url 是页面完整的url(请在当前页面alert(location.href.split('#')[0])确认),包括'http(s)://'
部分,以及'?'后面的 GET 参数部分,但不包括'#'hash后面的部分。
6. 确保你获取用来签名的 url 是动态获取的,动态页面可参见实例代码中 php 的实现方式。如果是 html 的静态页面在前端通过 ajax 将url传到后台签名,前端需要用 js 获取当前页面除去'#'hash部分的链接(可用location.href.split('#')[0]获取,而且需要encodeURIComponent),因为页面一旦分享,微信客户端会在你的链接末尾加入其它参数,如果不是动态获取当前链接,将导致分享后的页面签名失败。
这俩点和上面的 第 2 点 和 附录5的第三点 又出现冲突
后端代码:
真机报错:
微信的文档里面一句跟 realAuthUrl 有关的都没有,写nm的文档
有解决嘛,测试环境突然出现这个问题,马上就要上线了着急!!!
另外其实我想明白这个报错到底是什么意思
realAuthUrl这个数组代表什么意思?
自己的经验,可以按顺序排查
1、如果是单页应用,需要取进入页面时的页面路径来验签,安卓动态取链接来延签
2、检查进入链接时,是否有特殊字符,比如!'()*。因为有一个特殊场景,encodeURIComponent是不会转义这些字符的,如果是小程序webview打开H5链接的场景,参数的值有这些特殊字符,也会无法转义,然后进入到页面,微信就会拿第一个进入的链接来验签(待括号的),但是浏览器又会把括号转义,造成H5的js获取到的是括号被转义的链接(举例,没转义:a.b.com/f=(k),转义的a.b.com/f=%28k%29)
2024/05/19,24年了,请问这个解决了吗?
所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用,目前Android微信客户端不支持pushState的H5新特性,所以使用pushState来实现web app的页面会导致签名失败,此问题会在Android6.2中修复)。
参考:https://developers.weixin.qq.com/community/minihome/doc/0002cc0dca87480b0a9d4f83651c00?page=1、https://www.jianshu.com/p/e8eecf1f13c4
在页面alert(location.href.split('#')[0]) 看看是否一致
请问解决了么 真的好坑啊