|
@@ -4,7 +4,6 @@ import com.alipay.easysdk.factory.Factory;
|
|
|
import com.alipay.easysdk.kernel.Config;
|
|
|
import com.alipay.easysdk.kernel.util.ResponseChecker;
|
|
|
import com.alipay.easysdk.payment.app.models.AlipayTradeAppPayResponse;
|
|
|
-import com.alipay.easysdk.payment.common.models.AlipayTradeCloseResponse;
|
|
|
import com.alipay.easysdk.payment.common.models.AlipayTradeQueryResponse;
|
|
|
import com.alipay.easysdk.payment.page.models.AlipayTradePagePayResponse;
|
|
|
import com.alipay.easysdk.payment.wap.models.AlipayTradeWapPayResponse;
|
|
@@ -55,21 +54,11 @@ public class AliPayService extends PayBaseService {
|
|
|
|
|
|
private Pattern param = Pattern.compile("value=\"(.*)\">", Pattern.CASE_INSENSITIVE);
|
|
|
|
|
|
- /**
|
|
|
- * 支付成功并且已经超过可退款时限
|
|
|
- */
|
|
|
- private static final String TRADE_STATUS_FINISHED = "TRADE_FINISHED";
|
|
|
-
|
|
|
/**
|
|
|
* 支付成功
|
|
|
*/
|
|
|
private static final String TRADE_STATUS_SUCCESS = "TRADE_SUCCESS";
|
|
|
|
|
|
- /**
|
|
|
- * 订单待支付(正确输入了支付密码, 但是余额不足, 未支付成功)
|
|
|
- */
|
|
|
- private static final String TRADE_STATUS_WAIT = "WAIT_BUYER_PAY";
|
|
|
-
|
|
|
/**
|
|
|
* 订单关闭
|
|
|
*/
|
|
@@ -171,9 +160,16 @@ public class AliPayService extends PayBaseService {
|
|
|
return HttpStatusEnum.FAIL.getMsg();
|
|
|
}
|
|
|
//签名验证通过, 判断是否支付成功
|
|
|
- if (Objects.equals("TRADE_SUCCESS", tradeStatus)) {
|
|
|
+ if (Objects.equals(TRADE_STATUS_SUCCESS, tradeStatus)) {
|
|
|
this.paySuccess(orderNo, params.get("total_amount"), params.get("trade_no"));
|
|
|
}
|
|
|
+ //订单自动关闭
|
|
|
+ if (Objects.equals(TRADE_STATUS_CLOSED, tradeStatus)) {
|
|
|
+ orderService.update(new LambdaUpdateWrapper<Order>()
|
|
|
+ .set(Order::getStatus, OrderStateEnum.CANCEL_PAY.getCode())
|
|
|
+ .set(Order::getUpdateTime, LocalDateTime.now())
|
|
|
+ .eq(Order::getOrderId, orderNo));
|
|
|
+ }
|
|
|
//返回消息接收成功
|
|
|
log.error("支付宝异步回调 -------end----->");
|
|
|
return HttpStatusEnum.SUCCESS.getMsg();
|
|
@@ -196,45 +192,13 @@ public class AliPayService extends PayBaseService {
|
|
|
log.error("关闭订单查询订单信息异常, orderId : {}, e : {}", orderId, e.getMessage());
|
|
|
return;
|
|
|
}
|
|
|
+ //未下单的订单, 直接取消(后续如果用户成功支付, 也是可以收到支付成功的回调的)
|
|
|
if (!ResponseChecker.success(queryResponse)) {
|
|
|
log.error("关闭订单查询订单信息不存在, orderId : {}, queryResponse : {}", orderId, JsonUtil.toString(queryResponse));
|
|
|
- return;
|
|
|
- }
|
|
|
- log.error("支付宝关闭订单, 查询阿里订单接口 queryResponse : {}", JsonUtil.toString(queryResponse));
|
|
|
- //订单已经自动关闭
|
|
|
- if (Objects.equals(queryResponse.getTradeStatus(), TRADE_STATUS_CLOSED)) {
|
|
|
- //本地订单未更新为取消状态, 更新订单最新状态
|
|
|
- if (!Objects.equals(platformOrderDTO.getStatus(), OrderStateEnum.CANCEL_PAY.getCode())) {
|
|
|
- orderService.update(new LambdaUpdateWrapper<Order>()
|
|
|
- .set(Order::getStatus, OrderStateEnum.CANCEL_PAY.getCode())
|
|
|
- .set(Order::getUpdateTime, LocalDateTime.now())
|
|
|
- .eq(Order::getOrderId, orderId));
|
|
|
- }
|
|
|
- return;
|
|
|
- }
|
|
|
- //订单是支付成功或者完成状态, 本地订单非成功状态(支付成功的订单, 到不了关闭逻辑)
|
|
|
- if (Objects.equals(queryResponse.getTradeStatus(), TRADE_STATUS_SUCCESS)
|
|
|
- || Objects.equals(queryResponse.getTradeStatus(), TRADE_STATUS_FINISHED)) {
|
|
|
- this.paySuccess(orderId, platformOrderDTO.getAmount().toString(), this.payMerchant.getMerchantNo());
|
|
|
- }
|
|
|
- //订单已经超时, 还是待支付状态(该逻辑只是兜底, 按照支付宝自动超时关闭, 正常情况下该逻辑不会执行)
|
|
|
- if (Objects.equals(queryResponse.getTradeStatus(), TRADE_STATUS_WAIT)) {
|
|
|
- log.error("订单超时, 支付宝订单未自动关闭, orderId : {}", orderId);
|
|
|
- //执行关闭订单
|
|
|
- AlipayTradeCloseResponse response;
|
|
|
- try {
|
|
|
- response = Factory.Payment.Common().close(orderId);
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("支付宝执行关闭订单异常, orderId : {}, e : {}", orderId, e.getMessage());
|
|
|
- return;
|
|
|
- }
|
|
|
- //订单关闭成功, 订单状态更新为取消
|
|
|
- if (ResponseChecker.success(response)) {
|
|
|
- orderService.update(new LambdaUpdateWrapper<Order>()
|
|
|
- .set(Order::getStatus, OrderStateEnum.CANCEL_PAY.getCode())
|
|
|
- .set(Order::getUpdateTime, LocalDateTime.now())
|
|
|
- .eq(Order::getOrderId, orderId));
|
|
|
- }
|
|
|
+ orderService.update(new LambdaUpdateWrapper<Order>()
|
|
|
+ .set(Order::getStatus, OrderStateEnum.CANCEL_PAY.getCode())
|
|
|
+ .set(Order::getUpdateTime, LocalDateTime.now())
|
|
|
+ .eq(Order::getOrderId, orderId));
|
|
|
}
|
|
|
}
|
|
|
|