From c1d20b425b10e8ba59f102dd1ab413055883eed0 Mon Sep 17 00:00:00 2001
From: 彭雪彬 <1724387007@qq.com>
Date: Mon, 14 Jul 2025 16:57:11 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/xin' into pxb

---
 oying-system/src/main/java/com/oying/modules/hwc/service/impl/CallbackServiceImpl.java |  114 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 114 insertions(+), 0 deletions(-)

diff --git a/oying-system/src/main/java/com/oying/modules/hwc/service/impl/CallbackServiceImpl.java b/oying-system/src/main/java/com/oying/modules/hwc/service/impl/CallbackServiceImpl.java
new file mode 100644
index 0000000..404251a
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/hwc/service/impl/CallbackServiceImpl.java
@@ -0,0 +1,114 @@
+package com.oying.modules.hwc.service.impl;
+
+import com.oying.exception.BadRequestException;
+import com.oying.modules.hwc.service.CallbackService;
+import com.oying.modules.hwc.utils.SignUtil;
+import com.oying.modules.hwc.utils.XmlUtils;
+import com.oying.modules.security.config.SwiftPassProperties;
+import com.oying.modules.sh.domain.OrderReturn;
+import com.oying.modules.sh.domain.vo.OrderResponse;
+import com.oying.modules.sh.service.OrderReturnService;
+import com.oying.modules.sh.service.OrderService;
+import com.oying.utils.enums.PayStateEnum;
+import com.oying.utils.enums.PayTypeEnum;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * @author xin
+ * @description
+ * @date 2025/7/8 18:47
+ */
+@SuppressWarnings({"unchecked", "all"})
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class CallbackServiceImpl implements CallbackService {
+
+    private final OrderService orderService;
+    private final OrderReturnService returnService;
+    private final SwiftPassProperties properties;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void alipayCallback(HttpServletRequest request, HttpServletResponse response) {
+        try {
+            String resString = XmlUtils.parseRequest(request);
+            String respString = "error";
+            if (!resString.isEmpty()) {
+                Map<String, String> map = XmlUtils.toMap(resString.getBytes(), "utf-8");
+                String sign_type = map.get("sign_type");
+                String reSign = map.get("sign");
+                if (map.containsKey("sign")) {
+                    OrderResponse order = orderService.getByOrderNum(map.get("out_trade_no"));
+                    PayTypeEnum status = PayTypeEnum.find(order.getOrder().getPayType());
+                    if (SignUtil.verifySign(reSign, sign_type, map, properties, status)) {
+                        log.error("验证签名错误!:{}", map.toString());
+                    } else {
+                        if ("0".equals(map.get("status"))) {
+                            if ("0".equals(map.get("result_code"))) {
+                                //业务处理
+                                if (PayStateEnum.SUCCESS.getKey().equals(order.getOrder().getPayState())) {
+                                    // 已处理
+                                    respString = "success";
+                                } else {
+                                    PayStateEnum stateEnum = PayStateEnum.NOTPAY;
+                                    if ("0".equals(map.get("pay_result"))) {
+                                        stateEnum = PayStateEnum.SUCCESS;
+                                        orderService.paySuccess(order);
+                                    }
+                                    orderService.updatePayStatus(map.get("out_trade_no"), stateEnum, map.get("pay_info"), map.get("time_end"));
+                                    // 处理成功
+                                    respString = "success";
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            response.getWriter().write(respString);
+        } catch (Exception e) {
+            throw new BadRequestException("操作失败,原因:" + e.getMessage());
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void returnNotify(HttpServletRequest request, HttpServletResponse response) {
+        try {
+            String resString = XmlUtils.parseRequest(request);
+            String respString = "error";
+            if (!resString.isEmpty()) {
+                Map<String, String> map = XmlUtils.toMap(resString.getBytes(), "utf-8");
+                String sign_type = map.get("sign_type");
+                String reSign = map.get("sign");
+                if (map.containsKey("sign")) {
+                    OrderReturn order = returnService.getByReturnNum(map.get("out_refund_no"));
+                    PayTypeEnum status = PayTypeEnum.find(order.getPayType());
+                    if (SignUtil.verifySign(reSign, sign_type, map, properties, status)) {
+                        log.error("验证签名错误!:{}", map.toString());
+                    } else {
+                        if ("0".equals(map.get("status"))) {
+                            if ("0".equals(map.get("result_code"))) {
+                                // 业务处理
+                                returnService.updatePayStatus(map.get("out_refund_no"), map.get("refund_status"),
+                                        map.get("refund_time"));
+                                // 业务处理
+                                respString = "success";
+                            }
+                        }
+                    }
+                }
+            }
+            response.getWriter().write(respString);
+        } catch (Exception e) {
+            System.out.println("操作失败,原因:" + e.getMessage());
+        }
+    }
+}

--
Gitblit v1.9.3