feat 支付宝同步查询接口调试

This commit is contained in:
xxm1995
2024-01-16 17:11:37 +08:00
parent 9b541302f2
commit da716c7878
2 changed files with 9 additions and 7 deletions

View File

@@ -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)) {

View File

@@ -27,7 +27,7 @@ public abstract class AbsPaySyncStrategy implements PayStrategy{
/**
* 异步支付单与支付网关进行状态比对
* 异步支付单与支付网关进行状态比对后的结果
* @see PaySyncStatusEnum
*/
public abstract GatewaySyncResult doSyncStatus();