'use strict'
var Promise = require('bluebird');
var request = Promise.promisify(require('request'));
var prefix = 'https://api.weixin.qq.com/cgi-bin/';
var api = {
accessToken: prefix + 'token?grant_type=client_credential'
};
function Wechat(opts) {
var that = this;
this.appID = opts.appID;
this.appSecret = opts.appSecret;
this.getAccessToken = opts.getAccessToken;
this.saveAccessToken = opts.saveAccessToken;
this.getAccessToken().then(function(data) {
try{
data = JSON.parse(data);
}
catch(e) {
return that.updateAccessToken(that.appID, that.appSecret);
}
if(that.isValidAccessToken(data)) {
Promise.resolve(data);
}
else{
return that.updateAccessToken(that.appID, that.appSecret);
}
}).then(function(data) {
that.access_token = data.access_token;
that.expires_in = data.expires_in;
that.saveAccessToken(data);
});
}
Wechat.prototype.isValidAccessToken = (data) => {
if(!data || !data.access_token || !data.expires_in) {
return false;
}
var access_token = data.access_token;
var expires_in = data.expires_in;
var now = (new Date().getTime());
if(now < expires_in) {
return true;
}
else {
return false;
}
};
Wechat.prototype.updateAccessToken = (appID, appSecret) => {
var url = api.accessToken + '&appid=' + appID + '&secret=' + appSecret;
console.log('*************************url**************************');
console.log(url);
console.log('*************************url**************************');
return new Promise((resolve, reject) => {
request({url: url, json: true}).then((response) => {
console.log('*************************response**************************');
console.log(response);
console.log('*************************response**************************');
var data = response[1];
var now = (new Date().getTime());
var expires_in = now + (data.expires_in - 20) * 1000;
data.expires_in = expires_in;
resolve(data);
});
});
};
module.exports = Wechat;{
"name": "wechat",
"version": "1.0.0",
"description": "Jack wechat test",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Jack Qiu",
"license": "ISC",
"devDependencies": {
"bluebird": "^3.3.5",
"koa": "^1.2.0",
"path": "^0.12.7",
"raw-body": "^2.1.6",
"request": "^2.71.0",
"sha1": "^1.1.1",
"xml2js": "^0.4.16"
}
}请问为什么我的this关键字不好用在updateAccessToken方法中,另一个是updateAccessToken中的response[1]是undefined
登录后可查看更多问答,登录/注册