coa-wx-isv
Version:
一个轻量的微信SDK服务商版 for Node.js
83 lines (82 loc) • 3.52 kB
JavaScript
;
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;