UNPKG

coa-wx-isv

Version:

一个轻量的微信SDK服务商版 for Node.js

83 lines (82 loc) 3.52 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.WxIsvBin = void 0; const coa_error_1 = require("coa-error"); const coa_helper_1 = require("coa-helper"); const WxIsvStorage_1 = require("./WxIsvStorage"); const baseURL = 'https://api.weixin.qq.com'; const DefaultCustomErrorMessage = { '-1': '微信系统繁忙,请重试', }; class WxIsvBin { constructor(config, storage) { this.config = config; this.storage = storage !== null && storage !== void 0 ? storage : new WxIsvStorage_1.WxIsvStorage(); } // 请求并处理错误 async request(request, customErrorMessage, customErrorHandler, ignoreError, retryTimes = 0) { // 错误配置 const res = await coa_helper_1.axios.request({ baseURL, ...request }).catch((e) => e); // 处理返回结果 try { return this.handleResponse(res, customErrorMessage, customErrorHandler, ignoreError); } catch (e) { // 触发重试机制 if (e.code === 'CoaWxIsv.WxReturnError.-1' && retryTimes < 3) { retryTimes++; await coa_helper_1.$.timeout(retryTimes * 200); return await this.request(request, customErrorMessage, customErrorHandler, ignoreError, retryTimes); } // 触发错误事件 this.onRequestError(e, res); throw e; } } // 请求并处理错误 async requestTransformResponse(request, customErrorMessage, customErrorHandler, ignoreError, transformResponseFunction, retryTimes = 0) { // 错误配置 const res = await coa_helper_1.axios.request({ baseURL, ...request, transformResponse: [transformResponseFunction] }).catch((e) => e); // 处理返回结果 try { return this.handleResponse(res, customErrorMessage, customErrorHandler, ignoreError); } catch (e) { // 触发重试机制 if (e.code === 'CoaWxIsv.WxReturnError.-1' && retryTimes < 3) { retryTimes++; await coa_helper_1.$.timeout(retryTimes * 200); return await this.request(request, customErrorMessage, customErrorHandler, ignoreError, retryTimes); } // 触发错误事件 this.onRequestError(e, res); throw e; } } // 当错误时触发 // eslint-disable-next-line @typescript-eslint/no-unused-vars onRequestError(error, res) { // do something when error } handleResponse(res, customErrorMessage, customErrorHandler, ignoreError) { const data = res.data || {}; const errorCode = coa_helper_1._.toNumber(data.errcode) || 0; if (errorCode) { // 如果忽略某个错误,则直接返回 if (ignoreError.includes(errorCode)) { return { ignore: errorCode }; } // 自定义错误处理 customErrorHandler(res); // 默认错误处理 const errorMessage = customErrorMessage[errorCode] || DefaultCustomErrorMessage[errorCode] || coa_helper_1._.toString(data.errmsg) || '微信服务返回错误'; coa_error_1.CoaError.throw('CoaWxIsv.WxReturnError.' + errorCode, errorMessage); } // 返回结果 return coa_helper_1._.isPlainObject(data) ? coa_helper_1.$.camelCaseKeys(data) : data; } } exports.WxIsvBin = WxIsvBin;