83 lines
3.4 KiB
JavaScript
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;
|