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