微信 js sdk 签名错误

2015-01-27 13:53:09 +08:00
 makuta

获取的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();
}
})
}
}

求帮助谢谢~~~~~

11320 次点击
所在节点    Node.js
25 条回复
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
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
2015-01-27 14:23:43 +08:00
用这个校验下你的signature是否正确 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign
makuta
2015-01-27 14:26:00 +08:00
@raquelken 验证了也通过了
raquelken
2015-01-27 14:59:34 +08:00
你url传到后台是不是encode过的?然后生成signature的时候需要decode的
makuta
2015-01-27 15:08:03 +08:00
@raquelken
url 我是在后台写死的 没有传 你也是nodejs 弄的吗?
raquelken
2015-01-27 15:11:39 +08:00
不是,我是ruby,不过应该都差不多吧
我的 noncestr是随机的16位字符串
还有就是url的问题,看看附录5的第六条
66beta
2015-01-27 15:12:27 +08:00
我PHP也发生过,本机测试好的,放到服务器就拿不到,后来发现是客户端网络不好~
makuta
2015-01-27 15:14:59 +08:00
@66beta 我服务端可以拿到东西 我在Log里看到了 但是不知道 为啥 签名老 invalid
makuta
2015-01-27 15:16:24 +08:00
@raquelken noncetr 我是用的官网提供的node模块 只用ticket 然后就可以返回 对应的认证参数
makuta
2015-01-27 15:17:06 +08:00
@66beta 你说的本地测试是什么意思???
66beta
2015-01-27 15:18:01 +08:00
@makuta 后端拿到几个参数写到前端,客户端JS不是也要验证一次的么,就是这里拿不到
有几次虽然提示invalid了,但是过一会还是生效了
66beta
2015-01-27 15:18:39 +08:00
@makuta 本地测试就是用ngrok代理
makuta
2015-01-27 16:16:39 +08:00
@66beta 我本地启了一个 8080端口 为什么启ngrok后 访问那个地址 老是404啊
sb
2015-01-27 17:15:28 +08:00
既然你说了你用那个签名工具做了签名验证测试了,想必你的代码已经没有问题了。
你现在要仔细确认下你的微信内的app的所在url是否跟你后台传入的url一致 或者是否在同一个域下,基本就是这个url的问题,慢慢调下吧
Had
2015-01-27 21:46:13 +08:00
@66beta
看到ngrok我就默默进来了...
如果觉得ngrok速度不佳的话,可以试试https://www.tunnel.mobi ...
ariesjia
2015-01-28 09:15:52 +08:00
你这里拿了token 签名需要 timestamp nonceStr 还有 url ,这个url是你公众号配置了的url
66beta
2015-01-28 10:11:22 +08:00
@Had 你是tunnel.mobi作者?域名备案过,好贴心~
yunshansimon
2015-01-28 12:54:14 +08:00
@makuta 检查你的string的形式,utf-8还是gb2312。如果之前没有设定,查一下文档,默认值是什么,然后改成另外一个试一下。我没用过node.js,但通常什么都对的情况下还抱错,就是string编码问题了。
leecheung
2015-02-03 15:59:31 +08:00
我的用微信提供的js签名校验工具测试通过了,可是还是报签名错误

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

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

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

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

© 2021 V2EX