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; + } +}