fix 微信分账方接口调用不成功

This commit is contained in:
DaxPay
2024-10-08 19:02:45 +08:00
parent bfb082bc8b
commit 01de34a3a2
7 changed files with 38 additions and 23 deletions

View File

@@ -8,8 +8,8 @@
- [ ] 支付/退款/转账商户订单号根据AppId做隔离
- [ ] 云闪付支付通道对接
- [ ] 分账功能
- [ ] 分账接收方配置
- [ ] 分账组管理
- [x] 分账接收方配置
- [x] 分账组管理
- [ ] 自动分账管理
- [ ] 分账单管理
- [ ] 网关配套移动端开发

View File

@@ -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("不支持的收款账号类型");
}
}
}

View File

@@ -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("支付宝不支持该类型收款人");
}
}

View File

@@ -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<Receiver> 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<Receiver> 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());
}
}

View File

@@ -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());

View File

@@ -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算法和国密算法公钥由微信侧提供

View File

@@ -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;