mirror of
https://gitee.com/dromara/dax-pay
synced 2026-08-10 23:01:58 +08:00
refactor(transfer): 微信确认收款链接抽取为 TransferConfirmUrlService 复用, 订单详情 processing 状态回填 confirmUrl
- 将运营/商户两端 Controller 内联的 buildConfirmUrl 抽取到 payment-core 的 TransferConfirmUrlService, 发起返回与详情查询共用 - TransferAdminService/MchTransferService 详情查询在待领取(processing)状态时填充 confirmUrl - WechatTransferOrderResult 新增 confirmUrl 字段
This commit is contained in:
@@ -17,8 +17,7 @@ import cn.daxpay.open.payment.trade.transfer.result.DouyinTransferOrderResult;
|
||||
import cn.daxpay.open.payment.trade.transfer.result.TransferCreateResult;
|
||||
import cn.daxpay.open.payment.trade.transfer.result.TransferTradeResult;
|
||||
import cn.daxpay.open.payment.trade.transfer.result.WechatTransferOrderResult;
|
||||
import cn.daxpay.open.platform.system.service.config.infra.PlatformUrlConfigService;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.daxpay.open.payment.trade.transfer.runtime.service.TransferConfirmUrlService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.validation.Valid;
|
||||
@@ -43,7 +42,7 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
public class TransferAdminController {
|
||||
|
||||
private final TransferAdminService transferAdminService;
|
||||
private final PlatformUrlConfigService platformUrlConfigService;
|
||||
private final TransferConfirmUrlService transferConfirmUrlService;
|
||||
|
||||
// ===== 微信转账 =====
|
||||
|
||||
@@ -104,19 +103,10 @@ public class TransferAdminController {
|
||||
public Result<TransferCreateResult> wechatCreate(@Valid @RequestBody TransferParam param) {
|
||||
String transferNo = transferAdminService.create("wechat", param);
|
||||
// 生成确认收款链接(供商户发给收款人在微信内打开)
|
||||
String confirmUrl = buildConfirmUrl(transferNo);
|
||||
String confirmUrl = transferConfirmUrlService.buildConfirmUrl(transferNo);
|
||||
return Res.ok(new TransferCreateResult().setTransferNo(transferNo).setConfirmUrl(confirmUrl));
|
||||
}
|
||||
|
||||
/// 生成微信转账确认收款链接
|
||||
private String buildConfirmUrl(String transferNo) {
|
||||
String base = platformUrlConfigService.getUrlConfig().getPaymentGatewayBaseUrl();
|
||||
if (StrUtil.isBlank(base)) {
|
||||
return null;
|
||||
}
|
||||
return StrUtil.format("{}/transfer-confirm/{}", base, transferNo);
|
||||
}
|
||||
|
||||
@PermCode(code = PermCodes.Action.MANAGE)
|
||||
@Operation(summary = "发起支付宝转账(运营端代发, 传 mchNo; FAIL 单复用原单号即重试)")
|
||||
@PostMapping("/alipay/create")
|
||||
|
||||
@@ -22,6 +22,7 @@ import cn.daxpay.open.payment.trade.transfer.result.DouyinTransferOrderResult;
|
||||
import cn.daxpay.open.payment.trade.transfer.result.TransferTradeResult;
|
||||
import cn.daxpay.open.payment.trade.transfer.result.WechatTransferOrderResult;
|
||||
import cn.daxpay.open.payment.trade.transfer.runtime.service.TransferCloseService;
|
||||
import cn.daxpay.open.payment.trade.transfer.runtime.service.TransferConfirmUrlService;
|
||||
import cn.daxpay.open.payment.trade.transfer.runtime.service.TransferStartService;
|
||||
import cn.daxpay.open.payment.trade.transfer.runtime.service.TransferSyncService;
|
||||
import cn.daxpay.open.payment.trade.transfer.util.PayeeDesensitizeUtil;
|
||||
@@ -48,6 +49,7 @@ public class TransferAdminService {
|
||||
private final TransferStartService transferStartService;
|
||||
private final TransferSyncService transferSyncService;
|
||||
private final TransferCloseService transferCloseService;
|
||||
private final TransferConfirmUrlService transferConfirmUrlService;
|
||||
private final TransService transService;
|
||||
|
||||
// ===== 微信转账 =====
|
||||
@@ -67,6 +69,10 @@ public class TransferAdminService {
|
||||
WechatTransferOrder entity = wechatTransferOrderManager.findById(id)
|
||||
.orElseThrow(() -> new DataNotExistException("pay.error.transfer.notFound"));
|
||||
WechatTransferOrderResult result = WechatTransferOrderConvert.CONVERT.toResult(entity);
|
||||
// 待领取状态填充确认收款链接
|
||||
if ("processing".equals(entity.getStatus())) {
|
||||
result.setConfirmUrl(transferConfirmUrlService.buildConfirmUrl(entity.getTransferNo()));
|
||||
}
|
||||
transService.translate(result);
|
||||
// 收款人信息脱敏
|
||||
PayeeDesensitizeUtil.desensitize(result);
|
||||
|
||||
@@ -84,6 +84,10 @@ public class WechatTransferOrderResult extends BaseResult {
|
||||
@Schema(description = "拉起转账确认参数")
|
||||
private String transferBody;
|
||||
|
||||
/// 确认收款链接(仅待领取 processing 状态返回, 供商户发给收款人在微信内打开)
|
||||
@Schema(description = "确认收款链接(微信转账待领取)")
|
||||
private String confirmUrl;
|
||||
|
||||
/// 收款人姓名
|
||||
@Schema(description = "收款人姓名")
|
||||
private String userName;
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
package cn.daxpay.open.payment.trade.transfer.runtime.service;
|
||||
|
||||
import cn.daxpay.open.platform.system.service.config.infra.PlatformUrlConfigService;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/// # 微信转账确认收款链接生成服务
|
||||
///
|
||||
/// 生成确认收款链接供商户发给收款人在微信内打开,
|
||||
/// 路径约定: `{paymentGatewayBaseUrl}/transfer-confirm/{transferNo}`(H5 确认页路由)。
|
||||
///
|
||||
/// 链接不落库(由 transferNo + 平台配置实时拼接), 供发起返回与订单详情查询复用。
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class TransferConfirmUrlService {
|
||||
|
||||
private final PlatformUrlConfigService platformUrlConfigService;
|
||||
|
||||
/// 生成微信转账确认收款链接
|
||||
///
|
||||
/// @param transferNo 平台转账单号
|
||||
/// @return 确认收款链接, 平台未配置网关地址时返回 null
|
||||
public String buildConfirmUrl(String transferNo) {
|
||||
String base = platformUrlConfigService.getUrlConfig().getPaymentGatewayBaseUrl();
|
||||
if (StrUtil.isBlank(base)) {
|
||||
return null;
|
||||
}
|
||||
return StrUtil.format("{}/transfer-confirm/{}", base, transferNo);
|
||||
}
|
||||
}
|
||||
@@ -17,8 +17,7 @@ import cn.daxpay.open.payment.trade.transfer.result.DouyinTransferOrderResult;
|
||||
import cn.daxpay.open.payment.trade.transfer.result.TransferCreateResult;
|
||||
import cn.daxpay.open.payment.trade.transfer.result.TransferTradeResult;
|
||||
import cn.daxpay.open.payment.trade.transfer.result.WechatTransferOrderResult;
|
||||
import cn.daxpay.open.platform.system.service.config.infra.PlatformUrlConfigService;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.daxpay.open.payment.trade.transfer.runtime.service.TransferConfirmUrlService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.validation.Valid;
|
||||
@@ -43,7 +42,7 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
public class MchTransferController {
|
||||
|
||||
private final MchTransferService mchTransferService;
|
||||
private final PlatformUrlConfigService platformUrlConfigService;
|
||||
private final TransferConfirmUrlService transferConfirmUrlService;
|
||||
|
||||
// ===== 微信转账 =====
|
||||
|
||||
@@ -68,19 +67,10 @@ public class MchTransferController {
|
||||
public Result<TransferCreateResult> wechatCreate(@Valid @RequestBody TransferParam param) {
|
||||
String transferNo = mchTransferService.create("wechat", param);
|
||||
// 生成确认收款链接(供商户发给收款人在微信内打开)
|
||||
String confirmUrl = buildConfirmUrl(transferNo);
|
||||
String confirmUrl = transferConfirmUrlService.buildConfirmUrl(transferNo);
|
||||
return Res.ok(new TransferCreateResult().setTransferNo(transferNo).setConfirmUrl(confirmUrl));
|
||||
}
|
||||
|
||||
/// 生成微信转账确认收款链接
|
||||
private String buildConfirmUrl(String transferNo) {
|
||||
String base = platformUrlConfigService.getUrlConfig().getPaymentGatewayBaseUrl();
|
||||
if (StrUtil.isBlank(base)) {
|
||||
return null;
|
||||
}
|
||||
return StrUtil.format("{}/transfer-confirm/{}", base, transferNo);
|
||||
}
|
||||
|
||||
// ===== 支付宝转账 =====
|
||||
|
||||
@PermCode(code = PermCodes.Action.VIEW)
|
||||
|
||||
@@ -22,6 +22,7 @@ import cn.daxpay.open.payment.trade.transfer.result.DouyinTransferOrderResult;
|
||||
import cn.daxpay.open.payment.trade.transfer.result.TransferTradeResult;
|
||||
import cn.daxpay.open.payment.trade.transfer.result.WechatTransferOrderResult;
|
||||
import cn.daxpay.open.payment.trade.transfer.runtime.service.TransferCloseService;
|
||||
import cn.daxpay.open.payment.trade.transfer.runtime.service.TransferConfirmUrlService;
|
||||
import cn.daxpay.open.payment.trade.transfer.runtime.service.TransferStartService;
|
||||
import cn.daxpay.open.payment.trade.transfer.runtime.service.TransferSyncService;
|
||||
import cn.daxpay.open.payment.trade.transfer.util.PayeeDesensitizeUtil;
|
||||
@@ -47,6 +48,7 @@ public class MchTransferService {
|
||||
private final TransferStartService transferStartService;
|
||||
private final TransferSyncService transferSyncService;
|
||||
private final TransferCloseService transferCloseService;
|
||||
private final TransferConfirmUrlService transferConfirmUrlService;
|
||||
private final TransService transService;
|
||||
|
||||
/// 微信转账单分页
|
||||
@@ -64,6 +66,10 @@ public class MchTransferService {
|
||||
WechatTransferOrder entity = wechatTransferOrderManager.findById(id)
|
||||
.orElseThrow(() -> new DataNotExistException("pay.error.transfer.notFound"));
|
||||
WechatTransferOrderResult result = WechatTransferOrderConvert.CONVERT.toResult(entity);
|
||||
// 待领取状态填充确认收款链接
|
||||
if ("processing".equals(entity.getStatus())) {
|
||||
result.setConfirmUrl(transferConfirmUrlService.buildConfirmUrl(entity.getTransferNo()));
|
||||
}
|
||||
transService.translate(result);
|
||||
// 收款人信息脱敏
|
||||
PayeeDesensitizeUtil.desensitize(result);
|
||||
|
||||
Reference in New Issue
Block a user