New file |
| | |
| | | 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()); |
| | | } |
| | | } |
| | | } |