微信 js sdk 签名错误 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
makuta
V2EX    Node.js

微信 js sdk 签名错误

  •  1
     
  •   makuta 2015-01-27 13:53:09 +08:00 11747 次点击
    这是一个创建于 3920 天前的主题,其中的信息可能已经有所发展或是发生改变。

    获取的signature在 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 做了验证通过 但是通过微信访问的时候 老报 invalid signature

    我的服务端是nodejs

    var access_token = function() {
    return function(done) {
    var token_url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' + appId + '&secret=' + appSecret
    var self = this;
    request(token_url, function(error, response, body) {
    if (!error && response.statusCode == 200) {
    logger.info('access_token');
    token = JSON.parse(body).access_token;
    }
    done();
    })
    }
    }

    var get_jsapi_ticket = function() {
    return function(done) {
    var jsapi_ticket_url = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=' + token + '&type=jsapi';
    request(jsapi_ticket_url, function(error, response, body) {
    if (!error && response.statusCode == 200) {
    logger.info('get_jsapi_ticket');
    ticket = JSON.parse(body).ticket;
    done();
    }
    })
    }
    }

    求帮助谢谢~~~~~

    25 条回复    2015-05-30 18:58:01 +08:00
    raquelken
        1
    raquelken  
       2015-01-27 14:05:57 +08:00
    你这里只是获取ticket,还要用ticket, noncestr, timestamp还有你要调用这个js的页面的url生成一个signature, 返回给前端js,然后通过config接口注入权限验证配置啊 具体算法看这里 http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html#.E6.AD.A5.E9.AA.A4.E4.B8.80.EF.BC.9A.E7.BB.91.E5.AE.9A.E5.9F.9F.E5.90.8D
    makuta
        2
    makuta  
    OP
       2015-01-27 14:15:44 +08:00
    @raquelken 我有那一段
    var fetch = function() {
    return function(done) {
    var cOnfig= sign(ticket, 'http://example.com')我的域名就不方便写了 用example代替
    this.result = {
    ret_code: 0,
    config: _.extend(config, {
    appId: appId
    })
    };

    done();
    }
    };
    raquelken
        3
    raquelken  
       2015-0-27 14:23:43 +08:00
    用这个校验下你的signature是否正确 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign
    makuta
        4
    makuta  
    OP
       2015-01-27 14:26:00 +08:00
    @raquelken 验证了也通过了
    raquelken
        5
    raquelken  
       2015-01-27 14:59:34 +08:00
    你url传到后台是不是encode过的?然后生成signature的时候需要decode的
    makuta
        6
    makuta  
    OP
       2015-01-27 15:08:03 +08:00
    @raquelken
    url 我是在后台写死的 没有传 你也是nodejs 弄的吗?
    raquelken
        7
    raquelken  
       2015-01-27 15:11:39 +08:00
    不是,我是ruby,不过应该都差不多吧
    我的 noncestr是随机的16位字符串
    还有就是url的问题,看看附录5的第六条
    66beta
        8
    66beta  
       2015-01-27 15:12:27 +08:00
    我PHP也发生过,本机测试好的,放到服务器就拿不到,后来发现是客户端网络不好~
    makuta
        9
    makuta  
    OP
       2015-01-27 15:14:59 +08:00
    @66beta 我服务端可以拿到东西 我在Log里看到了 但是不知道 为啥 签名老 invalid
    makuta
        10
    makuta  
    OP
       2015-01-27 15:16:24 +08:00
    @raquelken noncetr 我是用的官网提供的node模块 只用ticket 然后就可以返回 对应的认证参数
    makuta
        11
    makuta  
    OP
       2015-01-27 15:17:06 +08:00
    @66beta 你说的本地测试是什么意思???
    66beta
        12
    66beta  
       2015-01-27 15:18:01 +08:00
    @makuta 后端拿到几个参数写到前端,客户端JS不是也要验证一次的么,就是这里拿不到
    有几次虽然提示invalid了,但是过一会还是生效了
    66beta
        13
    66beta  
       2015-01-27 15:18:39 +08:00
    @makuta 本地测试就是用ngrok代理
    makuta
        14
    makuta  
    OP
       2015-01-27 16:16:39 +08:00
    @66beta 我本地启了一个 8080端口 为什么启ngrok后 访问那个地址 老是404啊
    sb
        15
    sb  
       2015-01-27 17:15:28 +08:00
    既然你说了你用那个签名工具做了签名验证测试了,想必你的代码已经没有问题了。
    你现在要仔细确认下你的微信内的app的所在url是否跟你后台传入的url一致 或者是否在同一个域下,基本就是这个url的问题,慢慢调下吧
    Had
        16
    Had  
       2015-01-27 21:46:13 +08:00
    @66beta
    看到ngrok我就默默进来了...
    如果觉得ngrok速度不佳的话,可以试试https://www.tunnel.mobi ...
    ariesjia
        17
    ariesjia  
       2015-01-28 09:15:52 +08:00
    你这里拿了token 签名需要 timestamp nonceStr 还有 url ,这个url是你公众号配置了的url
    66beta
        18
    66beta  
       2015-01-28 10:11:22 +08:00
    @Had 你是tunnel.mobi作者?域名备案过,好贴心~
    yunshansimon
        19
    yunshansimon  
       2015-01-28 12:54:14 +08:00
    @makuta 检查你的string的形式,utf-8还是。如果之前没有设定,查一下文档,默认值是什么,然后改成另外一个试一下。我没用过node.js,但通常什么都对的情况下还抱错,就是string编码问题了。
    leecheung
        20
    leecheung  
       2015-02-03 15:59:31 +08:00
    我的用微信提供的js签名校验工具测试通过了,可是还是报签名错误
    nasa
        21
    nasa  
       2015-02-08 00:05:25 +08:00
    我来告诉你们为什么吧,我是被腾讯坑惨了。 文档中的这个参数 noncestr s是小写的,实际上你要nonceStr 大写S才行。 哎 这个问题害的我们年会都没过好。
    henzil
        22
    henzil  
       2015-02-13 09:46:34 +08:00
    @makuta var cOnfig= sign(ticket, 'http://example.com')每个页面都是一个url,都需要获取sign。这个地方传的url是你当前的页面的url。
    lujiajing1126
        23
    lujiajing1126  
       2015-02-15 20:58:15 +08:00
    你是不是url传错了啊。。。官方推荐用location.href.split('#')[0]
    makuta
        24
    makuta  
    OP
       2015-02-15 21:36:28 +08:00
    @lujiajing1126 恩 是的 我前几天发现 就是这个问题
    xiaoguidan
        25
    xiaoguidan  
       2015-05-30 18:58:01 +08:00
    楼主解决了吗?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1000 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 19:10 PVG 03:10 LAX 12:10 JFK 15:10
    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