微信接口调用一直是 invalid signature

最近在开发过程中用到微信的分享接口,但是按照他的文档来生成签名时,却一直出现invalid signature 的情况。
按照他提供的检测工具,检测出来的结果是正确的。

我这里获取签名的方法是在静态页面里通过异步传递当前url给php来获取,方法如下:

php获取方法使用的就是官方提供的例子修改的,签名算法应该没有问题。
url获取方法是参考http://segmentfault.com/q/1010000002502269,这个来实现的。
请问有人知道这是什么问题吗?
PS:刚刚测试发现,在手机上直接访问页面www.8-yi.com/passby/,然后是可以正常分享的,也就是签名正确了,但是分享以后(分享设置的link是:www.8-yi.com/passby/),再点开就会出现签名无效的情况,alert发现url后面被追加了一些微信的参数,但是即使这样,url也不算是错误的吧?为什么算出来的签名就是无效的呢?
因为我的url本身不需要参数,所以我把url获取方法改成:
var targetUrl = location.href.split?[0];//这里以 ? 作为分割,获取url
这样这里获取的url就跟直接访问时是一样的了,但是签名依然无效!!
都要疯了~~~
谢谢各位了~~~

哈哈,自己找到了问题所在,这里跟大家分享一下吧。
我的问题主要是二次分享时签名就会无效,原因就是二次分享的连接被微信加上了参数,有两个或者更多,这样二次分享的url就变成了www.8-yi.com/passby/index.html?from=singlemessage&isappinstalled=0
注意这里的&符号,由于我使用的是get方法,这样服务端接收到的url就会丢失&后面的字符,所以导致url不正确,进而导致签名无效。
解决方法也很简单,就是在传递参数之前把这个字符转成编码,像这样:
var targetUrl = location.href.split#[0];
targetUrl = targetUrl.replace&, %26;
就可以了

收藏学习了。。。。。。。。。。。。

如果进入就报invalid signature错误怎么解决,用的是官方的jssdk和sample文件,微信的测试号appid和appSecret

地址不能是www.sxsxsx/aad/

一定要吧地址写完整,index.php, 不然就会出现问题,而且是很难发现的这个致命错误

发表评论

电子邮件地址不会被公开。 必填项已用*标注