获取的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();
}
})
}
}
求帮助谢谢~~~~~
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
|
2
makuta OP @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(); } }; |
3
raquelken 2015-01-27 14:23:43 +08:00
用这个校验下你的signature是否正确 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign
|
5
raquelken 2015-01-27 14:59:34 +08:00
你url传到后台是不是encode过的?然后生成signature的时候需要decode的
|
7
raquelken 2015-01-27 15:11:39 +08:00
不是,我是ruby,不过应该都差不多吧
我的 noncestr是随机的16位字符串 还有就是url的问题,看看附录5的第六条 |
8
66beta 2015-01-27 15:12:27 +08:00
我PHP也发生过,本机测试好的,放到服务器就拿不到,后来发现是客户端网络不好~
|
12
66beta 2015-01-27 15:18:01 +08:00
@makuta 后端拿到几个参数写到前端,客户端JS不是也要验证一次的么,就是这里拿不到
有几次虽然提示invalid了,但是过一会还是生效了 |
15
sb 2015-01-27 17:15:28 +08:00
既然你说了你用那个签名工具做了签名验证测试了,想必你的代码已经没有问题了。
你现在要仔细确认下你的微信内的app的所在url是否跟你后台传入的url一致 或者是否在同一个域下,基本就是这个url的问题,慢慢调下吧 |
16
Had 2015-01-27 21:46:13 +08:00
|
17
ariesjia 2015-01-28 09:15:52 +08:00
你这里拿了token 签名需要 timestamp nonceStr 还有 url ,这个url是你公众号配置了的url
|
19
yunshansimon 2015-01-28 12:54:14 +08:00
@makuta 检查你的string的形式,utf-8还是gb2312。如果之前没有设定,查一下文档,默认值是什么,然后改成另外一个试一下。我没用过node.js,但通常什么都对的情况下还抱错,就是string编码问题了。
|
20
leecheung 2015-02-03 15:59:31 +08:00
我的用微信提供的js签名校验工具测试通过了,可是还是报签名错误
|
21
nasa 2015-02-08 00:05:25 +08:00
我来告诉你们为什么吧,我是被腾讯坑惨了。 文档中的这个参数 noncestr s是小写的,实际上你要nonceStr 大写S才行。 哎 这个问题害的我们年会都没过好。
|
22
henzil 2015-02-13 09:46:34 +08:00
@makuta var config = sign(ticket, 'http://example.com')每个页面都是一个url,都需要获取sign。这个地方传的url是你当前的页面的url。
|
23
lujiajing1126 2015-02-15 20:58:15 +08:00
你是不是url传错了啊。。。官方推荐用location.href.split('#')[0]
|
24
makuta OP @lujiajing1126 恩 是的 我前几天发现 就是这个问题
|
25
xiaoguidan 2015-05-30 18:58:01 +08:00
楼主解决了吗?
|