oak-pay-business/lib/utils/payClazz/index.js

83 lines
3.4 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getPayClazz = exports.registerAppPayClazzConstructor = exports.AppTypeToPayChannelDict = void 0;
const tslib_1 = require("tslib");
const PayConfig_1 = require("../../types/PayConfig");
const assert_1 = tslib_1.__importDefault(require("assert"));
const Offline_1 = tslib_1.__importDefault(require("./Offline"));
const Account_1 = tslib_1.__importDefault(require("./Account"));
const WechatPay_1 = tslib_1.__importDefault(require("./WechatPay"));
exports.AppTypeToPayChannelDict = {
web: [PayConfig_1.PAY_CHANNEL_WECHAT_JS_NAME, PayConfig_1.PAY_CHANNEL_WECHAT_H5_NAME, PayConfig_1.PAY_CHANNEL_WECHAT_NATIVE_NAME],
wechatMp: [PayConfig_1.PAY_CHANNEL_WECHAT_MP_NAME],
wechatPublic: [PayConfig_1.PAY_CHANNEL_WECHAT_JS_NAME],
native: [PayConfig_1.PAY_CHANNEL_WECHAT_APP_NAME],
};
async function createPayClazz(application, channel, context) {
const { type, config, payConfig } = application;
(0, assert_1.default)(exports.AppTypeToPayChannelDict[type].includes(channel));
const wechatPayConfig = (payConfig?.find(ele => ele.channel === channel));
(0, assert_1.default)(wechatPayConfig);
const channel2 = channel; // 目前应该只有wechat系的支付
switch (type) {
case 'web': {
const { wechat } = config;
(0, assert_1.default)(wechat);
const appId = wechat.appId;
return new WechatPay_1.default(channel2, appId, wechatPayConfig);
}
case 'wechatMp': {
const { appId } = config;
return new WechatPay_1.default(channel2, appId, wechatPayConfig);
}
case 'wechatPublic': {
const { appId } = config;
return new WechatPay_1.default(channel2, appId, wechatPayConfig);
}
default: {
(0, assert_1.default)(false, '暂时不支持');
}
}
}
const PayChannelDict = {};
const PayClazzConstructorDict = {
[PayConfig_1.PAY_CHANNEL_OFFLINE_NAME]: async () => new Offline_1.default(),
[PayConfig_1.PAY_CHANNEL_ACCOUNT_NAME]: async () => new Account_1.default(),
[PayConfig_1.PAY_CHANNEL_WECHAT_APP_NAME]: createPayClazz,
[PayConfig_1.PAY_CHANNEL_WECHAT_H5_NAME]: createPayClazz,
[PayConfig_1.PAY_CHANNEL_WECHAT_JS_NAME]: createPayClazz,
[PayConfig_1.PAY_CHANNEL_WECHAT_MP_NAME]: createPayClazz,
[PayConfig_1.PAY_CHANNEL_WECHAT_NATIVE_NAME]: createPayClazz,
};
function registerAppPayClazzConstructor(channel, constructor) {
PayClazzConstructorDict[channel] = constructor;
}
exports.registerAppPayClazzConstructor = registerAppPayClazzConstructor;
async function getPayClazz(appId, channel, context) {
const key = `${appId}.${channel}`;
if (PayChannelDict.hasOwnProperty(key)) {
return PayChannelDict[key];
}
const [application] = await context.select('application', {
data: {
id: 1,
config: 1,
payConfig: 1,
type: 1,
system: {
id: 1,
config: 1,
payConfig: 1,
},
},
filter: {
id: appId,
}
}, { dontCollect: true });
(0, assert_1.default)(PayClazzConstructorDict.hasOwnProperty(channel));
const PayClazz = await PayClazzConstructorDict[channel](application, channel, context);
PayChannelDict[key] = PayClazz;
return PayClazz;
}
exports.getPayClazz = getPayClazz;