昨天同事找我看问题,说微信sssdk签名的时候提示invalid signature,由于之前开发过程中遇到过类似的问题,于是就想着用之前自己解决的方法去尝试解决,结果没有成功,现将分析过程以及解决方法总结如下:
1.首先分析的原因是配置的时候生成的一个校验文档没有放到项目的根目录下,但是经过测试,首次分享进入、Android进入是没有问题的,所以排除此可能性。
2.怀疑是可信域名配置有问题,经过查看配置的可信域名和实际访问的域名,发现是一致,并且首次分享进入、Android进入是没有问题的,所以也排除此种可能。
3.之前请求签名方法返回的数据类型和解析的数据类型不一致,之前返回的数据类型不是json格式的数据,需要使用veal()方法处理一下才可以,通过查看返回的数据发现数据返回的是json格式的,同时也排除此种原因。
4.通过分析不成功的机型发下Android手机通过分享链接进入是可以正常签名成功的,PC端微信也是可以签名成功的,只有苹果手机不行,于是将Android手机获得的链接和苹果手机获得的链接进行对比发现苹果手机获得的链接比Android手机多了一个isappinstalled参数,于是去网上了解了一下这个字段的含义,并且发现这个字段只有苹果手机上会有。当时想着可能是配置的链接和加上这个参数的链接不一致导致的签名不成功,于是就在请求签名的时候代码把多余的部分去掉了,结果还是不行。后来继续分析原因,发现请求签名的时候链接中带有一个参数是好使的,带有一个以上的参数就是签名失效,于是想到了将url进行encodeURIComponent()编码转换一下,结果是成功的。至此问题解决。
后记:当时还想到了将isappinstalled处理掉这个方法,不过没有尝试,不知道是不是能解决这个问题,等后面有时间了可以尝试一下。