feat: 通道产品策略实现 (alipay/wechat/douyin/lakala/ums 共12个)

This commit is contained in:
bootx
2026-06-13 18:24:28 +08:00
parent 7a12970325
commit 0994c97a08
12 changed files with 749 additions and 0 deletions

View File

@@ -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<PayMethodEnum, List<PayCapabilityEnum>> 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<PayProviderEnum> supportedPayProviders() {
return List.of(ALIPAY);
}
@Override
public Map<PayMethodEnum, List<PayCapabilityEnum>> methodCapabilityMapping() {
return METHOD_CAP_MAP;
}
}

View File

@@ -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<PayMethodEnum, List<PayCapabilityEnum>> 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<PayProviderEnum> supportedPayProviders() {
return List.of(ALIPAY);
}
@Override
public Map<PayMethodEnum, List<PayCapabilityEnum>> methodCapabilityMapping() {
return METHOD_CAP_MAP;
}
}

View File

@@ -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<PayProviderEnum> supportedPayProviders() {
return Collections.emptyList();
}
@Override
public Map<PayMethodEnum, List<PayCapabilityEnum>> methodCapabilityMapping() {
return Collections.emptyMap();
}
}

View File

@@ -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<PayMethodEnum, List<PayCapabilityEnum>> 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<PayProviderEnum> supportedPayProviders() {
return List.of(WECHAT, ALIPAY, UNION_PAY);
}
@Override
public Map<PayMethodEnum, List<PayCapabilityEnum>> methodCapabilityMapping() {
return METHOD_CAP_MAP;
}
}

View File

@@ -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<PayMethodEnum, List<PayCapabilityEnum>> 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<PayProviderEnum> supportedPayProviders() {
return List.of(WECHAT, ALIPAY);
}
@Override
public Map<PayMethodEnum, List<PayCapabilityEnum>> methodCapabilityMapping() {
return METHOD_CAP_MAP;
}
}

View File

@@ -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<PayMethodEnum, List<PayCapabilityEnum>> 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<PayProviderEnum> supportedPayProviders() {
return List.of(UNION_PAY);
}
@Override
public Map<PayMethodEnum, List<PayCapabilityEnum>> methodCapabilityMapping() {
return METHOD_CAP_MAP;
}
}

View File

@@ -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<PayMethodEnum, List<PayCapabilityEnum>> 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<PayProviderEnum> supportedPayProviders() {
return List.of(WECHAT, ALIPAY, UNION_PAY);
}
@Override
public Map<PayMethodEnum, List<PayCapabilityEnum>> methodCapabilityMapping() {
return METHOD_CAP_MAP;
}
}

View File

@@ -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<PayMethodEnum, List<PayCapabilityEnum>> 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<PayProviderEnum> supportedPayProviders() {
return List.of(WECHAT, ALIPAY);
}
@Override
public Map<PayMethodEnum, List<PayCapabilityEnum>> methodCapabilityMapping() {
return METHOD_CAP_MAP;
}
}

View File

@@ -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<PayMethodEnum, List<PayCapabilityEnum>> 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<PayProviderEnum> supportedPayProviders() {
return List.of(WECHAT, ALIPAY);
}
@Override
public Map<PayMethodEnum, List<PayCapabilityEnum>> methodCapabilityMapping() {
return METHOD_CAP_MAP;
}
}

View File

@@ -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<PayMethodEnum, List<PayCapabilityEnum>> 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<PayProviderEnum> supportedPayProviders() {
return List.of(WECHAT, ALIPAY, UNION_PAY);
}
@Override
public Map<PayMethodEnum, List<PayCapabilityEnum>> methodCapabilityMapping() {
return METHOD_CAP_MAP;
}
}

View File

@@ -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<PayMethodEnum, List<PayCapabilityEnum>> 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<PayProviderEnum> supportedPayProviders() {
return List.of(WECHAT);
}
@Override
public Map<PayMethodEnum, List<PayCapabilityEnum>> methodCapabilityMapping() {
return METHOD_CAP_MAP;
}
}

View File

@@ -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<PayMethodEnum, List<PayCapabilityEnum>> 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<PayProviderEnum> supportedPayProviders() {
return List.of(WECHAT);
}
@Override
public Map<PayMethodEnum, List<PayCapabilityEnum>> methodCapabilityMapping() {
return METHOD_CAP_MAP;
}
}