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

阅读 12.2k
5 个回答
新手上路,请多包涵

哈哈,自己找到了问题所在,这里跟大家分享一下吧。
我的问题主要是二次分享时签名就会无效,原因就是二次分享的连接被微信加上了参数,有两个(或者更多),这样二次分享的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, 不然就会出现问题,而且是很难发现的这个致命错误

微信签名不正确,一般原因是,传给服务器端的url和分享的link不一致导致。所以务必保证一致。
eg: 分享的信息

 wx.onMenuShareTimeline({
            title: '上南瓜租房,找品牌公寓',
            link: window.location.href.split('#')[0],
            imgUrl: 'https://pic.kuaizhan.com/g3/42/d4/5a65-2d67-4947-97fd-9844135d1fb764/imageView/v1/thumbnail/200x200',
            desc: '南瓜租房,只租真房源!',
}); //分享到朋友圈

和调用接口以获取签名信息,传递的url参数

    Service.get('https://wx-open-api.focus.cn/ajax/wxJsConfig', {
        url: encodeURIComponent(window.location.href.split('#')[0]),
        sceneType: 6,
    })

两个url要保持一致。注意给接口传递url参数时,要对url编码,要不然接收的参数会由于特殊字符(eg: &)给中断
项目展示(spa,路由h5 history):https://m.focus.cn/bj/nangua/...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏