微信 Web App 开发, js-sdk 遇到 invalid signature 等错误,求帮助赠红包 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
learnshare
V2EX    微信

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

  •  
  •   learnshare 2016 年 8 月 3 日 4891 次点击
    div class="outdated">这是一个创建于 3531 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前的状况:

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

    错误描述:

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

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

    寻求帮助:

    因为发给 [email protected] 的邮件并没有收到回复,所以在这里呼叫一下腾讯或微信团队的朋友,希望能得到帮助。

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

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

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

    感谢各位。

    第 1 条附言    2016 年 8 月 4 日

    看来是 URL 的问题。

    解决办法:

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

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

    第 2 条附言    2016 年 8 月 8 日
    录音等权限好了以后,授权登录跳转页解决了,支付果然又出了问题...

    想做平台,难啊!
    39 条回复    2016-08-04 12:13:24 +08:00
    learnshare
        1
    learnshare  
    OP
       2016 年 8 月 3 日
    各位午休结束了么, HELP !
    iloveyou
        2
    iloveyou  
       2016 年 8 月 3 日
    公众号后台允许的 url 填对没
    alichen
        3
    alichen  
       2016 年 8 月 3 日
    问题无非就是管理后台的安全域名配置和前端参数加密
    learnshare
        4
    learnshare  
    OP
       2016 年 8 月 3 日
    @iloveyou
    @alichen 后台配置没有问题,支付都是正常的。

    前端参数加密 指的是?
    xylitolLin
        5
    xylitolLin  
       2016 年 8 月 3 日
    支付和其他功能用的 token 是由区别的,这个有没有看清楚
    justfindu
        6
    justfindu  
       2016 年 8 月 3 日
    js -jdk 是最不容易出错的...因为只要你填写参数就够了啊
    alex321
        7
    alex321  
       2016 年 8 月 3 日
    安全域名检查是否正确,并且确认签名的时候是把完整 url(除了 # 后面的)一起去签名的呃。
    learnshare
        8
    learnshare  
    OP
       2016 年 8 月 3 日
    @xylitolLin 步骤三:通过 config 接口注入权限验证配置 这个 token 是一致的,出错的也是这一步;

    @justfindu 现在参数肯定是没问题的,多加了一个 'startRecord' 权限就出问题了,而且不同页面是不同的错误。

    @alex321 根据 URL 生成的签名没有问题,用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=cardsign 校验过。
    并且 URL 中没有 # 及之后的内容,安全域名也是检查过多次了
    xylitolLin
        9
    xylitolLin  
       2016 年 8 月 3 日
    @learnshare

    ticket 是有两种的。

    https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi

    要用这个去获取 ticket 喔,注意后面的 type=jsapi
    learnshare
        10
    learnshare  
    OP
       2016 年 8 月 3 日
    @alichen
    @alex321

    我做了这样的尝试,分别设置安全域名为: abc.comhttp://abc.com

    第一种在 PC 端调试工具及微信的第一个页面中提示 "config:ok",微信第二个页面是 "config:invalid signature";
    第二种在 PC 端调试工具及微信的第一个页面中提示 "config:invalid url domain",微信第二个页面还是 "config:invalid signature"。
    learnshare
        11
    learnshare  
    OP
       2016 年 8 月 3 日
    @xylitolLin 后端部分用了现成的 Python 微信开发框架,这部分应该没有问题
    learnshare
        12
    learnshare  
    OP
       2016 年 8 月 3 日
    @iloveyou
    @alex321

    我在 segmentfault 看到有朋友说 URL 中存在 "-" 这个字符会影响签名,因为现在用的测试域名是 app-test.xxx.xxx ,所以我再验证一下这个问题。
    alex321
        13
    alex321  
       2016 年 8 月 3 日
    微信这个安全域名的生效周期会怪怪的。
    我当年设置的时候,设置好了立马验证提示 config:invalid url domain ,然后第二天就都正常了呃。。
    learnshare
        14
    learnshare  
    OP
       2016 年 8 月 3 日
    pubby
        15
    pubby  
       2016 年 8 月 3 日
    @learnshare
    安全域名需要完整域名 xxx.domain.com ,不影响 js-sdk 签名,只会影响“输入框防诈骗提示”,“网页被自动转码”之类的

    JS-SDK 的域名 可以只设 domain.com ,不需要完整域名。


    URL 中的"-"不会有问题

    微信支付的签名和 JS-SDK 签名是独立的,而且根本用不到 access_token/jsapi-ticket
    xxxyyy
        16
    xxxyyy  
       2016 年 8 月 3 日 via Android
    或许支付不能跟其他的放在一起 config ,你可以试下只传 startRecord 给 jsApiList
    learnshare
        17
    learnshare  
    OP
       2016 年 8 月 3 日
    @pubby Thanks ,看来域名这部分不会有问题

    @xxxyyy 单独测试 startRecord 或 hideOptionMenu ,都是第一个页面 OK ,第二个 invalid signature
    pubby
        18
    pubby  
       2016 年 8 月 3 日
    @learnshare access_token / jsapi ticket 都缓存起来了吗? access_token 不要每次重新获取,你重新获取后,原来的 jsapi-ticket 都会失效。
    alichen
        19
    alichen  
       2016 年 8 月 3 日
    微信 access_token 有失效时间,最好在后端调用的时候存起来
    xxxyyy
        20
    xxxyyy  
       2016 年 8 月 3 日 via Android
    @learnshare 第二个页面单独使用 chooseWXPay 正常吗?如果有问题,检查下第二个页面的 URL 。
    learnshare
        21
    learnshare  
    OP
       2016 年 8 月 3 日
    @pubby
    @alichen 后端部分没有问题,因为同样的签名,支付是可以正常用的。

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

    @jdlau 参数顺序并不影响这个问题,因为只要是非 chooseWXPay 的权限,都会签名无效
    xxxyyy
        26
    xxxyyy  
       2016 年 8 月 3 日 via Android
    信息太少不好判断

    页面是单页面应用,还是传统的页面?
    签名是通过 ajax 获取的,还是直接渲染在页面上的?
    learnshare
        27
    learnshare  
    OP
       2016 年 8 月 3 日
    @xxxyyy 基于 Angular.js 的单页应用,通过 Ajax 从后端 API 获取的签名数据
    xxxyyy
        28
    xxxyyy  
       2016 年 8 月 3 日 via Android
    @learnshare 那通过 ajax 发送 URL 前是否 encode 了,后端接受到 URL 后是否 decoder 了?
    learnshare
        29
    learnshare  
    OP
       2016 年 8 月 3 日
    @xxxyyy 没有 encode 和 decode ,用的是 POST
    xxxyyy
        30
    xxxyyy  
       2016 年 8 月 3 日 via Android
    @learnshare POST 的 content-type 是什么? json 还是 formdata?
    xxxyyy
        31
    xxxyyy  
       2016 年 8 月 3 日 via Android
    我猜问题可能还是在 URL 上。
    learnshare
        32
    learnshare  
    OP
       2016 年 8 月 3 日
    @xxxyyy 当然是 JSON 。

    URL 应该没有问题,因为单纯支付就是正常的,其他 js-sdk 的接口都不正常。
    xi_lin
        33
    xi_lin  
       2016 年 8 月 3 日
    chooseWXPay 这个接口很神奇的,我试过不请求支付权限照样可以调起支付。
    你试过设置分享接口吗?
    xiluo
        34
    xiluo  
       2016 年 8 月 3 日 via iPhone
    目测楼主在做类分答的应用。
    有一个问题要注意,就是签名的时候传入的 nonstr 要全部小写
    learnshare
        35
    learnshare  
    OP
       2016 年 8 月 4 日
    @xi_lin 目前在考虑 Angular.js URL 的问题了,或许 abc.com/path 这个方式会导致签名问题?
    我再尝试换回 abc.com/#/path 这个方式吧
    learnshare
        36
    learnshare  
    OP
       2016 年 8 月 4 日
    @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
        37
    pubby  
       2016 年 8 月 4 日 via Android
    @learnshare 微信文档不是提到你这种单页应用了吗,这种情况要用新 URL 重新签名的
    learnshare
        38
    learnshare  
    OP
       2016 年 8 月 4 日
    手动 SEO 一下,帮助更多失足程序员:

    微信 invalid signature
    js sdk invalid signature
    js-sdk invalid signature
    JS-SDK invalid signature
    learnshare
        39
    learnshare  
    OP
       2016 年 8 月 4 日
    @pubby 是新的 URL ,但 abc.com/pathabc.com/#/path 是两种不同的 Angular.js 应用 URL 模式,签名也不同。这一点上微信没有测试过吧
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1557 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 16:31 PVG 00:31 LAX 09:31 JFK 12:31
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86