xin
2025-07-10 a30d166148f0c385562eb748e5a81420b5ba93d6
oying-system/src/main/java/com/oying/modules/hwc/service/impl/SwiftPassServiceImpl.java
@@ -9,8 +9,7 @@
import com.oying.modules.hwc.utils.XmlUtils;
import com.oying.modules.security.config.SwiftPassProperties;
import com.oying.modules.security.config.WeiXinProperties;
import com.oying.modules.sh.service.OrderReturnService;
import com.oying.modules.sh.service.OrderService;
import com.oying.utils.CloseUtil;
import com.oying.utils.enums.PayTypeEnum;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -23,9 +22,6 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.*;
/**
@@ -47,14 +43,12 @@
    private final static String service_close = "unified.trade.close";
    private final SwiftPassProperties properties;
    private final OrderService orderService;
    private final OrderReturnService returnService;
    private final WeiXinProperties weiXinProperties;
    @Override
    @Transactional(rollbackFor = Exception.class)
    public HwcResponse pay(String ip, String total, String timeExpire, String description, String openId,
                           String orderNum, PayTypeEnum status) throws IOException {
                           String orderNum, PayTypeEnum status) {
        SortedMap<String, String> map = new TreeMap<>();
        map.put("service", service_pay);
        map.put("version", version);
@@ -74,6 +68,9 @@
        switch (status) {
            case HWC:
                map.put("mch_id", properties.getMchId());
                break;
            case HWC2:
                map.put("mch_id", properties.getMchId2());
                break;
            default:
                throw new BadRequestException("汇旺财类型错误");
@@ -105,9 +102,7 @@
                    throw new BadRequestException("验证签名错误");
                } else {
                    if ("0".equals(resultMap.get("status")) && "0".equals(resultMap.get("result_code"))) {
//                        Gson gson = new Gson();
//                        return gson.fromJson(resultMap.get("pay_info"), HwcResponse.class);
                        return null;
                        return JSONObject.parseObject(resultMap.get("pay_info"), HwcResponse.class);
                    } else {
                        throw new BadRequestException(resultMap.get("err_code") + " : " + resultMap.get("err_msg") + "\n" +
                                resultMap.get("status") + " : " + resultMap.get("message"));
@@ -117,21 +112,21 @@
                throw new BadRequestException("操作失败");
            }
        } catch (Exception e) {
            log.error("请求参数:{}", params);
            log.error("返回参数:{}", resultMap);
            throw new BadRequestException("系统异常:" + e.getMessage());
            log.error("汇旺财下单错误请求参数:{}", params);
            log.error("汇旺财下单错误返回参数:{}", resultMap);
            throw new BadRequestException("汇旺财下单错误:" + e.getMessage());
        } finally {
            if (response != null) {
                response.close();
                CloseUtil.close(response);
            }
            if (client != null) {
                client.close();
                CloseUtil.close(client);
            }
        }
    }
    @Override
    public JSONObject query(String orderNum, PayTypeEnum status) throws IOException {
    public JSONObject query(String orderNum, PayTypeEnum status) {
        // 参数
        SortedMap<String, String> map = new TreeMap<>();
        map.put("service", service_query);
@@ -142,6 +137,9 @@
        switch (status) {
            case HWC:
                map.put("mch_id", properties.getMchId());
                break;
            case HWC2:
                map.put("mch_id", properties.getMchId2());
                break;
            default:
                throw new BadRequestException("汇旺财类型错误");
@@ -189,16 +187,16 @@
            throw new BadRequestException("操作失败,原因:" + e.getMessage());
        } finally {
            if (response != null) {
                response.close();
                CloseUtil.close(response);
            }
            if (client != null) {
                client.close();
                CloseUtil.close(client);
            }
        }
    }
    @Override
    public void closeOrder(String outTradeNo, PayTypeEnum status) throws IOException {
    public void closeOrder(String outTradeNo, PayTypeEnum status) {
        // 参数
        SortedMap<String, String> map = new TreeMap<>();
        map.put("service", service_close);
@@ -209,6 +207,9 @@
        switch (status) {
            case HWC:
                map.put("mch_id", properties.getMchId());
                break;
            case HWC2:
                map.put("mch_id", properties.getMchId2());
                break;
            default:
                throw new BadRequestException("汇旺财类型错误");
@@ -253,10 +254,10 @@
            throw new BadRequestException("操作失败,原因:" + e.getMessage());
        } finally {
            if (response != null) {
                response.close();
                CloseUtil.close(response);
            }
            if (client != null) {
                client.close();
                CloseUtil.close(client);
            }
        }
    }
@@ -264,7 +265,7 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Map<String, String> refund(String returnNum, String orderNum, String reason, long refund,
                                      long total, PayTypeEnum payType) throws IOException {
                                      long total, PayTypeEnum payType) {
        // 参数
        SortedMap<String, String> map = new TreeMap<>();
        map.put("service", service_refund);
@@ -280,6 +281,10 @@
            case HWC:
                map.put("mch_id", properties.getMchId());
                map.put("op_user_id", properties.getMchId());
                break;
            case HWC2:
                map.put("mch_id", properties.getMchId2());
                map.put("op_user_id", properties.getMchId2());
                break;
            default:
                throw new BadRequestException("汇旺财类型错误");
@@ -323,74 +328,13 @@
            throw new BadRequestException("操作失败,原因:" + e);
        } finally {
            if (response != null) {
                response.close();
                CloseUtil.close(response);
            }
            if (client != null) {
                client.close();
                CloseUtil.close(client);
            }
        }
    }
    @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")) {
//                    OrderDto order = orderService.findByOrderNum(map.get("out_trade_no"));
                    PayTypeEnum status = PayTypeEnum.find("order.getPayType()");
                    if (SignUtil.verifySign(reSign, sign_type, map, properties, status)) {
                        System.out.println("验证签名错误!:" + map);
                    } else {
                        if ("0".equals(map.get("status"))) {
                            if ("0".equals(map.get("result_code"))) {
                                //业务处理
                                respString = "success";
                                response.getWriter().write(respString);
                            }
                        }
                    }
                }
            }
            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")) {
//                    ReturnOrder returnOrder = returnOrderRepository.findByReturnNum(map.get("out_refund_no"));
                    PayTypeEnum status = PayTypeEnum.find("order.getPayType()");
                    if (SignUtil.verifySign(reSign, sign_type, map, properties, status)) {
                        System.out.println("验证签名错误!:" + map);
                    } else {
                        if ("0".equals(map.get("status"))) {
                            if ("0".equals(map.get("result_code"))) {
                                // 业务处理
                                respString = "success";
                            }
                        }
                    }
                }
            }
            response.getWriter().write(respString);
        } catch (Exception e) {
            System.out.println("操作失败,原因:" + e.getMessage());
        }
    }
}