UNPKG

koa3-wechat

Version:

wechat api modified by windsome.feng

229 lines (181 loc) 6.58 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _stringify = require('babel-runtime/core-js/json/stringify'); var _stringify2 = _interopRequireDefault(_stringify); var _regenerator = require('babel-runtime/regenerator'); var _regenerator2 = _interopRequireDefault(_regenerator); var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); 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 _access_token = require('./_access_token'); var _access_token2 = _interopRequireDefault(_access_token); var _request2 = require('./_request'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var debug = (0, _debug3.default)('app:wechat:base'); // import createBackend from './backend'; var Base = function () { /** * opts = { * appId, * appSecret, * backend: { * type: memory/redis, * url * } * } * 或: * opts = { * getAccessToken // 函数,参数为force,是否强制更新access_token,默认为false不强制.返回token. * } * @param {object} opts */ function Base() { var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; (0, _classCallCheck3.default)(this, Base); if (!opts) { debug('error! no opts!'); return; } if (opts.getAccessToken) { this.getAccessToken = opts.getAccessToken; this.getAppId = opts.getAppId; this.getAppSecret = opts.getAppSecret; this.readApiTicket = opts.readApiTicket; this.saveApiTicket = opts.saveApiTicket; } else { var accessToken = new _access_token2.default(opts); // this.appId = opts.appId; // this.appSecret = opts.appSecret; // this.backend = createBackend(opts.backend); this.getAccessToken = accessToken.getAccessToken; this.getAppId = accessToken.getAppId; this.getAppSecret = accessToken.getAppSecret; this.readApiTicket = accessToken.readApiTicket; this.saveApiTicket = accessToken.saveApiTicket; } } (0, _createClass3.default)(Base, [{ key: '_request', value: function _request(url) { var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; return (0, _request2.requestOrigin)(url, opts); } }, { key: 'request', value: function () { var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(url, opts) { var accessToken, url2, retobj, url3; return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return this.getAccessToken(); case 2: accessToken = _context.sent; if (accessToken) { _context.next = 8; break; } debug('warning! request -> getAccessToken fail! retry one more time!'); _context.next = 7; return this.getAccessToken(); case 7: accessToken = _context.sent; case 8: if (accessToken) { _context.next = 11; break; } debug('error! request -> getAccessToken fail again! return null!'); return _context.abrupt('return', null); case 11: url2 = url.replace(/ACCESS_TOKEN/g, accessToken.access_token); _context.next = 14; return this._request(url2, opts); case 14: retobj = _context.sent; if (!retobj) { _context.next = 36; break; } if (!(retobj.errcode === 40001)) { _context.next = 28; break; } debug('error! access token error! fetch new access token!', retobj); _context.next = 20; return this.getAccessToken(true); case 20: accessToken = _context.sent; if (accessToken) { _context.next = 24; break; } debug('error! request -> getAccessToken error!'); return _context.abrupt('return', null); case 24: url3 = url.replace(/ACCESS_TOKEN/g, accessToken.access_token); return _context.abrupt('return', this._request(url3, opts).then(function (retobj3) { debug('after retry request', retobj3); return retobj3; })); case 28: if (!retobj.errcode) { _context.next = 33; break; } debug('error! request -> _request, other error!', retobj); return _context.abrupt('return', retobj); case 33: return _context.abrupt('return', retobj); case 34: _context.next = 38; break; case 36: debug('error! should not reach here! get null?'); return _context.abrupt('return', retobj); case 38: case 'end': return _context.stop(); } } }, _callee, this); })); function request(_x3, _x4) { return _ref.apply(this, arguments); } return request; }() }, { key: 'get', value: function get(url) { return this.request(url); } }, { key: 'post', value: function post(url, data) { var opts = { //dataType: 'json', method: 'POST', body: (0, _stringify2.default)(data), headers: { 'Content-Type': 'application/json', Accept: 'application/json' } }; return this.request(url, opts); } }]); return Base; }(); exports.default = Base;