Heim >Backend-Entwicklung >PHP-Tutorial >javascript - 微信接口调用一直是 invalid signature

javascript - 微信接口调用一直是 invalid signature

WBOY
WBOYOriginal
2016-06-06 20:37:511255Durchsuche

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

javascript - 微信接口调用一直是 invalid signature

我这里获取签名的方法是在静态页面里通过异步传递当前url给php来获取,方法如下:
javascript - 微信接口调用一直是 invalid signature

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就跟直接访问时是一样的了,但是签名依然无效!!
都要疯了~~~
谢谢各位了~~~

回复内容:

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

javascript - 微信接口调用一直是 invalid signature

我这里获取签名的方法是在静态页面里通过异步传递当前url给php来获取,方法如下:
javascript - 微信接口调用一直是 invalid signature

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, 不然就会出现问题,而且是很难发现的这个致命错误

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn