微信 Web App 开发, js-sdk 遇到 invalid signature 等错误,求帮助赠红包

2016-08-03 12:49:51 +08:00
 learnshare

目前的状况:

暂时规划包括支付和录音,支付已完成,并且一切正常。录音部分被 js-sdk 卡住了。

错误描述:

可以确定的是签名算法等后端逻辑没问题。
然后在不同的页面调用 wx.config(),如果只给 jsApiList 'chooseWXPay' 一个参数,则正常执行;如果再添加 'startRecord' 或者更多参数,会在两个不同的页面遇到不同的问题:

  1. app.com/me "config:invalid url domain"
  2. app.com/resource/[resourceId]/detail "config:invalid signature"

寻求帮助:

因为发给 weixin-open@qq.com 的邮件并没有收到回复,所以在这里呼叫一下腾讯或微信团队的朋友,希望能得到帮助。

或者有朋友处理过 js-sdk 录音的功能,也希望能够得到你的帮助。

请联系我 learnshare.hjq#gmail , wechat: LearnShare
或者留下你的联系方式 :)

解决问题发红包(个人出,也努力从老板兜里掏几毛)

感谢各位。

4370 次点击
所在节点    微信
39 条回复
learnshare
2016-08-03 16:28:19 +08:00
@pubby
@alichen 后端部分没有问题,因为同样的签名,支付是可以正常用的。

现在是除了 chooseW XPay ,其他 js-sdk 的接口权限都会导致 invalid signature.
learnshare
2016-08-03 16:28:41 +08:00
@xxxyyy 单独 chooseWXPay 是正常的
sxyclint
2016-08-03 17:09:40 +08:00
首先微信提供了签名的算法,可以比对下结果看看是不是正确;
页面注入配置的时候, url 申请的签名要和微信在浏览器里的那个域名对应上,也就是一个 url 一个签名
jdlau
2016-08-03 17:13:40 +08:00
参数顺序对了没
learnshare
2016-08-03 17:29:55 +08:00
@sxyclint 签名已经验证过, URL 也没有问题

@jdlau 参数顺序并不影响这个问题,因为只要是非 chooseWXPay 的权限,都会签名无效
xxxyyy
2016-08-03 17:43:28 +08:00
信息太少不好判断

页面是单页面应用,还是传统的页面?
签名是通过 ajax 获取的,还是直接渲染在页面上的?
learnshare
2016-08-03 18:09:22 +08:00
@xxxyyy 基于 Angular.js 的单页应用,通过 Ajax 从后端 API 获取的签名数据
xxxyyy
2016-08-03 18:22:39 +08:00
@learnshare 那通过 ajax 发送 URL 前是否 encode 了,后端接受到 URL 后是否 decoder 了?
learnshare
2016-08-03 18:25:30 +08:00
@xxxyyy 没有 encode 和 decode ,用的是 POST
xxxyyy
2016-08-03 18:45:44 +08:00
@learnshare POST 的 content-type 是什么? json 还是 formdata?
xxxyyy
2016-08-03 18:47:24 +08:00
我猜问题可能还是在 URL 上。
learnshare
2016-08-03 18:54:24 +08:00
@xxxyyy 当然是 JSON 。

URL 应该没有问题,因为单纯支付就是正常的,其他 js-sdk 的接口都不正常。
xi_lin
2016-08-03 19:03:11 +08:00
chooseWXPay 这个接口很神奇的,我试过不请求支付权限照样可以调起支付。
你试过设置分享接口吗?
xiluo
2016-08-03 22:37:39 +08:00
目测楼主在做类分答的应用。
有一个问题要注意,就是签名的时候传入的 nonstr 要全部小写
learnshare
2016-08-04 10:35:31 +08:00
@xi_lin 目前在考虑 Angular.js URL 的问题了,或许 abc.com/path 这个方式会导致签名问题?
我再尝试换回 abc.com/#/path 这个方式吧
learnshare
2016-08-04 12:07:39 +08:00
@iloveyou
@alichen
@xylitolLin
@justfindu
@alex321
@pubby
@xxxyyy
@sxyclint
@jdlau
@xi_lin
@xiluo

看来是 URL 的问题。

解决办法:

abc.com/path 改成 abc.com/#/path ,通过 abc.com/ 这个 URL 来签名。

最初是因为微信网页授权跳转无法调到 abc.com/#/ 这个地址,所以设置 Angular.js 的 URL 为 html5Mode(true),也就是 abc.com/path 这种模式了。
看来要再单独处理授权登录跳转的问题了。

不过仍然感谢各位。
pubby
2016-08-04 12:10:57 +08:00
@learnshare 微信文档不是提到你这种单页应用了吗,这种情况要用新 URL 重新签名的
learnshare
2016-08-04 12:11:57 +08:00
手动 SEO 一下,帮助更多失足程序员:

微信 invalid signature
js sdk invalid signature
js-sdk invalid signature
JS-SDK invalid signature
learnshare
2016-08-04 12:13:24 +08:00
@pubby 是新的 URL ,但 abc.com/pathabc.com/#/path 是两种不同的 Angular.js 应用 URL 模式,签名也不同。这一点上微信没有测试过吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/296793

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX