UNPKG

@thinkboat/wechatjs

Version:

企业微信API SDK for Node

110 lines 3.75 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.BaseWeChatClient = void 0; const axios_1 = __importDefault(require("axios")); const memorystorage_1 = require("../session/memorystorage"); const utils_1 = require("../utils"); class BaseWeChatClient { constructor(appid, secret, accessToken) { this.API_BASE_URL = ""; this.AUTO_RETRY = true; this.MAX_RETRIES = 5; this.session = new memorystorage_1.MemoryStorage(); this.appid = appid; this.secret = secret; if (accessToken) { this.session.set(this.accessTokenKey(), accessToken); } } async request(url, options) { const accessToken = await this.accessToken(); // 闭包:内部重试逻辑方法 const _request = async () => { // 企业微信api报404, 400错误 则重试5次 let retry = 5; while (true) { try { const res = await axios_1.default.request({ url, method: options.method, params: { access_token: accessToken, ...options.params }, data: options.data }); if (res.status in [404, 400]) { retry -= 1; if (retry > 0) { (0, utils_1.sleep)(1000); continue; } } return res.data; } catch (error) { console.error(error); } } }; // 1) 处理自动加微信 API base_url if (!url.startsWith('http://') && !url.startsWith('https://')) { this.API_BASE_URL = options.API_BASE_URL || this.API_BASE_URL; url = `${this.API_BASE_URL}${url}`; } // 2) 请求及重试逻辑 const autoRetry = this.AUTO_RETRY; const maxRetries = autoRetry ? Math.max(this.MAX_RETRIES, 1) : 1; let retryCnt = 0; while (retryCnt < maxRetries) { retryCnt += 1; let res, result; try { res = await _request(); (0, utils_1.sleep)(1000); } catch (error) { } try { result = this.handleResult(res); return result; } catch (error) { } } } handleResult(res, resultProcessor) { if ('base_resp' in res) { } if ('error_code' in res) { res.error_code = Number(res.error_code); } if (resultProcessor) { return resultProcessor(res); } else { return res; } } async fetchAccessToken() { } accessTokenKey() { return `${this.appid}_access_token`; } async accessToken() { let accessToken = this.session.get(this.accessTokenKey()); if (accessToken) { return accessToken; } else { accessToken = await this.fetchAccessToken(); return accessToken; } } get(url, params) { return this.request(url, { method: 'get', params }); } post(url, data) { return this.request(url, { method: 'post', data }); } } exports.BaseWeChatClient = BaseWeChatClient; //# sourceMappingURL=index.js.map