UNPKG

koa3-wechat

Version:

wechat api modified by windsome.feng

146 lines (125 loc) 4.64 kB
'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;