天天看点

微信或企业微信js签名验证失败(wx.config()初始化失败 invalid signature)

本文主要是记录后台在获取js签名时,url中有空格,因编码方式不同,导致链接不一致生成的签名不同 的问题

如果你遇到的情况与此无关,避免浪费时间本文可以忽略,可以直接看签名参数sign生成说明及注意事项是否能有帮助

如果你也遇到这个问题,那么你的坑,我来趟。

首先明确方向,在保证appid等客户端参数正确的情况下,考虑是url不对齐导致。固定参数不对,移步google。

      页面跳转的url要跟目标页面链接保持一致

如页面上使用的是拼接链接的方式到controller中

window.location = "${basePath}/inspect/peccancyListTo/" + pid + "?startTime=" + startTime + "&endTime=" + endTime + "&type=" + options.val();
           

那么后台再获取url并使用时需要处理,使得链接对齐

String url = request.getRequestURL().toString() + "?startTime=" + startTime + "&endTime=" + endTime + "&type="+ typeString;
           

然而,凡事都有但是,这次遇到的情况,以为是出现了问题,最后才发现这个但是,还是自己的问题。

通过后台debug的方式得到后台获取signature时的几个参数,并放到微信js接口签名校验工具校验,发现相同的参数,最后得到签名不一样!!

经过反复的查找,补漏甚至都要放弃的时候发现了端倪。我的链接明明是这样的:

微信或企业微信js签名验证失败(wx.config()初始化失败 invalid signature)

签名工具最后得到的string竟然是这样的!

微信或企业微信js签名验证失败(wx.config()初始化失败 invalid signature)

空格竟然给我换成了“+”号 , 这能对吗??一番查阅,得到了问题的所在 ------  某些语言的urlencode方法会把“空格”编码为“+”,实际上应该编码为“%20”。所以这校验工具 , emmmmm。。。。。

解决方案: 后台直接处理链接把空格替换成十六进制

String url = request.getRequestURL().toString() + "?startTime=" + startTime.replace(" ", "%20") + "&endTime=" + endTime.replace(" ", "%20") + "&type="+ typeString;
           

所以,归根接地,还是一开始的问题。。参考链接 : 签名参数sign生成说明及注意事项

继续阅读