koa3-wechat
Version:
wechat api modified by windsome.feng
146 lines (125 loc) • 4.64 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _debug2 = require('debug');
var _debug3 = _interopRequireDefault(_debug2);
var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
var _backend = require('./backend');
var _backend2 = _interopRequireDefault(_backend);
var _request = require('./_request');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var debug = (0, _debug3.default)('app:wechat:accesstoken');
var AccessToken = function () {
/**
* opts = {
* appId,
* appSecret,
* backend: {
* type: memory/redis,
* url
* }
* }
* @param {object} opts
*/
function AccessToken() {
var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
(0, _classCallCheck3.default)(this, AccessToken);
this.appId = opts.appId;
this.appSecret = opts.appSecret;
this.backend = (0, _backend2.default)(opts.backend);
this.getAccessToken = this.getAccessToken.bind(this);
this.getAppId = this.getAppId.bind(this);
this.getAppSecret = this.getAppSecret.bind(this);
this.readApiTicket = this.readApiTicket.bind(this);
this.saveApiTicket = this.saveApiTicket.bind(this);
}
(0, _createClass3.default)(AccessToken, [{
key: 'getAccessToken',
value: function getAccessToken() {
var _this = this;
var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
if (force) return this._fetchAccessToken();else return this._readAccessToken(this.appId).then(function (accessToken) {
if (!accessToken) {
debug('no accessToken.' + _this.appId + ', need get a new one.');
return _this._fetchAccessToken();
}
var currentTimestamp = parseInt(new Date().getTime() / 1000);
var expireTime = accessToken.expire_time || 0;
if (expireTime < currentTimestamp) {
debug('accessToken has expire, need to request a new one!', accessToken, currentTimestamp);
return _this._fetchAccessToken();
}
return accessToken;
});
}
}, {
key: '_saveAccessToken',
value: function _saveAccessToken(appId, accessToken) {
return this.backend.mset('accessToken', appId, accessToken).catch(function (error) {
return accessToken;
});
}
}, {
key: '_readAccessToken',
value: function _readAccessToken(appId) {
return this.backend.mget('accessToken', appId);
}
}, {
key: '_fetchAccessToken',
value: function _fetchAccessToken() {
var _this2 = this;
var currentTimestamp = parseInt(new Date().getTime() / 1000);
var url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' + this.appId + '&secret=' + this.appSecret;
return (0, _request.requestGet)(url).then(function (retobj) {
if (retobj && retobj.access_token) {
debug('receive new access_token! cache it!', retobj);
var newToken = {};
newToken.expire_time = currentTimestamp + 7200;
newToken.access_token = retobj.access_token;
return _this2._saveAccessToken(_this2.appId, newToken).then(function (accessToken) {
if (!accessToken) {
debug('warning! _fetchAccessToken -> _saveAccessToken fail! but we still return the token got!');
}
return newToken;
}).catch(function (error) {
debug('error! _fetchAccessToken -> _saveAccessToken exception! but we still return the token got!', error);
return newToken;
});
} else {
debug('error! _fetchAccessToken fail!', retobj);
return null;
}
});
}
}, {
key: 'getAppId',
value: function getAppId() {
return this.appId;
}
}, {
key: 'getAppSecret',
value: function getAppSecret() {
return this.appSecret;
}
}, {
key: 'saveApiTicket',
value: function saveApiTicket(ticket) {
return this.backend.mset('apiTickets', this.appId, ticket).catch(function (error) {
return ticket;
});
}
}, {
key: 'readApiTicket',
value: function readApiTicket() {
return this.backend.mget('apiTickets', this.appId);
}
}]);
return AccessToken;
}();
exports.default = AccessToken;