From 0994c97a0889b69fa12966a937933fd688c2e253 Mon Sep 17 00:00:00 2001 From: bootx Date: Sat, 13 Jun 2026 18:24:28 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=80=9A=E9=81=93=E4=BA=A7=E5=93=81?= =?UTF-8?q?=E7=AD=96=E7=95=A5=E5=AE=9E=E7=8E=B0=20(alipay/wechat/douyin/la?= =?UTF-8?q?kala/ums=20=E5=85=B112=E4=B8=AA)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../strategy/AlipayDirectProductStrategy.java | 75 ++++++++++++++++++ .../strategy/AlipayIsvProductStrategy.java | 68 +++++++++++++++++ .../strategy/DouyinPayProductStrategy.java | 59 ++++++++++++++ .../strategy/LakalaProductStrategy.java | 76 +++++++++++++++++++ .../ums/strategy/UmsAppProductStrategy.java | 55 ++++++++++++++ .../strategy/UmsBarcodeProductStrategy.java | 53 +++++++++++++ .../ums/strategy/UmsH5ProductStrategy.java | 57 ++++++++++++++ .../ums/strategy/UmsJsapiProductStrategy.java | 55 ++++++++++++++ .../ums/strategy/UmsMiniProductStrategy.java | 55 ++++++++++++++ .../strategy/UmsQrcodeProductStrategy.java | 57 ++++++++++++++ .../strategy/WechatDirectProductStrategy.java | 73 ++++++++++++++++++ .../strategy/WechatIsvProductStrategy.java | 66 ++++++++++++++++ 12 files changed, 749 insertions(+) create mode 100644 daxpay-channel/daxpay-channel-alipay/src/main/java/org/dromara/daxpay/channel/alipay/strategy/AlipayDirectProductStrategy.java create mode 100644 daxpay-channel/daxpay-channel-alipay/src/main/java/org/dromara/daxpay/channel/alipay/strategy/AlipayIsvProductStrategy.java create mode 100644 daxpay-channel/daxpay-channel-douyin/src/main/java/org/dromara/daxpay/channel/douyin/strategy/DouyinPayProductStrategy.java create mode 100644 daxpay-channel/daxpay-channel-lakala/src/main/java/org/dromara/daxpay/channel/lakala/strategy/LakalaProductStrategy.java create mode 100644 daxpay-channel/daxpay-channel-ums/src/main/java/org/dromara/daxpay/channel/ums/strategy/UmsAppProductStrategy.java create mode 100644 daxpay-channel/daxpay-channel-ums/src/main/java/org/dromara/daxpay/channel/ums/strategy/UmsBarcodeProductStrategy.java create mode 100644 daxpay-channel/daxpay-channel-ums/src/main/java/org/dromara/daxpay/channel/ums/strategy/UmsH5ProductStrategy.java create mode 100644 daxpay-channel/daxpay-channel-ums/src/main/java/org/dromara/daxpay/channel/ums/strategy/UmsJsapiProductStrategy.java create mode 100644 daxpay-channel/daxpay-channel-ums/src/main/java/org/dromara/daxpay/channel/ums/strategy/UmsMiniProductStrategy.java create mode 100644 daxpay-channel/daxpay-channel-ums/src/main/java/org/dromara/daxpay/channel/ums/strategy/UmsQrcodeProductStrategy.java create mode 100644 daxpay-channel/daxpay-channel-wechat/src/main/java/org/dromara/daxpay/channel/wechat/strategy/WechatDirectProductStrategy.java create mode 100644 daxpay-channel/daxpay-channel-wechat/src/main/java/org/dromara/daxpay/channel/wechat/strategy/WechatIsvProductStrategy.java diff --git a/daxpay-channel/daxpay-channel-alipay/src/main/java/org/dromara/daxpay/channel/alipay/strategy/AlipayDirectProductStrategy.java b/daxpay-channel/daxpay-channel-alipay/src/main/java/org/dromara/daxpay/channel/alipay/strategy/AlipayDirectProductStrategy.java new file mode 100644 index 000000000..ae5399260 --- /dev/null +++ b/daxpay-channel/daxpay-channel-alipay/src/main/java/org/dromara/daxpay/channel/alipay/strategy/AlipayDirectProductStrategy.java @@ -0,0 +1,75 @@ +package org.dromara.daxpay.channel.alipay.strategy; + +import org.dromara.daxpay.platform.core.enums.pay.channel.ChannelApiCallMode; +import org.dromara.daxpay.platform.core.enums.pay.channel.ChannelPayIdType; +import org.dromara.daxpay.platform.core.enums.pay.channel.PayCapabilityEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.PayMethodEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.ProductEnum; +import org.dromara.daxpay.payment.pay.strategy.AbsProductStrategy; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +import static org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum.ALIPAY; + +/// # 支付宝直连产品策略 +/// +@Slf4j +@Service +@RequiredArgsConstructor +public class AlipayDirectProductStrategy extends AbsProductStrategy { + + private static final Map> METHOD_CAP_MAP = Map.ofEntries( + Map.entry(PayMethodEnum.ALIPAY_BARCODE, List.of(PayCapabilityEnum.ALIPAY_BARCODE)), + Map.entry(PayMethodEnum.ALIPAY_QR, List.of(PayCapabilityEnum.ALIPAY_ORDER_QR)), + Map.entry(PayMethodEnum.ALIPAY_ORDER_QR, List.of(PayCapabilityEnum.ALIPAY_ORDER_QR)), + Map.entry(PayMethodEnum.ALIPAY_JSAPI, List.of(PayCapabilityEnum.ALIPAY_JSAPI)), + Map.entry(PayMethodEnum.ALIPAY_MINI, List.of(PayCapabilityEnum.ALIPAY_MINI)), + Map.entry(PayMethodEnum.ALIPAY_PC, List.of(PayCapabilityEnum.ALIPAY_PC)), + Map.entry(PayMethodEnum.ALIPAY_H5, List.of(PayCapabilityEnum.ALIPAY_H5)), + Map.entry(PayMethodEnum.ALIPAY_APP, List.of(PayCapabilityEnum.ALIPAY_APP))); + + @Override + public ProductEnum getProduct() { + return ProductEnum.ALIPAY; + } + + @Override + public boolean isAllocatable() { + return true; + } + + @Override + public boolean isApply() { + return true; + } + + @Override + public boolean isSandbox() { + return true; + } + + @Override + public ChannelApiCallMode getApiCallMode() { + return ChannelApiCallMode.MCH; + } + + @Override + public ChannelPayIdType getPayIdType() { + return ChannelPayIdType.MCH; + } + + @Override + public List supportedPayProviders() { + return List.of(ALIPAY); + } + + @Override + public Map> methodCapabilityMapping() { + return METHOD_CAP_MAP; + } +} diff --git a/daxpay-channel/daxpay-channel-alipay/src/main/java/org/dromara/daxpay/channel/alipay/strategy/AlipayIsvProductStrategy.java b/daxpay-channel/daxpay-channel-alipay/src/main/java/org/dromara/daxpay/channel/alipay/strategy/AlipayIsvProductStrategy.java new file mode 100644 index 000000000..b1857902c --- /dev/null +++ b/daxpay-channel/daxpay-channel-alipay/src/main/java/org/dromara/daxpay/channel/alipay/strategy/AlipayIsvProductStrategy.java @@ -0,0 +1,68 @@ +package org.dromara.daxpay.channel.alipay.strategy; + +import org.dromara.daxpay.platform.core.enums.pay.channel.ChannelApiCallMode; +import org.dromara.daxpay.platform.core.enums.pay.channel.ChannelPayIdType; +import org.dromara.daxpay.platform.core.enums.pay.channel.PayCapabilityEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.PayMethodEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.ProductEnum; +import org.dromara.daxpay.payment.pay.strategy.AbsProductStrategy; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +import static org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum.ALIPAY; + +/// # 支付宝服务商产品策略 +/// +@Slf4j +@Service +@RequiredArgsConstructor +public class AlipayIsvProductStrategy extends AbsProductStrategy { + + private static final Map> METHOD_CAP_MAP = Map.ofEntries( + Map.entry(PayMethodEnum.ALIPAY_BARCODE, List.of(PayCapabilityEnum.ALIPAY_BARCODE)), + Map.entry(PayMethodEnum.ALIPAY_QR, List.of(PayCapabilityEnum.ALIPAY_ORDER_QR)), + Map.entry(PayMethodEnum.ALIPAY_ORDER_QR, List.of(PayCapabilityEnum.ALIPAY_ORDER_QR)), + Map.entry(PayMethodEnum.ALIPAY_JSAPI, List.of(PayCapabilityEnum.ALIPAY_JSAPI)), + Map.entry(PayMethodEnum.ALIPAY_MINI, List.of(PayCapabilityEnum.ALIPAY_MINI)), + Map.entry(PayMethodEnum.ALIPAY_PC, List.of(PayCapabilityEnum.ALIPAY_PC)), + Map.entry(PayMethodEnum.ALIPAY_H5, List.of(PayCapabilityEnum.ALIPAY_H5)), + Map.entry(PayMethodEnum.ALIPAY_APP, List.of(PayCapabilityEnum.ALIPAY_APP))); + + @Override + public ProductEnum getProduct() { + return ProductEnum.ALIPAY_ISV; + } + + @Override + public boolean isIsv() { return true; } + + @Override + public boolean isAllocatable() { return true; } + + @Override + public boolean isApply() { return true; } + + @Override + public boolean isSandbox() { return false; } + + @Override + public ChannelApiCallMode getApiCallMode() { return ChannelApiCallMode.ISV; } + + @Override + public ChannelPayIdType getPayIdType() { return ChannelPayIdType.IDENTITY; } + + @Override + public List supportedPayProviders() { + return List.of(ALIPAY); + } + + @Override + public Map> methodCapabilityMapping() { + return METHOD_CAP_MAP; + } +} diff --git a/daxpay-channel/daxpay-channel-douyin/src/main/java/org/dromara/daxpay/channel/douyin/strategy/DouyinPayProductStrategy.java b/daxpay-channel/daxpay-channel-douyin/src/main/java/org/dromara/daxpay/channel/douyin/strategy/DouyinPayProductStrategy.java new file mode 100644 index 000000000..57d2a3784 --- /dev/null +++ b/daxpay-channel/daxpay-channel-douyin/src/main/java/org/dromara/daxpay/channel/douyin/strategy/DouyinPayProductStrategy.java @@ -0,0 +1,59 @@ +package org.dromara.daxpay.channel.douyin.strategy; + +import org.dromara.daxpay.platform.core.enums.pay.channel.ChannelApiCallMode; +import org.dromara.daxpay.platform.core.enums.pay.channel.ChannelPayIdType; +import org.dromara.daxpay.platform.core.enums.pay.channel.PayCapabilityEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.PayMethodEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.ProductEnum; +import org.dromara.daxpay.payment.pay.strategy.AbsProductStrategy; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +/// # 抖音支付直连产品策略 +/// +@Slf4j +@Service +@RequiredArgsConstructor +public class DouyinPayProductStrategy extends AbsProductStrategy { + + @Override + public ProductEnum getProduct() { + return ProductEnum.DOUYIN_PAY; + } + + @Override + public boolean isApply() { + return true; + } + + @Override + public boolean isSandbox() { + return false; + } + + @Override + public ChannelApiCallMode getApiCallMode() { + return ChannelApiCallMode.MCH; + } + + @Override + public ChannelPayIdType getPayIdType() { + return ChannelPayIdType.MCH; + } + + @Override + public List supportedPayProviders() { + return Collections.emptyList(); + } + + @Override + public Map> methodCapabilityMapping() { + return Collections.emptyMap(); + } +} diff --git a/daxpay-channel/daxpay-channel-lakala/src/main/java/org/dromara/daxpay/channel/lakala/strategy/LakalaProductStrategy.java b/daxpay-channel/daxpay-channel-lakala/src/main/java/org/dromara/daxpay/channel/lakala/strategy/LakalaProductStrategy.java new file mode 100644 index 000000000..c6e9b2303 --- /dev/null +++ b/daxpay-channel/daxpay-channel-lakala/src/main/java/org/dromara/daxpay/channel/lakala/strategy/LakalaProductStrategy.java @@ -0,0 +1,76 @@ +package org.dromara.daxpay.channel.lakala.strategy; + +import org.dromara.daxpay.platform.core.enums.pay.channel.ChannelApiCallMode; +import org.dromara.daxpay.platform.core.enums.pay.channel.ChannelPayIdType; +import org.dromara.daxpay.platform.core.enums.pay.channel.PayCapabilityEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.PayMethodEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.ProductEnum; +import org.dromara.daxpay.payment.pay.strategy.AbsProductStrategy; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +import static org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum.ALIPAY; +import static org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum.UNION_PAY; +import static org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum.WECHAT; + +/// # 拉卡拉支付产品策略 +/// +@Slf4j +@Service +@RequiredArgsConstructor +public class LakalaProductStrategy extends AbsProductStrategy { + + private static final Map> METHOD_CAP_MAP = Map.ofEntries( + Map.entry(PayMethodEnum.WECHAT_BARCODE, List.of(PayCapabilityEnum.WECHAT_BARCODE)), + Map.entry(PayMethodEnum.ALIPAY_BARCODE, List.of(PayCapabilityEnum.ALIPAY_BARCODE)), + Map.entry(PayMethodEnum.UNION_PAY_BARCODE, List.of(PayCapabilityEnum.UNION_PAY_BARCODE)), + Map.entry(PayMethodEnum.WECHAT_JSAPI, List.of(PayCapabilityEnum.WECHAT_JSAPI)), + Map.entry(PayMethodEnum.WECHAT_APP, List.of(PayCapabilityEnum.WECHAT_APP)), + Map.entry(PayMethodEnum.WECHAT_MINI, List.of(PayCapabilityEnum.WECHAT_MINI)), + Map.entry(PayMethodEnum.ALIPAY_QR, List.of(PayCapabilityEnum.ALIPAY_ORDER_QR)), + Map.entry(PayMethodEnum.ALIPAY_JSAPI, List.of(PayCapabilityEnum.ALIPAY_JSAPI)), + Map.entry(PayMethodEnum.ALIPAY_MINI, List.of(PayCapabilityEnum.ALIPAY_MINI)), + Map.entry(PayMethodEnum.UNION_QR, List.of(PayCapabilityEnum.UNION_PAY_QR)), + Map.entry(PayMethodEnum.UNION_JSAPI, List.of(PayCapabilityEnum.UNION_PAY_JSAPI))); + + @Override + public ProductEnum getProduct() { + return ProductEnum.LAKALA_PAY; + } + + @Override + public boolean isIsv() { return true; } + + @Override + public boolean isAllocatable() { return true; } + + @Override + public boolean isTerminal() { return true; } + + @Override + public boolean isApply() { return true; } + + @Override + public boolean isSandbox() { return true; } + + @Override + public ChannelApiCallMode getApiCallMode() { return ChannelApiCallMode.ISV; } + + @Override + public ChannelPayIdType getPayIdType() { return ChannelPayIdType.MCH; } + + @Override + public List supportedPayProviders() { + return List.of(WECHAT, ALIPAY, UNION_PAY); + } + + @Override + public Map> methodCapabilityMapping() { + return METHOD_CAP_MAP; + } +} diff --git a/daxpay-channel/daxpay-channel-ums/src/main/java/org/dromara/daxpay/channel/ums/strategy/UmsAppProductStrategy.java b/daxpay-channel/daxpay-channel-ums/src/main/java/org/dromara/daxpay/channel/ums/strategy/UmsAppProductStrategy.java new file mode 100644 index 000000000..7734cc0ad --- /dev/null +++ b/daxpay-channel/daxpay-channel-ums/src/main/java/org/dromara/daxpay/channel/ums/strategy/UmsAppProductStrategy.java @@ -0,0 +1,55 @@ +package org.dromara.daxpay.channel.ums.strategy; + +import org.dromara.daxpay.platform.core.enums.pay.channel.PayCapabilityEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.PayMethodEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.ProductEnum; +import org.dromara.daxpay.payment.pay.strategy.AbsProductStrategy; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +import static org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum.ALIPAY; +import static org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum.WECHAT; + +/// # 银联商务APP支付产品策略 +/// +@Slf4j +@Service +@RequiredArgsConstructor +public class UmsAppProductStrategy extends AbsProductStrategy { + + private static final Map> METHOD_CAP_MAP = Map.of( + PayMethodEnum.WECHAT_APP, List.of(PayCapabilityEnum.WECHAT_APP), + PayMethodEnum.ALIPAY_APP, List.of(PayCapabilityEnum.ALIPAY_APP)); + + @Override + public ProductEnum getProduct() { + return ProductEnum.UMS_APP; + } + + @Override + public boolean isAllocatable() { return true; } + + @Override + public boolean isTerminal() { return true; } + + @Override + public boolean isApply() { return true; } + + @Override + public boolean isSandbox() { return true; } + + @Override + public List supportedPayProviders() { + return List.of(WECHAT, ALIPAY); + } + + @Override + public Map> methodCapabilityMapping() { + return METHOD_CAP_MAP; + } +} diff --git a/daxpay-channel/daxpay-channel-ums/src/main/java/org/dromara/daxpay/channel/ums/strategy/UmsBarcodeProductStrategy.java b/daxpay-channel/daxpay-channel-ums/src/main/java/org/dromara/daxpay/channel/ums/strategy/UmsBarcodeProductStrategy.java new file mode 100644 index 000000000..77ed6c1ec --- /dev/null +++ b/daxpay-channel/daxpay-channel-ums/src/main/java/org/dromara/daxpay/channel/ums/strategy/UmsBarcodeProductStrategy.java @@ -0,0 +1,53 @@ +package org.dromara.daxpay.channel.ums.strategy; + +import org.dromara.daxpay.platform.core.enums.pay.channel.PayCapabilityEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.PayMethodEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.ProductEnum; +import org.dromara.daxpay.payment.pay.strategy.AbsProductStrategy; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +import static org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum.UNION_PAY; + +/// # 银联商务B扫C支付(被扫)产品策略 +/// +@Slf4j +@Service +@RequiredArgsConstructor +public class UmsBarcodeProductStrategy extends AbsProductStrategy { + + private static final Map> METHOD_CAP_MAP = Map.of( + PayMethodEnum.UNION_PAY_BARCODE, List.of(PayCapabilityEnum.UNION_PAY_BARCODE)); + + @Override + public ProductEnum getProduct() { + return ProductEnum.UMS_BARCODE; + } + + @Override + public boolean isAllocatable() { return true; } + + @Override + public boolean isTerminal() { return true; } + + @Override + public boolean isApply() { return true; } + + @Override + public boolean isSandbox() { return true; } + + @Override + public List supportedPayProviders() { + return List.of(UNION_PAY); + } + + @Override + public Map> methodCapabilityMapping() { + return METHOD_CAP_MAP; + } +} diff --git a/daxpay-channel/daxpay-channel-ums/src/main/java/org/dromara/daxpay/channel/ums/strategy/UmsH5ProductStrategy.java b/daxpay-channel/daxpay-channel-ums/src/main/java/org/dromara/daxpay/channel/ums/strategy/UmsH5ProductStrategy.java new file mode 100644 index 000000000..6e5e17eda --- /dev/null +++ b/daxpay-channel/daxpay-channel-ums/src/main/java/org/dromara/daxpay/channel/ums/strategy/UmsH5ProductStrategy.java @@ -0,0 +1,57 @@ +package org.dromara.daxpay.channel.ums.strategy; + +import org.dromara.daxpay.platform.core.enums.pay.channel.PayCapabilityEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.PayMethodEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.ProductEnum; +import org.dromara.daxpay.payment.pay.strategy.AbsProductStrategy; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +import static org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum.ALIPAY; +import static org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum.UNION_PAY; +import static org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum.WECHAT; + +/// # 银联商务H5支付产品策略 +/// +@Slf4j +@Service +@RequiredArgsConstructor +public class UmsH5ProductStrategy extends AbsProductStrategy { + + private static final Map> METHOD_CAP_MAP = Map.of( + PayMethodEnum.WECHAT_H5, List.of(PayCapabilityEnum.WECHAT_H5), + PayMethodEnum.ALIPAY_H5, List.of(PayCapabilityEnum.ALIPAY_H5), + PayMethodEnum.UNION_H5, List.of(PayCapabilityEnum.UNION_PAY_H5)); + + @Override + public ProductEnum getProduct() { + return ProductEnum.UMS_H5; + } + + @Override + public boolean isAllocatable() { return true; } + + @Override + public boolean isTerminal() { return true; } + + @Override + public boolean isApply() { return true; } + + @Override + public boolean isSandbox() { return true; } + + @Override + public List supportedPayProviders() { + return List.of(WECHAT, ALIPAY, UNION_PAY); + } + + @Override + public Map> methodCapabilityMapping() { + return METHOD_CAP_MAP; + } +} diff --git a/daxpay-channel/daxpay-channel-ums/src/main/java/org/dromara/daxpay/channel/ums/strategy/UmsJsapiProductStrategy.java b/daxpay-channel/daxpay-channel-ums/src/main/java/org/dromara/daxpay/channel/ums/strategy/UmsJsapiProductStrategy.java new file mode 100644 index 000000000..6b8cd48e9 --- /dev/null +++ b/daxpay-channel/daxpay-channel-ums/src/main/java/org/dromara/daxpay/channel/ums/strategy/UmsJsapiProductStrategy.java @@ -0,0 +1,55 @@ +package org.dromara.daxpay.channel.ums.strategy; + +import org.dromara.daxpay.platform.core.enums.pay.channel.PayCapabilityEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.PayMethodEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.ProductEnum; +import org.dromara.daxpay.payment.pay.strategy.AbsProductStrategy; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +import static org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum.ALIPAY; +import static org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum.WECHAT; + +/// # 银联商务公众号支付产品策略 +/// +@Slf4j +@Service +@RequiredArgsConstructor +public class UmsJsapiProductStrategy extends AbsProductStrategy { + + private static final Map> METHOD_CAP_MAP = Map.of( + PayMethodEnum.WECHAT_JSAPI, List.of(PayCapabilityEnum.WECHAT_JSAPI), + PayMethodEnum.ALIPAY_JSAPI, List.of(PayCapabilityEnum.ALIPAY_JSAPI)); + + @Override + public ProductEnum getProduct() { + return ProductEnum.UMS_JSAPI; + } + + @Override + public boolean isAllocatable() { return true; } + + @Override + public boolean isTerminal() { return true; } + + @Override + public boolean isApply() { return true; } + + @Override + public boolean isSandbox() { return true; } + + @Override + public List supportedPayProviders() { + return List.of(WECHAT, ALIPAY); + } + + @Override + public Map> methodCapabilityMapping() { + return METHOD_CAP_MAP; + } +} diff --git a/daxpay-channel/daxpay-channel-ums/src/main/java/org/dromara/daxpay/channel/ums/strategy/UmsMiniProductStrategy.java b/daxpay-channel/daxpay-channel-ums/src/main/java/org/dromara/daxpay/channel/ums/strategy/UmsMiniProductStrategy.java new file mode 100644 index 000000000..fa6bed82c --- /dev/null +++ b/daxpay-channel/daxpay-channel-ums/src/main/java/org/dromara/daxpay/channel/ums/strategy/UmsMiniProductStrategy.java @@ -0,0 +1,55 @@ +package org.dromara.daxpay.channel.ums.strategy; + +import org.dromara.daxpay.platform.core.enums.pay.channel.PayCapabilityEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.PayMethodEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.ProductEnum; +import org.dromara.daxpay.payment.pay.strategy.AbsProductStrategy; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +import static org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum.ALIPAY; +import static org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum.WECHAT; + +/// # 银联商务小程序支付产品策略 +/// +@Slf4j +@Service +@RequiredArgsConstructor +public class UmsMiniProductStrategy extends AbsProductStrategy { + + private static final Map> METHOD_CAP_MAP = Map.of( + PayMethodEnum.WECHAT_MINI, List.of(PayCapabilityEnum.WECHAT_MINI), + PayMethodEnum.ALIPAY_MINI, List.of(PayCapabilityEnum.ALIPAY_MINI)); + + @Override + public ProductEnum getProduct() { + return ProductEnum.UMS_MINI; + } + + @Override + public boolean isAllocatable() { return true; } + + @Override + public boolean isTerminal() { return true; } + + @Override + public boolean isApply() { return true; } + + @Override + public boolean isSandbox() { return true; } + + @Override + public List supportedPayProviders() { + return List.of(WECHAT, ALIPAY); + } + + @Override + public Map> methodCapabilityMapping() { + return METHOD_CAP_MAP; + } +} diff --git a/daxpay-channel/daxpay-channel-ums/src/main/java/org/dromara/daxpay/channel/ums/strategy/UmsQrcodeProductStrategy.java b/daxpay-channel/daxpay-channel-ums/src/main/java/org/dromara/daxpay/channel/ums/strategy/UmsQrcodeProductStrategy.java new file mode 100644 index 000000000..308311e74 --- /dev/null +++ b/daxpay-channel/daxpay-channel-ums/src/main/java/org/dromara/daxpay/channel/ums/strategy/UmsQrcodeProductStrategy.java @@ -0,0 +1,57 @@ +package org.dromara.daxpay.channel.ums.strategy; + +import org.dromara.daxpay.platform.core.enums.pay.channel.PayCapabilityEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.PayMethodEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.ProductEnum; +import org.dromara.daxpay.payment.pay.strategy.AbsProductStrategy; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +import static org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum.ALIPAY; +import static org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum.UNION_PAY; +import static org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum.WECHAT; + +/// # 银联商务C扫B支付(主扫)产品策略 +/// +@Slf4j +@Service +@RequiredArgsConstructor +public class UmsQrcodeProductStrategy extends AbsProductStrategy { + + private static final Map> METHOD_CAP_MAP = Map.of( + PayMethodEnum.WECHAT_QR, List.of(PayCapabilityEnum.WECHAT_QR), + PayMethodEnum.ALIPAY_QR, List.of(PayCapabilityEnum.ALIPAY_ORDER_QR), + PayMethodEnum.UNION_QR, List.of(PayCapabilityEnum.UNION_PAY_QR)); + + @Override + public ProductEnum getProduct() { + return ProductEnum.UMS_QRCODE; + } + + @Override + public boolean isAllocatable() { return true; } + + @Override + public boolean isTerminal() { return true; } + + @Override + public boolean isApply() { return true; } + + @Override + public boolean isSandbox() { return true; } + + @Override + public List supportedPayProviders() { + return List.of(WECHAT, ALIPAY, UNION_PAY); + } + + @Override + public Map> methodCapabilityMapping() { + return METHOD_CAP_MAP; + } +} diff --git a/daxpay-channel/daxpay-channel-wechat/src/main/java/org/dromara/daxpay/channel/wechat/strategy/WechatDirectProductStrategy.java b/daxpay-channel/daxpay-channel-wechat/src/main/java/org/dromara/daxpay/channel/wechat/strategy/WechatDirectProductStrategy.java new file mode 100644 index 000000000..1d40c91f4 --- /dev/null +++ b/daxpay-channel/daxpay-channel-wechat/src/main/java/org/dromara/daxpay/channel/wechat/strategy/WechatDirectProductStrategy.java @@ -0,0 +1,73 @@ +package org.dromara.daxpay.channel.wechat.strategy; + +import org.dromara.daxpay.platform.core.enums.pay.channel.ChannelApiCallMode; +import org.dromara.daxpay.platform.core.enums.pay.channel.ChannelPayIdType; +import org.dromara.daxpay.platform.core.enums.pay.channel.PayCapabilityEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.PayMethodEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.ProductEnum; +import org.dromara.daxpay.payment.pay.strategy.AbsProductStrategy; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +import static org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum.WECHAT; + +/// # 微信支付直连产品策略 +/// +@Slf4j +@Service +@RequiredArgsConstructor +public class WechatDirectProductStrategy extends AbsProductStrategy { + + private static final Map> METHOD_CAP_MAP = Map.of( + PayMethodEnum.WECHAT_QR, List.of(PayCapabilityEnum.WECHAT_QR), + PayMethodEnum.WECHAT_APP, List.of(PayCapabilityEnum.WECHAT_APP), + PayMethodEnum.WECHAT_H5, List.of(PayCapabilityEnum.WECHAT_H5), + PayMethodEnum.WECHAT_BARCODE, List.of(PayCapabilityEnum.WECHAT_BARCODE), + PayMethodEnum.WECHAT_JSAPI, List.of(PayCapabilityEnum.WECHAT_JSAPI), + PayMethodEnum.WECHAT_MINI, List.of(PayCapabilityEnum.WECHAT_MINI)); + + @Override + public ProductEnum getProduct() { + return ProductEnum.WECHAT_PAY; + } + + @Override + public boolean isAllocatable() { + return true; + } + + @Override + public boolean isApply() { + return true; + } + + @Override + public boolean isSandbox() { + return false; + } + + @Override + public ChannelApiCallMode getApiCallMode() { + return ChannelApiCallMode.MCH; + } + + @Override + public ChannelPayIdType getPayIdType() { + return ChannelPayIdType.MCH; + } + + @Override + public List supportedPayProviders() { + return List.of(WECHAT); + } + + @Override + public Map> methodCapabilityMapping() { + return METHOD_CAP_MAP; + } +} diff --git a/daxpay-channel/daxpay-channel-wechat/src/main/java/org/dromara/daxpay/channel/wechat/strategy/WechatIsvProductStrategy.java b/daxpay-channel/daxpay-channel-wechat/src/main/java/org/dromara/daxpay/channel/wechat/strategy/WechatIsvProductStrategy.java new file mode 100644 index 000000000..04abd0e2d --- /dev/null +++ b/daxpay-channel/daxpay-channel-wechat/src/main/java/org/dromara/daxpay/channel/wechat/strategy/WechatIsvProductStrategy.java @@ -0,0 +1,66 @@ +package org.dromara.daxpay.channel.wechat.strategy; + +import org.dromara.daxpay.platform.core.enums.pay.channel.ChannelApiCallMode; +import org.dromara.daxpay.platform.core.enums.pay.channel.ChannelPayIdType; +import org.dromara.daxpay.platform.core.enums.pay.channel.PayCapabilityEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.PayMethodEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum; +import org.dromara.daxpay.platform.core.enums.pay.channel.ProductEnum; +import org.dromara.daxpay.payment.pay.strategy.AbsProductStrategy; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +import static org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum.WECHAT; + +/// # 微信服务商产品策略 +/// +@Slf4j +@Service +@RequiredArgsConstructor +public class WechatIsvProductStrategy extends AbsProductStrategy { + + private static final Map> METHOD_CAP_MAP = Map.of( + PayMethodEnum.WECHAT_QR, List.of(PayCapabilityEnum.WECHAT_QR), + PayMethodEnum.WECHAT_APP, List.of(PayCapabilityEnum.WECHAT_APP), + PayMethodEnum.WECHAT_H5, List.of(PayCapabilityEnum.WECHAT_H5), + PayMethodEnum.WECHAT_BARCODE, List.of(PayCapabilityEnum.WECHAT_BARCODE), + PayMethodEnum.WECHAT_JSAPI, List.of(PayCapabilityEnum.WECHAT_JSAPI), + PayMethodEnum.WECHAT_MINI, List.of(PayCapabilityEnum.WECHAT_MINI)); + + @Override + public ProductEnum getProduct() { + return ProductEnum.WECHAT_ISV; + } + + @Override + public boolean isIsv() { return true; } + + @Override + public boolean isAllocatable() { return true; } + + @Override + public boolean isApply() { return true; } + + @Override + public boolean isSandbox() { return false; } + + @Override + public ChannelApiCallMode getApiCallMode() { return ChannelApiCallMode.MIX; } + + @Override + public ChannelPayIdType getPayIdType() { return ChannelPayIdType.MCH; } + + @Override + public List supportedPayProviders() { + return List.of(WECHAT); + } + + @Override + public Map> methodCapabilityMapping() { + return METHOD_CAP_MAP; + } +}