获取token,本着两个原则,
1、先查询是否有token,有的话判断其时间是否与上一次请求时间差是否超过7100;
a、不超过,直接用得到;
b、超过,再获取刷新;
2、没有token获取刷新token;
a、拼接地址,request.get请求token;将请求来的token保存到数据库更新,此处有技巧,
1 if (!token) token = new WeChatAccessToken();
此句话为第一次请求时,生成一个token,将获得的数据,存储到token里面;保存,并返回;
1 function getToken(appid, appsecret, cb) { 2 WeChatAccessToken.findOne({appid: appid}, function (err, token) { 3 if(token) { 4 var difference = parseInt(new Date().getTime() / 1000) - token.at; 5 if (difference > 7100) refreshToken(appid, appsecret, function(data, err) { cb(data, err); }); 6 else cb(token, null); 7 } else refreshToken(appid, appsecret, function(data, err) { cb(data, err); }); 8 }); 9 } 10 11 function refreshToken(appid, appsecret, cb) { 12 var access_token_api = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET"; 13 var url = access_token_api.replace('APPID', appid).replace('APPSECRET', appsecret); 14 15 // 参考请求: http://localhost:7000/wechat/ticket?appid=wx8160a61c2d53fb74&appsecret=aa2c953465334823e20090156527a957 16 request.get(url, function (error, response, body) { 17 if (body) { 18 WeChatAccessToken.findOne({appid: appid}, function (err, token) { 19 if (!token) token = new WeChatAccessToken(); 20 var data = JSON.parse(body); 21 22 token.appid = appid; 23 token.access_token = data.access_token; 24 token.expires_in = data.expires_in; 25 token.at = parseInt(new Date().getTime() / 1000); 26 token.save(function (err) { cb(token, err); }); 27 }); 28 } else cb(null, error); 29 }); 30 }
仔细研读,getToken和refreshToekn方法;