diff --git a/src/main/java/com/sqx/common/exception/SqxExceptionHandler.java b/src/main/java/com/sqx/common/exception/SqxExceptionHandler.java index 348a8d2b..38ac1da3 100644 --- a/src/main/java/com/sqx/common/exception/SqxExceptionHandler.java +++ b/src/main/java/com/sqx/common/exception/SqxExceptionHandler.java @@ -7,6 +7,7 @@ import org.slf4j.LoggerFactory; import org.springframework.dao.DuplicateKeyException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.context.request.ServletWebRequest; import org.springframework.web.context.request.WebRequest; import org.springframework.web.servlet.NoHandlerFoundException; @@ -33,33 +34,37 @@ public class SqxExceptionHandler { @ExceptionHandler(NoHandlerFoundException.class) public Result handlerNoFoundException(Exception e, WebRequest webRequest) { - String requestUrl = webRequest.getDescription(false).split(" ")[1]; - logger.error("请求路径不存在:{}", requestUrl); + logErrorInfo(webRequest); logger.error(e.getMessage(), e); return Result.error(404, "路径不存在,请检查路径是否正确"); } @ExceptionHandler(DuplicateKeyException.class) public Result handleDuplicateKeyException(DuplicateKeyException e, WebRequest webRequest) { - String requestUrl = webRequest.getDescription(false).split(" ")[1]; - logger.error("请求路径:{},数据库中已存在该记录", requestUrl); + logErrorInfo(webRequest); logger.error(e.getMessage(), e); return Result.error("数据库中已存在该记录"); } @ExceptionHandler(AuthorizationException.class) public Result handleAuthorizationException(AuthorizationException e, WebRequest webRequest) { - String requestUrl = webRequest.getDescription(false).split(" ")[1]; - logger.error("请求路径:{},没有权限", requestUrl); + logErrorInfo(webRequest); logger.error(e.getMessage(), e); return Result.error("没有权限,请联系管理员授权"); } @ExceptionHandler(Exception.class) public Result handleException(Exception e, WebRequest webRequest) { - String requestUrl = webRequest.getDescription(false).split(" ")[1]; - logger.error("请求路径:{},发生异常", requestUrl); + logErrorInfo(webRequest); logger.error(e.getMessage(), e); return Result.error(); } + + private void logErrorInfo(WebRequest webRequest) { + if (webRequest instanceof ServletWebRequest) { + ServletWebRequest servletWebRequest = (ServletWebRequest) webRequest; + String requestUrl = servletWebRequest.getRequest().getRequestURI(); + logger.error("请求路径:{},发生异常", requestUrl); + } + } } diff --git a/src/main/java/com/sqx/modules/pay/controller/app/WuyouController.java b/src/main/java/com/sqx/modules/pay/controller/app/WuyouController.java index c8923fe2..0f3895f7 100644 --- a/src/main/java/com/sqx/modules/pay/controller/app/WuyouController.java +++ b/src/main/java/com/sqx/modules/pay/controller/app/WuyouController.java @@ -69,13 +69,14 @@ public class WuyouController { payDetails.setMoney(order.getPayMoney().doubleValue()); payDetails.setType(1); payDetails.setClassify(9); + payDetails.setTradeNo(AliPayOrderUtil.createOrderId()); payDetailsDao.insert(payDetails); } else { - payDetails.setOrderId(AliPayOrderUtil.createOrderId()); + payDetails.setTradeNo(AliPayOrderUtil.createOrderId()); payDetailsDao.updateById(payDetails); } - BaseResp baseResp = WuyouPay.payOrder(order.getOrdersNo(), order.getPayMoney().toString(), request.getHeader("User-Agent")); + BaseResp baseResp = WuyouPay.payOrder(order.getTradeNo(), order.getPayMoney().toString(), request.getHeader("User-Agent")); if (baseResp.getCode() != 200) { return Result.error(baseResp.getMsg()); } @@ -84,12 +85,12 @@ public class WuyouController { } @PostMapping("/extractNotify") - public String extractNotify(HttpServletRequest request, @RequestBody NotifyDto notifyDto) { + public String extractNotify(HttpServletRequest request, NotifyDto notifyDto) { log.info("无忧支付提现回调, {}", notifyDto); Map params = new HashMap<>(); params.put("callbacks", notifyDto.getCallbacks()); params.put("total", notifyDto.getTotal()); - params.put("out_trade_no", notifyDto.getOutTradeNo()); + params.put("out_trade_no", notifyDto.getOut_trade_no()); params.put("status", notifyDto.getStatus()); params.put("msg", notifyDto.getMsg()); @@ -103,13 +104,13 @@ public class WuyouController { } @PostMapping("/notify") - public String notify(HttpServletRequest request, @RequestBody NotifyDto notifyDto) { + public String notify(HttpServletRequest request, NotifyDto notifyDto) { log.info("无忧支付回调, {}", notifyDto); Map params = new HashMap<>(); params.put("callbacks", notifyDto.getCallbacks()); params.put("total", notifyDto.getTotal()); - params.put("out_trade_no", notifyDto.getOutTradeNo()); - params.put("pay_time", notifyDto.getPayTime()); + params.put("out_trade_no", notifyDto.getOut_trade_no()); + params.put("pay_time", notifyDto.getPay_time()); String sign = Encrypt.getParamsSign(params); if (!sign.equals(notifyDto.getSign())) { @@ -119,7 +120,13 @@ public class WuyouController { log.info("无忧支付回调成功, 参数: {}", JSONObject.toJSONString(notifyDto)); - Orders order = ordersService.selectOrderByTradeNo(notifyDto.getOutTradeNo()); + PayDetails payDetails = payDetailsDao.selectByTradeNo(notifyDto.getOut_trade_no()); + + if (payDetails.getState() != 0) { + log.info("订单表信息丢失!"); + } +// {"callbacks":"CODE_SUCCESS","out_trade_no":"1000001931380634","pay_time":"1733306566","sign":"7B2C5B55AA09CE07DAE1CC847F51C0BC","total":0.01} + Orders order = ordersService.selectOrderByTradeNo(payDetails.getOrderId()); if (order == null) { log.error("无忧支付回调订单不存在, 参数: {}", JSONObject.toJSONString(notifyDto)); return "订单不存在"; @@ -130,14 +137,8 @@ public class WuyouController { return "订单已支付"; } - PayDetails payDetails = payDetailsDao.selectByOrderId(notifyDto.getOutTradeNo()); - - if (payDetails.getState() != 0) { - log.info("订单表信息丢失!"); - } - String format = sdf.format(new Date()); - payDetailsDao.updateState(payDetails.getId(), 1, format, notifyDto.getOutTradeNo()); + payDetailsDao.updateState(payDetails.getId(), 1, format, notifyDto.getOut_trade_no()); order.setPayWay(9); order.setStatus(1); diff --git a/src/main/java/com/sqx/modules/pay/dao/PayDetailsDao.java b/src/main/java/com/sqx/modules/pay/dao/PayDetailsDao.java index 70375c06..ae517188 100644 --- a/src/main/java/com/sqx/modules/pay/dao/PayDetailsDao.java +++ b/src/main/java/com/sqx/modules/pay/dao/PayDetailsDao.java @@ -22,6 +22,8 @@ public interface PayDetailsDao extends BaseMapper { PayDetails selectByOrderId(@Param("orderId") String orderId); + PayDetails selectByTradeNo(@Param("tradeNo") String tradeNo); + int updateState(@Param("id") Long id, @Param("state") Integer state, @Param("time") String time, @Param("tradeNo") String tradeNo); IPage> selectPayDetails(@Param("page") Page> page, @Param("startTime") String startTime, @Param("endTime") String endTime, @Param("userId") Long userId, @Param("state") Integer state, @Param("userName") String userName, String orderId); diff --git a/src/main/java/com/sqx/modules/pay/wuyou/NotifyDto.java b/src/main/java/com/sqx/modules/pay/wuyou/NotifyDto.java index 69e99d50..82a637c5 100644 --- a/src/main/java/com/sqx/modules/pay/wuyou/NotifyDto.java +++ b/src/main/java/com/sqx/modules/pay/wuyou/NotifyDto.java @@ -12,11 +12,9 @@ public class NotifyDto { private String callbacks; private Double total; - @JSONField(name = "out_trade_no") - private String outTradeNo; + private String out_trade_no; - @JSONField(name = "pay_time") - private String payTime; + private String pay_time; private String msg; diff --git a/src/main/resources/mapper/pay/PayDetailsDao.xml b/src/main/resources/mapper/pay/PayDetailsDao.xml index 0eb1a1a1..ca4df55c 100644 --- a/src/main/resources/mapper/pay/PayDetailsDao.xml +++ b/src/main/resources/mapper/pay/PayDetailsDao.xml @@ -15,6 +15,10 @@ select * from pay_details d where d.order_id=#{orderId} + + update pay_details set `state`=#{state},pay_time=#{time},trade_no=#{tradeNo} where id=#{id} @@ -174,4 +178,4 @@ - \ No newline at end of file +