wechat-api
wechat-api copied to clipboard
每次调用任何接口,access token就会被刷新一次
我用的构建函数是带了存入和取出token的,为什么每次调用任何接口,token就会被刷新一次
没有正确使用。
比如
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被存了,请问问题在哪里
看起来木有错啊。
然后我在代码下面调用wechat_api时就发现每次都会重新拿一个token
应该是 callback(null,result.content); content的格式不对。 要求的格式如下:
{
accessToken:"XXXXX",
expireTime: 毫秒数
}
检查一下第三个参数(回调函数)里面写的result.content的格式,要符合
{
accessToken:"XXXXX",
expireTime: 毫秒数
}
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 有区别?