首页 > 上网技巧 > 电脑小技巧 > 解决微信jssdk 签名错误 invalid signature

解决微信jssdk 签名错误 invalid signature

时间:2018-10-21 10:31 作者:QQ地带 我要评论

`最近手头业务,移动端页面在微信浏览器中分享转发的时候没有缩率图,只有标题和链接。
 
 按照微信的官网自定义分享功能,引入jssdk ,结果调试,一直报错 签名错误,invalid signature。
 
按照微信公众平台的开发文档,签名错误排查方法如下:
 
 
 
invalid signature签名错误建议按如下顺序检查:
 
(1)确认签名算法正确,可用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 页面工具进行校验。
 
(2)确认config中nonceStr(js中驼峰标准大写S), timestamp与用以签名中的对应noncestr, timestamp一致。
 
(3)确认url是页面完整的url(请在当前页面alert(location.href.split('#')[0])确认),包括'http(s)://'部分,以及'?'后面的GET参数部分,但不包括'#'hash后面的部分。
 
(4)确认 config 中的 appid 与用来获取 jsapi_ticket 的 appid 一致。
 
(5)确保一定缓存access_token和jsapi_ticket。
 
(6)确保你获取用来签名的url是动态获取的,动态页面可参见实例代码中php的实现方式。如果是html的静态页面在前端通过ajax将url传到后台签名,前端需要用js获取当前页面除去'#'hash部分的链接(可用location.href.split('#')[0]获取,而且需要encodeURIComponent),因为页面一旦分享,微信客户端会在你的链接末尾加入其它参数,如果不是动态获取当前链接,将导致分享后的页面签名失败。
 
通过微信签名工具验证,完全符合。前端config 的nonceStr 也无写法错误,非常纳闷。
 
如果后台返回的config 信息 与微信签名工具校验一致的话,那很有可能是前端访问的url和后台生成签名的url不一致导致,
 
通过前后台打印分析,url 地址完全一致。我做的是前端传递url给后台,后台接收到的url参与生成签名。这时候注意到,前端传递的url地址是经过 encodeURIComponent的,所以后台接收到需要 decode 一下,比如php 可以用urldecode 函数,再一尝试,成功。。。。。。。
 
总结如果出现 invalid signature,首先可以确定的是你的签名算法有问题。
 
签名错误的排查可以这样来:
 
1:确保基本的appid 正确,获取的access_token和jsapi_ticket 正确
 
2:校验签名,可用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 页面工具进行校验。
 
3:如果签名一致,那问题基本出在浏览器访问的url和参与生成签名的url不一致。
 
最后附上jssdk的步骤
 
1:在微信公众号后台配置js 安全域名,即需要引入jssdk的页面域名。 需要在域名根目录下放置微信的检测文件。
 
2:配置出ip白名单
 
3:后台开发人员生成签名传递给前台
 
4:前端页面引入script方式 jssdk文件
 
5:通过ajax获取config 配置,完成config 配置后即可使用jssdk的各项功能了。
 

标签: 微信
顶一下
(0)
0%
踩一下
(0)
0%

Google提供的广告