diff --git a/_doc/Task.md b/_doc/Task.md index 11cc30f9a..369b43a3c 100644 --- a/_doc/Task.md +++ b/_doc/Task.md @@ -8,8 +8,8 @@ - [ ] 支付/退款/转账商户订单号根据AppId做隔离 - [ ] 云闪付支付通道对接 - [ ] 分账功能 - - [ ] 分账接收方配置 - - [ ] 分账组管理 + - [x] 分账接收方配置 + - [x] 分账组管理 - [ ] 自动分账管理 - [ ] 分账单管理 - [ ] 网关配套移动端开发 diff --git a/daxpay-single-channel/daxpay-single-alipay/src/main/java/org/dromara/daxpay/channel/alipay/service/transfer/AliPayTransferService.java b/daxpay-single-channel/daxpay-single-alipay/src/main/java/org/dromara/daxpay/channel/alipay/service/transfer/AliPayTransferService.java index 8a45abcfc..e154e97ed 100644 --- a/daxpay-single-channel/daxpay-single-alipay/src/main/java/org/dromara/daxpay/channel/alipay/service/transfer/AliPayTransferService.java +++ b/daxpay-single-channel/daxpay-single-alipay/src/main/java/org/dromara/daxpay/channel/alipay/service/transfer/AliPayTransferService.java @@ -5,6 +5,7 @@ import org.dromara.daxpay.channel.alipay.entity.config.AliPayConfig; import org.dromara.daxpay.channel.alipay.service.config.AliPayConfigService; import org.dromara.daxpay.core.enums.TransferPayeeTypeEnum; import org.dromara.daxpay.core.enums.TransferStatusEnum; +import org.dromara.daxpay.core.exception.OperationFailException; import org.dromara.daxpay.core.exception.TradeFailException; import org.dromara.daxpay.core.util.PayUtil; import org.dromara.daxpay.service.bo.trade.TransferResultBo; @@ -78,8 +79,8 @@ public class AliPayTransferService { // 收款人姓名 payeeInfo.setName(order.getPayeeName()); // 收款人类型 - String identityType = TransferPayeeTypeEnum.findByCode(order.getPayeeType()) - .getOutCode(); + TransferPayeeTypeEnum payeeType = TransferPayeeTypeEnum.findByCode(order.getPayeeType()); + String identityType = this.getIdentityType(payeeType); payeeInfo.setIdentityType(identityType); model.setPayeeInfo(payeeInfo); model.setRemark(order.getReason()); @@ -100,4 +101,23 @@ public class AliPayTransferService { } return transferInfo; } + + /** + * + */ + public String getIdentityType(TransferPayeeTypeEnum payeeType){ + switch (payeeType){ + // 以2088开头的纯16位数字 + case USER_ID -> { + return "ALIPAY_USER_ID"; + } + case OPEN_ID -> { + return "ALIPAY_OPEN_ID"; + } + case LOGIN_NAME -> { + return "ALIPAY_LOGON_ID"; + } + default -> throw new OperationFailException("不支持的收款账号类型"); + } + } } diff --git a/daxpay-single-channel/daxpay-single-alipay/src/main/java/org/dromara/daxpay/channel/alipay/strategy/AliPayTransferStrategy.java b/daxpay-single-channel/daxpay-single-alipay/src/main/java/org/dromara/daxpay/channel/alipay/strategy/AliPayTransferStrategy.java index db27ab391..724645a81 100644 --- a/daxpay-single-channel/daxpay-single-alipay/src/main/java/org/dromara/daxpay/channel/alipay/strategy/AliPayTransferStrategy.java +++ b/daxpay-single-channel/daxpay-single-alipay/src/main/java/org/dromara/daxpay/channel/alipay/strategy/AliPayTransferStrategy.java @@ -41,7 +41,7 @@ public class AliPayTransferStrategy extends AbsTransferStrategy { public void doValidateParam(TransferParam transferParam) { // 转账接收方类型校验 String payeeType = transferParam.getPayeeType(); - if (!List.of(ALI_USER_ID.getCode(), ALI_OPEN_ID.getCode(), ALI_LOGIN_NAME.getCode()).contains(payeeType)){ + if (!List.of(USER_ID.getCode(), OPEN_ID.getCode(), LOGIN_NAME.getCode()).contains(payeeType)){ throw new ValidationFailedException("支付宝不支持该类型收款人"); } } diff --git a/daxpay-single-channel/daxpay-single-wechat/src/main/java/org/dromara/daxpay/channel/wechat/service/allocation/WechatPayAllocReceiverV2Service.java b/daxpay-single-channel/daxpay-single-wechat/src/main/java/org/dromara/daxpay/channel/wechat/service/allocation/WechatPayAllocReceiverV2Service.java index 788bee709..ecf76da13 100644 --- a/daxpay-single-channel/daxpay-single-wechat/src/main/java/org/dromara/daxpay/channel/wechat/service/allocation/WechatPayAllocReceiverV2Service.java +++ b/daxpay-single-channel/daxpay-single-wechat/src/main/java/org/dromara/daxpay/channel/wechat/service/allocation/WechatPayAllocReceiverV2Service.java @@ -17,7 +17,6 @@ import org.dromara.daxpay.core.exception.OperationFailException; import org.dromara.daxpay.service.entity.allocation.receiver.AllocReceiver; import org.springframework.stereotype.Service; -import java.util.List; import java.util.Locale; import java.util.Objects; @@ -50,13 +49,12 @@ public class WechatPayAllocReceiverV2Service { ProfitSharingReceiverRequest request = new ProfitSharingReceiverRequest(); Receiver receiver = new Receiver(receiverType,allocReceiver.getReceiverAccount(),allocReceiver.getReceiverName(),getRelationType(allocReceiver.getRelationType()),allocReceiver.getRelationName()); - List receivers = List.of(receiver); - request.setReceiver(GSON.toJson(receivers)); + request.setReceiver(GSON.toJson(receiver)); try { sharingService.addReceiver(request); } catch (WxPayException e) { - throw new OperationFailException("微信添加分账方V3失败: "+e.getMessage()); + throw new OperationFailException("微信添加分账方V2失败: "+e.getMessage()); } } @@ -72,12 +70,11 @@ public class WechatPayAllocReceiverV2Service { ProfitSharingReceiverRequest request = new ProfitSharingReceiverRequest(); Receiver receiver = new Receiver(receiverType,allocReceiver.getReceiverAccount()); - List receivers = List.of(receiver); - request.setReceiver(GSON.toJson(receivers)); + request.setReceiver(GSON.toJson(receiver)); try { sharingService.removeReceiver(request); } catch (WxPayException e) { - throw new OperationFailException("微信添加分账方V3失败: "+e.getMessage()); + throw new OperationFailException("微信删除分账方V2失败: "+e.getMessage()); } } diff --git a/daxpay-single-channel/daxpay-single-wechat/src/main/java/org/dromara/daxpay/channel/wechat/service/allocation/WechatPayAllocReceiverV3Service.java b/daxpay-single-channel/daxpay-single-wechat/src/main/java/org/dromara/daxpay/channel/wechat/service/allocation/WechatPayAllocReceiverV3Service.java index 880f56849..264a9714b 100644 --- a/daxpay-single-channel/daxpay-single-wechat/src/main/java/org/dromara/daxpay/channel/wechat/service/allocation/WechatPayAllocReceiverV3Service.java +++ b/daxpay-single-channel/daxpay-single-wechat/src/main/java/org/dromara/daxpay/channel/wechat/service/allocation/WechatPayAllocReceiverV3Service.java @@ -42,6 +42,7 @@ public class WechatPayAllocReceiverV3Service { ProfitSharingService sharingService = wxPayService.getProfitSharingService(); ProfitSharingReceiverV3Request request = new ProfitSharingReceiverV3Request(); + request.setAppid(config.getWxAppId()); request.setType(receiverType); request.setAccount(allocReceiver.getReceiverAccount()); request.setName(allocReceiver.getReceiverName()); @@ -65,6 +66,7 @@ public class WechatPayAllocReceiverV3Service { ProfitSharingService sharingService = wxPayService.getProfitSharingService(); ProfitSharingReceiverV3Request request = new ProfitSharingReceiverV3Request(); + request.setAppid(config.getAppId()); request.setType(receiverType); request.setAccount(allocReceiver.getReceiverAccount()); request.setName(allocReceiver.getReceiverName()); diff --git a/daxpay-single-channel/daxpay-single-wechat/src/main/java/org/dromara/daxpay/channel/wechat/strategy/WechatTransferStrategy.java b/daxpay-single-channel/daxpay-single-wechat/src/main/java/org/dromara/daxpay/channel/wechat/strategy/WechatTransferStrategy.java index 985fe582b..1d86feb99 100644 --- a/daxpay-single-channel/daxpay-single-wechat/src/main/java/org/dromara/daxpay/channel/wechat/strategy/WechatTransferStrategy.java +++ b/daxpay-single-channel/daxpay-single-wechat/src/main/java/org/dromara/daxpay/channel/wechat/strategy/WechatTransferStrategy.java @@ -50,7 +50,7 @@ public class WechatTransferStrategy extends AbsTransferStrategy { public void doValidateParam(TransferParam transferParam) { // 转账接收方类型校验 String payeeType = transferParam.getPayeeType(); - if (!Objects.equals(TransferPayeeTypeEnum.WX_PERSONAL.getCode(), payeeType)){ + if (!Objects.equals(TransferPayeeTypeEnum.OPEN_ID.getCode(), payeeType)){ throw new ValidationFailedException("微信不支持该类型收款人"); } // 收款方真实姓名。支持标准RSA算法和国密算法,公钥由微信侧提供 diff --git a/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/enums/TransferPayeeTypeEnum.java b/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/enums/TransferPayeeTypeEnum.java index 6e66a45db..481e2623a 100644 --- a/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/enums/TransferPayeeTypeEnum.java +++ b/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/enums/TransferPayeeTypeEnum.java @@ -15,19 +15,15 @@ import java.util.Arrays; @Getter @AllArgsConstructor public enum TransferPayeeTypeEnum { - /** 微信 个人 */ - WX_PERSONAL("wx_personal","openid", "OpenId(微信)"), - /** 支付宝 userId 以2088开头的纯16位数字 */ - ALI_USER_ID("ali_user_id","ALIPAY_USER_ID", "用户ID(支付宝)"), - /** 支付宝 openId */ - ALI_OPEN_ID("ali_open_id","ALIPAY_OPEN_ID", "OpenId(支付宝)"), - /** 支付宝 账号 支持邮箱和手机号格式 */ - ALI_LOGIN_NAME("ali_login_name","ALIPAY_LOGON_ID", "账号(支付宝)"); + /** userId */ + USER_ID("ali_user_id", "用户ID"), + /** openId */ + OPEN_ID("ali_open_id", "OpenId"), + /** 用户账号 */ + LOGIN_NAME("ali_login_name", "用户账号"); /** 编码 */ private final String code; - /** 外部编码, 三方支付系统使用的编码 */ - private final String outCode; /** 名称 */ private final String name;