diff --git a/src/main/java/com/gxwebsoft/payment/service/WxPayNotifyService.java b/src/main/java/com/gxwebsoft/payment/service/WxPayNotifyService.java index 9378dcd..e334dc7 100644 --- a/src/main/java/com/gxwebsoft/payment/service/WxPayNotifyService.java +++ b/src/main/java/com/gxwebsoft/payment/service/WxPayNotifyService.java @@ -17,6 +17,7 @@ import org.springframework.util.StringUtils; import javax.annotation.Resource; import java.math.BigDecimal; import java.time.LocalDateTime; +import java.time.OffsetDateTime; import java.util.Map; /** @@ -212,7 +213,24 @@ public class WxPayNotifyService { // 更新订单状态 order.setPayStatus(true); // 使用Boolean类型 order.setTransactionId(transaction.getTransactionId()); - order.setPayTime(LocalDateTime.parse(transaction.getSuccessTime())); + LocalDateTime payTime = null; + String successTime = transaction.getSuccessTime(); + if (StringUtils.hasText(successTime)) { + try { + // WeChat returns RFC3339 time with offset, e.g. 2018-06-08T10:34:56+08:00 + payTime = OffsetDateTime.parse(successTime).toLocalDateTime(); + } catch (Exception ex) { + log.warn("解析微信支付success_time失败,使用当前时间兜底 - outTradeNo={}, successTime={}", + order.getOrderNo(), successTime, ex); + } + } + if (payTime == null) { + if (!StringUtils.hasText(successTime)) { + log.warn("微信支付回调trade_state=SUCCESS但success_time为空,使用当前时间兜底 - outTradeNo={}", order.getOrderNo()); + } + payTime = LocalDateTime.now(); + } + order.setPayTime(payTime); // 使用专门的更新方法,会触发支付成功后的业务逻辑 shopOrderService.updateByOutTradeNo(order); diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/ShopOrderServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/ShopOrderServiceImpl.java index f52c6c1..cf2f643 100644 --- a/src/main/java/com/gxwebsoft/shop/service/impl/ShopOrderServiceImpl.java +++ b/src/main/java/com/gxwebsoft/shop/service/impl/ShopOrderServiceImpl.java @@ -41,6 +41,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDateTime; +import java.time.OffsetDateTime; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -769,26 +770,43 @@ public class ShopOrderServiceImpl extends ServiceImpl