feat(pay): 支付宝付款码返回字段完善(buyerPayAmount/buyerLogonId等)+异步支付交易单更新(payAfterHandel)

This commit is contained in:
DaxPay Dev
2026-07-02 04:27:24 +08:00
parent 0ac65d7e6f
commit 374fcd5ef7
5 changed files with 40 additions and 5 deletions

View File

@@ -92,10 +92,14 @@ public class AlipayPayService {
// 完成时间
bo.setFinishTime(resp.getFinishTime());
// 实付金额(BARCODE 付款码同步成功时返回)
bo.setRealAmount(resp.getRealAmount());
// 买家标识(BARCODE 付款码同步成功时返回)
bo.setBuyerId(resp.getBuyerId());
// 金额(BARCODE 付款码同步成功时返回)
bo.setRealAmount(resp.getBuyerPayAmount());
bo.setTotalAmount(resp.getTotalAmount());
bo.setBuyerPayAmount(resp.getBuyerPayAmount());
// 用户标识
bo.setBuyerId(resp.getBuyerOpenId());
bo.setUserId(resp.getBuyerUserId());
bo.setBuyerLogonId(resp.getBuyerLogonId());
return bo;
}
}

View File

@@ -54,4 +54,13 @@ public class PayTradeResultBo {
/// 活动类型
private String promotionType;
/// 订单总金额(通道返回, 不入库, 仅用于 API 响应展示)
private Long totalAmount;
/// 买家实付金额(通道返回, 不入库)
private Long buyerPayAmount;
/// 买家登录账号(支付宝手机号/邮箱)
private String buyerLogonId;
}

View File

@@ -98,6 +98,9 @@ public class PayTrade extends MchBaseEntity {
/// 付款用户 ID支付宝 buyer_user_id 等)
private String buyerId;
/// 买家登录账号(支付宝手机号/邮箱)
private String buyerLogonId;
/// 微信 openidjsapi/app/miniapp
private String openid;

View File

@@ -96,10 +96,12 @@ public class NormalPayService {
trade.setStatus(PayFundStatusEnum.SUCCESS.getCode());
trade.setPayTime(result.getFinishTime());
}
// trade.status 在 complete=false 时保持 PROCESSING(createOrder 时已设)
trade.setOutOrderNo(result.getOutOrderNo());
trade.setTransOrderNo(result.getTransOrderNo());
trade.setRelationOrderNo(result.getRelationOrderNo());
trade.setBuyerId(result.getBuyerId());
trade.setBuyerLogonId(result.getBuyerLogonId());
trade.setTradeProduct(result.getTradeProduct());
trade.setTradeWay(result.getTradeWay());
trade.setBankType(result.getBankType());
@@ -108,7 +110,8 @@ public class NormalPayService {
trade.setPayBodyType(Objects.nonNull(result.getPayBodyType())
? result.getPayBodyType().getCode() : null);
trade.setErrorMsg(null);
payUniHandleService.paySuccess(trade);
// 参考商业版: 不论是否完成都更新交易单, 仅 SUCCESS 时同步容器
payUniHandleService.payAfterHandel(trade);
return payAssistService.buildResult(trade);
}
}

View File

@@ -25,6 +25,22 @@ public class PayUniHandleService {
private final PayTradeManager payTradeManager;
private final NormalPayOrderManager payNormalOrderManager;
/// 支付发起后处理(参考商业版 TradeUniHandleService.payAfterHandel
/// 不论是否完成都更新交易单; 仅资金状态为 SUCCESS 时同步容器为 PAID。
/// 异步支付(complete=false)时容器保持 WAIT_PAY, 交易单保持 PROCESSING。
public void payAfterHandel(PayTrade trade) {
payTradeManager.updateById(trade);
if (Objects.equals(trade.getStatus(), PayFundStatusEnum.SUCCESS.getCode())) {
NormalPayOrder normalOrder = payNormalOrderManager.findById(trade.getContainerId())
.orElse(null);
if (normalOrder != null) {
normalOrder.setStatus(NormalPayOrderStatusEnum.PAID.getCode());
normalOrder.setPayTime(trade.getPayTime());
payNormalOrderManager.updateById(normalOrder);
}
}
}
/// 支付成功后续处理(同步冗余时间线到容器)
public void paySuccess(PayTrade trade) {
NormalPayOrder normalOrder = payNormalOrderManager.findById(trade.getContainerId())