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.operationLog(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());
|
}
|
}
|
}
|