diff --git a/backend/lpg-user/src/main/java/com/hotent/lpg/user/manager/impl/WxPayManagerImpl.java b/backend/lpg-user/src/main/java/com/hotent/lpg/user/manager/impl/WxPayManagerImpl.java index c7817b6..79aaae7 100644 --- a/backend/lpg-user/src/main/java/com/hotent/lpg/user/manager/impl/WxPayManagerImpl.java +++ b/backend/lpg-user/src/main/java/com/hotent/lpg/user/manager/impl/WxPayManagerImpl.java @@ -12,6 +12,7 @@ import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest; import com.github.binarywang.wxpay.bean.result.WxPayRefundResult; import com.github.binarywang.wxpay.exception.WxPayException; import com.github.binarywang.wxpay.service.WxPayService; +import com.hotent.base.exception.BaseException; import com.hotent.base.util.BeanUtils; import com.hotent.lpg.common.enums.DdZffsEnum; import com.hotent.lpg.common.enums.DdlyEnum; @@ -47,6 +48,7 @@ import javax.xml.xpath.XPathFactory; import java.io.StringReader; import java.io.StringWriter; import java.math.BigDecimal; +import java.rmi.ServerError; import java.time.LocalDateTime; import java.util.HashMap; @@ -59,10 +61,10 @@ public class WxPayManagerImpl implements WxPayManager { private String hostUrl; @Resource - private DdDao ddDao; + private DdDao ddDao; @Resource - private CzzfpzDao czzfpzDao; + private CzzfpzDao czzfpzDao; /** * 发起退款请求 @@ -118,49 +120,75 @@ public class WxPayManagerImpl implements WxPayManager { */ @Override public String handleRefundSuccessCallback(String xmlData) { + // 将XML格式的回调数据转换为WxPayOrderNotifyResult对象 WxPayOrderNotifyResult rs = WxPayOrderNotifyResult.fromXML(xmlData); + // 获取回调中的返回码 String returnCode = rs.getReturnCode(); + // 如果返回码不是"SUCCESS",则生成失败响应并返回 if (!returnCode.equals("SUCCESS")) { return generateXmlResponse("FAIL", "退款失败", returnCode); } + // 获取回调中的appid和mchId String appid = rs.getAppid(); String mchId = rs.getMchId(); - //在用 场站信息 拿到场站对应得支付配置 - WCzzfpz wCzzfpz = czzfpzDao.selectOne(Wrappers.lambdaQuery().eq(WCzzfpz::getFAppid, appid).eq(WCzzfpz::getFMchid, mchId)); + // 从数据库中查询对应的应用配置信息 + WCzzfpz wCzzfpz = czzfpzDao.selectOne(Wrappers.lambdaQuery() + .eq(WCzzfpz::getFAppid, appid) + .eq(WCzzfpz::getFMchid, mchId) + .last("LIMIT 1")); + // 如果没有找到对应的配置信息,则抛出异常 + if (wCzzfpz == null) { + throw new BaseException("退款失败,请联系管理员。"); + } + // 根据配置信息创建WxPayService对象 WxPayService wxPayService = WxPayConfiguration.getPayService(wCzzfpz); - //下面依旧是走微信sdk,查询订单和验证订单,为了保证数据得安全性,还是重复验证一次 - String dddh = null; try { + // 解析退款通知结果 WxPayRefundNotifyResult notifyResult = wxPayService.parseRefundNotifyResult(xmlData); + // 获取退款请求信息 WxPayRefundNotifyResult.ReqInfo reqInfo = notifyResult.getReqInfo(); + // 提取退款相关信息 String refundId = reqInfo.getRefundId(); String successTime = reqInfo.getSuccessTime(); String transactionId = reqInfo.getTransactionId(); String outTradeNo = reqInfo.getOutTradeNo(); - WDd wDd = ddDao.selectOne(Wrappers.lambdaQuery().eq(WDd::getFZfdh, transactionId).eq(WDd::getFDddh, outTradeNo)); + // 从数据库中查询订单信息 + WDd wDd = ddDao.selectOne(Wrappers.lambdaQuery() + .eq(WDd::getFZfdh, transactionId) + .eq(WDd::getFDddh, outTradeNo)); + // 如果没有查询到订单,则生成失败响应并返回 if (wDd == null) { return generateXmlResponse("FAIL", "未查询到订单", outTradeNo); } - if (wDd.getFSftk().equals(SysEnum.Y.getCode())){ + // 如果订单已经退款,则生成失败响应并返回 + if (wDd.getFSftk().equals(SysEnum.Y.getCode())) { return generateXmlResponse("FAIL", "订单已退款", outTradeNo); } - // 5. 更新订单状态 + // 更新订单状态为已退款,并记录相关信息 wDd.setFDdzt(DdztEnum.REFUNDED.getCode()); wDd.setFSftk(SysEnum.Y.getCode()); wDd.setFTkdh(refundId); wDd.setFTksj(LocalDateTimeUtils.parse(successTime)); + // 保存更新后的订单信息 ddDao.updateById(wDd); - log.info("微信退款成功: {}", dddh); - return generateXmlResponse("SUCCESS", "成功", dddh); + // 记录日志信息 + log.info("微信退款成功: {}", wDd.getFDddh()); + // 生成成功响应并返回 + return generateXmlResponse("SUCCESS", "成功", outTradeNo); } catch (WxPayException e) { + // 记录微信支付异常信息 log.error("微信退款回调处理失败: {}", e.getErrCodeDes(), e); - return generateXmlResponse("FAIL", e.getErrCodeDes(), dddh); + // 生成失败响应并返回 + return generateXmlResponse("FAIL", e.getErrCodeDes(), ""); + } catch (Exception e) { + // 记录其他异常信息 + log.error("处理退款回调时发生未知错误: ", e); + // 生成失败响应并返回 + return generateXmlResponse("FAIL", "处理退款回调时发生未知错误", ""); } } - - /** * 处理支付成功回调 * @@ -218,6 +246,7 @@ public class WxPayManagerImpl implements WxPayManager { /** * 生成预支付订单 + * * @param wDd * @param openId * @return -- libgit2 0.21.2