wechat-api icon indicating copy to clipboard operation
wechat-api copied to clipboard

每次调用任何接口,access token就会被刷新一次

Open zyujiawei opened this issue 7 years ago • 8 comments

我用的构建函数是带了存入和取出token的,为什么每次调用任何接口,token就会被刷新一次

zyujiawei avatar Jun 15 '17 14:06 zyujiawei

没有正确使用。

JacksonTian avatar Jun 15 '17 14:06 JacksonTian

比如

var wechat_api = new API(keystone.get('appid'), keystone.get('appsecret'),function(callback){
	//获取token的函数
		token.model.findOne().exec(function(err, result) {
			if (result != null){
				keystone.set('access_token',result.content);
				console.log("[wechat]reading token :"+result.content);
				callback(null,result.content);
			} else {
				callback(err);
			}
		});
	},function(newtoken,callback){
		token.model.remove(function(){
			var newToken = new token.model({
				content: newtoken.accessToken,
			});
			newToken.save(function(){
				keystone.set('access_token',newtoken.accessToken);
				console.log("[wechat]token has been saved :"+newtoken.accessToken);
				callback();
			});
		});
	});

wechat_api.xxxx(); 这样在xxxx都会打印一次token被读了token被存了,请问问题在哪里

zyujiawei avatar Jun 16 '17 14:06 zyujiawei

看起来木有错啊。

JacksonTian avatar Jun 17 '17 08:06 JacksonTian

然后我在代码下面调用wechat_api时就发现每次都会重新拿一个token

zyujiawei avatar Jun 21 '17 07:06 zyujiawei

应该是 callback(null,result.content); content的格式不对。 要求的格式如下:

{
accessToken:"XXXXX",
expireTime: 毫秒数
}

weconquered avatar Jun 29 '17 12:06 weconquered

检查一下第三个参数(回调函数)里面写的result.content的格式,要符合

{
accessToken:"XXXXX",
expireTime: 毫秒数
}

nick-ma avatar Jul 02 '18 02:07 nick-ma

var WechatAPI = require('wechat-api'); var api = new WechatAPI('appid', 'secret', function (callback) { // 传入一个获取全局token的方法 fs.readFile('access_token.txt', 'utf8', function (err, txt) { if (err) {return callback(err);} callback(null, JSON.parse(txt)); }); }, function (token, callback) { // 请将token存储到全局,跨进程、跨机器级别的全局,比如写到数据库、redis等 // 这样才能在cluster模式及多机情况下使用,以下为写入到文件的示例 fs.writeFile('access_token.txt', JSON.stringify(token), callback); });

官方的这个例子,跑了很多次,一直报错 后来错误追踪到了这里: callback(null, JSON.parse(txt)); 修改成 var strToken=JSON.parse(txt); callback(null, strToken);

zhu5439peng avatar Jul 30 '18 03:07 zhu5439peng

@zhu5439peng 有区别?

JacksonTian avatar Jul 30 '18 04:07 JacksonTian