From 79bc357bb15c342fc306c6ff24099e147f1f1561 Mon Sep 17 00:00:00 2001 From: GYJ <1157756119@qq.com> Date: Sun, 5 Jan 2025 17:02:26 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=A4=84=E7=90=86=E4=B8=89=E6=96=B9?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=9B=9E=E8=B0=83=20=E5=BC=82=E5=B8=B8=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pay/controller/app/WuyouController.java | 86 ++++++++++--------- 1 file changed, 45 insertions(+), 41 deletions(-) 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 2f84fadd..3f54c028 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 @@ -183,50 +183,54 @@ public class WuyouController { @PostMapping("/notify") 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.getOut_trade_no()); - params.put("pay_time", notifyDto.getPay_time()); + try { + log.info("无忧支付回调, {}", notifyDto); + Map params = new HashMap<>(); + params.put("callbacks", notifyDto.getCallbacks()); + params.put("total", notifyDto.getTotal()); + 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())) { - log.error("无忧支付回调签名错误, 参数: {},签名结果:{}", JSONObject.toJSONString(notifyDto), sign); + String sign = Encrypt.getParamsSign(params); + if (!sign.equals(notifyDto.getSign())) { + log.error("无忧支付回调签名错误, 参数: {},签名结果:{}", JSONObject.toJSONString(notifyDto), sign); // return "签名错误"; + } + + if (!"CODE_SUCCESS".equals(notifyDto.getCallbacks())) { + log.error("无忧支付回调 未支付成功, 参数: {}", JSONObject.toJSONString(notifyDto)); + return "success"; + } + + log.info("无忧支付回调成功, 参数: {}", JSONObject.toJSONString(notifyDto)); + + PayDetails payDetails = payDetailsDao.selectByTradeNo(notifyDto.getOut_trade_no()); + if (payDetails == null) { + log.error("无忧支付回调订单不存在, 参数: {}", JSONObject.toJSONString(notifyDto)); + return "success"; + } + + if (payDetails.getState() == 1) { + log.info("重复回调!参数: {}", JSONObject.toJSONString(notifyDto)); + return "success"; + } + + Orders order = ordersService.selectOrderByOrdersNo(payDetails.getOrderId()); + if (order == null) { + log.error("无忧支付回调订单不存在, 参数: {}", JSONObject.toJSONString(notifyDto)); + return "订单不存在"; + } + + if (order.getStatus() != 0) { + log.error("无忧支付回调订单已支付, 参数: {}", JSONObject.toJSONString(notifyDto)); + return "订单已支付"; + } + + payDetails.setThirdOrderNo(notifyDto.getOrder_sn()); + ordersTask.updateOrderStatus(payDetails, order); + } catch (Exception e) { + log.error("无忧支付回调异常, 参数: {}", JSONObject.toJSONString(notifyDto), e); } - - if (!"CODE_SUCCESS".equals(notifyDto.getCallbacks())) { - log.error("无忧支付回调 未支付成功, 参数: {}", JSONObject.toJSONString(notifyDto)); - return "success"; - } - - log.info("无忧支付回调成功, 参数: {}", JSONObject.toJSONString(notifyDto)); - - PayDetails payDetails = payDetailsDao.selectByTradeNo(notifyDto.getOut_trade_no()); - if (payDetails == null) { - log.error("无忧支付回调订单不存在, 参数: {}", JSONObject.toJSONString(notifyDto)); - return "success"; - } - - if (payDetails.getState() == 1) { - log.info("重复回调!参数: {}", JSONObject.toJSONString(notifyDto)); - return "success"; - } - - Orders order = ordersService.selectOrderByOrdersNo(payDetails.getOrderId()); - if (order == null) { - log.error("无忧支付回调订单不存在, 参数: {}", JSONObject.toJSONString(notifyDto)); - return "订单不存在"; - } - - if (order.getStatus() != 0) { - log.error("无忧支付回调订单已支付, 参数: {}", JSONObject.toJSONString(notifyDto)); - return "订单已支付"; - } - - payDetails.setThirdOrderNo(notifyDto.getOrder_sn()); - ordersTask.updateOrderStatus(payDetails, order); return "success"; } From 5828199ba0ba0cc79fe3102cdaf42ba9d0bccdd7 Mon Sep 17 00:00:00 2001 From: GYJ <1157756119@qq.com> Date: Sun, 5 Jan 2025 17:12:58 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=9B=9E=E8=B0=83=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pay/controller/app/WuyouController.java | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) 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 3f54c028..24853388 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 @@ -1,5 +1,6 @@ package com.sqx.modules.pay.controller.app; +import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.thread.ThreadUtil; import com.alibaba.fastjson.JSONObject; @@ -204,7 +205,19 @@ public class WuyouController { log.info("无忧支付回调成功, 参数: {}", JSONObject.toJSONString(notifyDto)); - PayDetails payDetails = payDetailsDao.selectByTradeNo(notifyDto.getOut_trade_no()); + DateTime offsetMinute = DateUtil.offsetMinute(new Date(), -30); + String format = DateUtil.format(offsetMinute, "yyyy-MM-dd HH:mm:ss"); + List details = payDetailsDao.selectList(new LambdaQueryWrapper() + .eq(PayDetails::getTradeNo, notifyDto.getOut_trade_no()).ge(PayDetails::getCreateTime, format)); + if (details.isEmpty()) { + log.error("无忧支付回调订单不存在, 参数: {}", JSONObject.toJSONString(notifyDto)); + return "success"; + } + if (details.size() > 1) { + log.error("无忧支付回调订单重复, 参数: {}", JSONObject.toJSONString(notifyDto)); + return "success"; + } + PayDetails payDetails = details.get(0); if (payDetails == null) { log.error("无忧支付回调订单不存在, 参数: {}", JSONObject.toJSONString(notifyDto)); return "success"; @@ -215,7 +228,10 @@ public class WuyouController { return "success"; } - Orders order = ordersService.selectOrderByOrdersNo(payDetails.getOrderId()); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("orders_no", payDetails.getOrderId()).eq("user_id", payDetails.getUserId()); + queryWrapper.last("limit 1"); + Orders order = ordersService.getOne(queryWrapper); if (order == null) { log.error("无忧支付回调订单不存在, 参数: {}", JSONObject.toJSONString(notifyDto)); return "订单不存在";