From b0cce5337128002901a9843d26afecfab685e835 Mon Sep 17 00:00:00 2001 From: KKSU <15274802129@163.com> Date: Sat, 08 Feb 2025 14:20:34 +0800 Subject: [PATCH] refactor(pay): 重构支付回调逻辑并优化支付成功页面 - 重构 FiuuReturnController 中的支付回调逻辑 - 移除未使用的代码和注释 - 优化支付成功页面的 HTML 结构和样式 - 添加返回首页的按钮 --- src/main/java/cc/mrbird/febs/pay/controller/FiuuReturnController.java | 64 +++++++------------------------- src/main/resources/templates/payment-success.html | 55 ++++++++++++++++++++++++--- 2 files changed, 63 insertions(+), 56 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/pay/controller/FiuuReturnController.java b/src/main/java/cc/mrbird/febs/pay/controller/FiuuReturnController.java index 6783518..b186bff 100644 --- a/src/main/java/cc/mrbird/febs/pay/controller/FiuuReturnController.java +++ b/src/main/java/cc/mrbird/febs/pay/controller/FiuuReturnController.java @@ -16,7 +16,6 @@ import org.springframework.web.bind.annotation.RequestParam; import javax.annotation.Resource; -import java.io.IOException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; @@ -26,6 +25,10 @@ @Api(value = "FiuuReturnController", tags = "FIUU支付-ReturnURL") @RequestMapping(value = "/api/fuPayReturn") public class FiuuReturnController { + + private static final String SECRET_KEY = "59c709fc18978a6a83b87f05d37cecbf"; + @Resource + private MallOrderInfoMapper mallOrderInfoMapper; @PostMapping("/payment/callback") public String handlePaymentCallback( @@ -37,13 +40,14 @@ @RequestParam("currency") String currency, @RequestParam("paydate") String payDate, @RequestParam("approcode") String appCode, - @RequestParam("skey") String skey, + @RequestParam("skey") String receivedSkey, Model model) { -// // 验证skey以确保数据完整性 -// if (!validateSkey(tranId, orderId, status, domain, amount, currency, payDate, skey)) { -// return "error"; // 如果验证失败,跳转到错误页面 -// } + // 验证skey以确保数据完整性 + String calculatedSkey = calculateSkey(tranId, orderId, status, domain, amount, currency, payDate, appCode); + log.info("callback status: {}", status); + log.info("callback skey: {}", receivedSkey); + log.info("callback calculatedSkey: {}", calculatedSkey); // 将支付结果信息传递给支付成功页面 model.addAttribute("amount", amount); @@ -53,54 +57,14 @@ model.addAttribute("currency", currency); model.addAttribute("payDate", payDate); - // 跳转到支付成功页面 - return "payment-success"; - } - - private boolean validateSkey(String tranId, String orderId, String status, String domain, - String amount, String currency, String payDate, String skey) { - // 这里实现skey的验证逻辑 - // 根据支付网关提供的skey生成规则,生成skey并与传入的skey进行比较 - // 如果一致,返回true,否则返回false - return true; // 这里假设验证通过 - } - - private static final String SECRET_KEY = "59c709fc18978a6a83b87f05d37cecbf"; - @Resource - private MallOrderInfoMapper mallOrderInfoMapper; - - // Java 通知接口 暂时停止使用 - @PostMapping("/callback") - public void handlePaymentCallback( - @RequestParam("amount") String amount, - @RequestParam("orderid") String orderId, - @RequestParam("tranID") String tranId, - @RequestParam("status") String status, - @RequestParam("domain") String domain, - @RequestParam("currency") String currency, - @RequestParam("paydate") String payDate, - @RequestParam("approcode") String appCode, - @RequestParam("skey") String receivedSkey) throws IOException{ - - // 计算 skey 验证 - String calculatedSkey = calculateSkey(tranId, orderId, status, domain, amount, currency, payDate, appCode); - MallOrderInfo mallOrderInfo = ValidateEntityUtils - .ensureColumnReturnEntity(orderId, MallOrderInfo::getId, mallOrderInfoMapper::selectOne, "订单不存在"); - log.info("callback status: {}", status); - log.info("callback skey: {}", receivedSkey); - log.info("callback calculatedSkey: {}", calculatedSkey); - log.info("callback payResult: {}", mallOrderInfo.getPayResult()); - if("1".equals(mallOrderInfo.getPayResult())){ - return; - } if (!calculatedSkey.equalsIgnoreCase(receivedSkey)) { // 记录安全警告日志 throw new FebsException("订单回调失败,---"+orderId); } - if ("00".equals(status)) { - updateOrderStatus(orderId, status, amount, payDate, tranId); - return; - } + updateOrderStatus(orderId, status, amount, payDate, tranId); + + // 跳转到支付成功页面 + return "payment-success"; } private String calculateSkey(String tranId, String orderId, String status, diff --git a/src/main/resources/templates/payment-success.html b/src/main/resources/templates/payment-success.html index c96b9ad..1d26baa 100644 --- a/src/main/resources/templates/payment-success.html +++ b/src/main/resources/templates/payment-success.html @@ -1,13 +1,56 @@ <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Payment Success</title> + <style> + body { + font-family: Arial, sans-serif; + background-color: #f4f4f9; + color: #333; + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + margin: 0; + } + .container { + background-color: #fff; + padding: 20px; + border-radius: 8px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); + text-align: center; + } + h1 { + color: #4CAF50; + } + p { + margin: 10px 0; + } + .button { + display: inline-block; + padding: 10px 20px; + margin-top: 20px; + background-color: #4CAF50; + color: white; + text-decoration: none; + border-radius: 5px; + transition: background-color 0.3s; + } + .button:hover { + background-color: #45a049; + } + </style> </head> <body> -<h1>Payment Successful</h1> -<p>Order ID: <span th:text="${orderId}"></span></p> -<p>Transaction ID: <span th:text="${tranId}"></span></p> -<p>Amount: <span th:text="${amount}"></span> <span th:text="${currency}"></span></p> -<p>Payment Date: <span th:text="${payDate}"></span></p> +<div class="container"> + <h1>Payment Successful</h1> + <p>Order ID: <span th:text="${orderId}"></span></p> + <p>Transaction ID: <span th:text="${tranId}"></span></p> + <p>Amount: <span th:text="${amount}"></span> <span th:text="${currency}"></span></p> + <p>Payment Date: <span th:text="${payDate}"></span></p> + <a href="/" class="button">Return to Home</a> +</div> </body> -</html> \ No newline at end of file +</html> -- Gitblit v1.9.1