diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/alipay/service/AliPaySyncService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/alipay/service/AliPaySyncService.java index a9a51c00d..bb89ef202 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/alipay/service/AliPaySyncService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/alipay/service/AliPaySyncService.java @@ -1,12 +1,11 @@ package cn.bootx.platform.daxpay.service.core.channel.alipay.service; import cn.bootx.platform.common.core.util.LocalDateTimeUtil; -import cn.bootx.platform.daxpay.code.PayStatusEnum; import cn.bootx.platform.daxpay.code.PaySyncStatusEnum; import cn.bootx.platform.daxpay.service.code.AliPayCode; import cn.bootx.platform.daxpay.service.common.local.PaymentContextLocal; -import cn.bootx.platform.daxpay.service.core.payment.sync.result.GatewaySyncResult; import cn.bootx.platform.daxpay.service.core.order.pay.entity.PayOrder; +import cn.bootx.platform.daxpay.service.core.payment.sync.result.GatewaySyncResult; import cn.hutool.json.JSONUtil; import com.alipay.api.AlipayApiException; import com.alipay.api.domain.AlipayTradeQueryModel; @@ -17,6 +16,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.time.LocalDateTime; +import java.util.Collections; import java.util.Objects; /** @@ -43,11 +43,12 @@ public class AliPaySyncService { try { AlipayTradeQueryModel queryModel = new AlipayTradeQueryModel(); queryModel.setOutTradeNo(String.valueOf(payOrder.getId())); - // 查询退款参数 + queryModel.setQueryOptions(Collections.singletonList("trade_settle_info")); + // 查询参数 AlipayTradeQueryResponse response = AliPayApi.tradeQueryToResponse(queryModel); String tradeStatus = response.getTradeStatus(); syncResult.setSyncInfo(JSONUtil.toJsonStr(response)); - // 支付完成 + // 支付完成 TODO 部分退款也在这个地方, 但无法区分 if (Objects.equals(tradeStatus, AliPayCode.PAYMENT_TRADE_SUCCESS) || Objects.equals(tradeStatus, AliPayCode.PAYMENT_TRADE_FINISHED)) { PaymentContextLocal.get().getAsyncPayInfo().setTradeNo(response.getTradeNo()); // 支付完成时间 @@ -61,12 +62,13 @@ public class AliPaySyncService { } // 已关闭或支付完成后全额退款 if (Objects.equals(tradeStatus, AliPayCode.PAYMENT_TRADE_CLOSED)) { - // 根据支付订单区分退款的情况, TODO 后期添加查询退款信息的逻辑 - if (Objects.equals(payOrder.getStatus(), PayStatusEnum.REFUNDED.getCode())){ + // 判断是否有支付时间, 有支付时间说明是退款 + if (Objects.nonNull(response.getSendPayDate())){ return syncResult.setSyncStatus(PaySyncStatusEnum.REFUND); } else { return syncResult.setSyncStatus(PaySyncStatusEnum.CLOSED); } + } // 支付宝支付后, 客户未进行操作将不会创建出订单, 所以交易不存在约等于未查询订单 if (Objects.equals(response.getSubCode(), AliPayCode.ACQ_TRADE_NOT_EXIST)) { diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/func/AbsPaySyncStrategy.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/func/AbsPaySyncStrategy.java index d88163f25..d0e35aa85 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/func/AbsPaySyncStrategy.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/func/AbsPaySyncStrategy.java @@ -27,7 +27,7 @@ public abstract class AbsPaySyncStrategy implements PayStrategy{ /** - * 异步支付单与支付网关进行状态比对 + * 异步支付单与支付网关进行状态比对后的结果 * @see PaySyncStatusEnum */ public abstract GatewaySyncResult doSyncStatus();