请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

问题1,this关键字不好用,问题2,response[1]是undefined

'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

正在回答 回答被采纳积分+3

2回答

提问者 JokerQiu 2016-04-15 14:48:49

this关键字不好用的原因是function使用 => 写法

0 回复 有任何疑惑可以回复我~
提问者 JokerQiu 2016-04-14 22:12:21

updateAccessToken中的response[1]是undefined,对于response[1],请使用response.body

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信