mirror of
https://gitee.com/dromara/dax-pay
synced 2026-08-09 22:45:58 +08:00
feat(pay): 支付宝付款码返回字段完善(buyerPayAmount/buyerLogonId等)+异步支付交易单更新(payAfterHandel)
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,4 +54,13 @@ public class PayTradeResultBo {
|
||||
|
||||
/// 活动类型
|
||||
private String promotionType;
|
||||
|
||||
/// 订单总金额(通道返回, 不入库, 仅用于 API 响应展示)
|
||||
private Long totalAmount;
|
||||
|
||||
/// 买家实付金额(通道返回, 不入库)
|
||||
private Long buyerPayAmount;
|
||||
|
||||
/// 买家登录账号(支付宝手机号/邮箱)
|
||||
private String buyerLogonId;
|
||||
}
|
||||
|
||||
@@ -98,6 +98,9 @@ public class PayTrade extends MchBaseEntity {
|
||||
/// 付款用户 ID(支付宝 buyer_user_id 等)
|
||||
private String buyerId;
|
||||
|
||||
/// 买家登录账号(支付宝手机号/邮箱)
|
||||
private String buyerLogonId;
|
||||
|
||||
/// 微信 openid(jsapi/app/miniapp)
|
||||
private String openid;
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user