Commit d735294ad316364259ef455f96ff70cdcaa48d47

Authored by 陈威
1 parent 212469a1
Exists in dev

update

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; @@ -12,6 +12,7 @@ import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
12 import com.github.binarywang.wxpay.bean.result.WxPayRefundResult; 12 import com.github.binarywang.wxpay.bean.result.WxPayRefundResult;
13 import com.github.binarywang.wxpay.exception.WxPayException; 13 import com.github.binarywang.wxpay.exception.WxPayException;
14 import com.github.binarywang.wxpay.service.WxPayService; 14 import com.github.binarywang.wxpay.service.WxPayService;
  15 +import com.hotent.base.exception.BaseException;
15 import com.hotent.base.util.BeanUtils; 16 import com.hotent.base.util.BeanUtils;
16 import com.hotent.lpg.common.enums.DdZffsEnum; 17 import com.hotent.lpg.common.enums.DdZffsEnum;
17 import com.hotent.lpg.common.enums.DdlyEnum; 18 import com.hotent.lpg.common.enums.DdlyEnum;
@@ -47,6 +48,7 @@ import javax.xml.xpath.XPathFactory; @@ -47,6 +48,7 @@ import javax.xml.xpath.XPathFactory;
47 import java.io.StringReader; 48 import java.io.StringReader;
48 import java.io.StringWriter; 49 import java.io.StringWriter;
49 import java.math.BigDecimal; 50 import java.math.BigDecimal;
  51 +import java.rmi.ServerError;
50 import java.time.LocalDateTime; 52 import java.time.LocalDateTime;
51 import java.util.HashMap; 53 import java.util.HashMap;
52 54
@@ -59,10 +61,10 @@ public class WxPayManagerImpl implements WxPayManager { @@ -59,10 +61,10 @@ public class WxPayManagerImpl implements WxPayManager {
59 private String hostUrl; 61 private String hostUrl;
60 62
61 @Resource 63 @Resource
62 - private DdDao ddDao; 64 + private DdDao ddDao;
63 65
64 @Resource 66 @Resource
65 - private CzzfpzDao czzfpzDao; 67 + private CzzfpzDao czzfpzDao;
66 68
67 /** 69 /**
68 * 发起退款请求 70 * 发起退款请求
@@ -118,49 +120,75 @@ public class WxPayManagerImpl implements WxPayManager { @@ -118,49 +120,75 @@ public class WxPayManagerImpl implements WxPayManager {
118 */ 120 */
119 @Override 121 @Override
120 public String handleRefundSuccessCallback(String xmlData) { 122 public String handleRefundSuccessCallback(String xmlData) {
  123 + // 将XML格式的回调数据转换为WxPayOrderNotifyResult对象
121 WxPayOrderNotifyResult rs = WxPayOrderNotifyResult.fromXML(xmlData); 124 WxPayOrderNotifyResult rs = WxPayOrderNotifyResult.fromXML(xmlData);
  125 + // 获取回调中的返回码
122 String returnCode = rs.getReturnCode(); 126 String returnCode = rs.getReturnCode();
  127 + // 如果返回码不是"SUCCESS",则生成失败响应并返回
123 if (!returnCode.equals("SUCCESS")) { 128 if (!returnCode.equals("SUCCESS")) {
124 return generateXmlResponse("FAIL", "退款失败", returnCode); 129 return generateXmlResponse("FAIL", "退款失败", returnCode);
125 } 130 }
  131 + // 获取回调中的appid和mchId
126 String appid = rs.getAppid(); 132 String appid = rs.getAppid();
127 String mchId = rs.getMchId(); 133 String mchId = rs.getMchId();
128 - //在用 场站信息 拿到场站对应得支付配置  
129 - WCzzfpz wCzzfpz = czzfpzDao.selectOne(Wrappers.<WCzzfpz>lambdaQuery().eq(WCzzfpz::getFAppid, appid).eq(WCzzfpz::getFMchid, mchId)); 134 + // 从数据库中查询对应的应用配置信息
  135 + WCzzfpz wCzzfpz = czzfpzDao.selectOne(Wrappers.<WCzzfpz>lambdaQuery()
  136 + .eq(WCzzfpz::getFAppid, appid)
  137 + .eq(WCzzfpz::getFMchid, mchId)
  138 + .last("LIMIT 1"));
  139 + // 如果没有找到对应的配置信息,则抛出异常
  140 + if (wCzzfpz == null) {
  141 + throw new BaseException("退款失败,请联系管理员。");
  142 + }
  143 + // 根据配置信息创建WxPayService对象
130 WxPayService wxPayService = WxPayConfiguration.getPayService(wCzzfpz); 144 WxPayService wxPayService = WxPayConfiguration.getPayService(wCzzfpz);
131 - //下面依旧是走微信sdk,查询订单和验证订单,为了保证数据得安全性,还是重复验证一次  
132 - String dddh = null;  
133 try { 145 try {
  146 + // 解析退款通知结果
134 WxPayRefundNotifyResult notifyResult = wxPayService.parseRefundNotifyResult(xmlData); 147 WxPayRefundNotifyResult notifyResult = wxPayService.parseRefundNotifyResult(xmlData);
  148 + // 获取退款请求信息
135 WxPayRefundNotifyResult.ReqInfo reqInfo = notifyResult.getReqInfo(); 149 WxPayRefundNotifyResult.ReqInfo reqInfo = notifyResult.getReqInfo();
  150 + // 提取退款相关信息
136 String refundId = reqInfo.getRefundId(); 151 String refundId = reqInfo.getRefundId();
137 String successTime = reqInfo.getSuccessTime(); 152 String successTime = reqInfo.getSuccessTime();
138 String transactionId = reqInfo.getTransactionId(); 153 String transactionId = reqInfo.getTransactionId();
139 String outTradeNo = reqInfo.getOutTradeNo(); 154 String outTradeNo = reqInfo.getOutTradeNo();
140 - WDd wDd = ddDao.selectOne(Wrappers.<WDd>lambdaQuery().eq(WDd::getFZfdh, transactionId).eq(WDd::getFDddh, outTradeNo)); 155 + // 从数据库中查询订单信息
  156 + WDd wDd = ddDao.selectOne(Wrappers.<WDd>lambdaQuery()
  157 + .eq(WDd::getFZfdh, transactionId)
  158 + .eq(WDd::getFDddh, outTradeNo));
  159 + // 如果没有查询到订单,则生成失败响应并返回
141 if (wDd == null) { 160 if (wDd == null) {
142 return generateXmlResponse("FAIL", "未查询到订单", outTradeNo); 161 return generateXmlResponse("FAIL", "未查询到订单", outTradeNo);
143 } 162 }
144 - if (wDd.getFSftk().equals(SysEnum.Y.getCode())){ 163 + // 如果订单已经退款,则生成失败响应并返回
  164 + if (wDd.getFSftk().equals(SysEnum.Y.getCode())) {
145 return generateXmlResponse("FAIL", "订单已退款", outTradeNo); 165 return generateXmlResponse("FAIL", "订单已退款", outTradeNo);
146 } 166 }
147 - // 5. 更新订单状态 167 + // 更新订单状态为已退款,并记录相关信息
148 wDd.setFDdzt(DdztEnum.REFUNDED.getCode()); 168 wDd.setFDdzt(DdztEnum.REFUNDED.getCode());
149 wDd.setFSftk(SysEnum.Y.getCode()); 169 wDd.setFSftk(SysEnum.Y.getCode());
150 wDd.setFTkdh(refundId); 170 wDd.setFTkdh(refundId);
151 wDd.setFTksj(LocalDateTimeUtils.parse(successTime)); 171 wDd.setFTksj(LocalDateTimeUtils.parse(successTime));
  172 + // 保存更新后的订单信息
152 ddDao.updateById(wDd); 173 ddDao.updateById(wDd);
153 - log.info("微信退款成功: {}", dddh);  
154 - return generateXmlResponse("SUCCESS", "成功", dddh); 174 + // 记录日志信息
  175 + log.info("微信退款成功: {}", wDd.getFDddh());
  176 + // 生成成功响应并返回
  177 + return generateXmlResponse("SUCCESS", "成功", outTradeNo);
155 } catch (WxPayException e) { 178 } catch (WxPayException e) {
  179 + // 记录微信支付异常信息
156 log.error("微信退款回调处理失败: {}", e.getErrCodeDes(), e); 180 log.error("微信退款回调处理失败: {}", e.getErrCodeDes(), e);
157 - return generateXmlResponse("FAIL", e.getErrCodeDes(), dddh); 181 + // 生成失败响应并返回
  182 + return generateXmlResponse("FAIL", e.getErrCodeDes(), "");
  183 + } catch (Exception e) {
  184 + // 记录其他异常信息
  185 + log.error("处理退款回调时发生未知错误: ", e);
  186 + // 生成失败响应并返回
  187 + return generateXmlResponse("FAIL", "处理退款回调时发生未知错误", "");
158 } 188 }
159 } 189 }
160 190
161 191
162 -  
163 -  
164 /** 192 /**
165 * 处理支付成功回调 193 * 处理支付成功回调
166 * 194 *
@@ -218,6 +246,7 @@ public class WxPayManagerImpl implements WxPayManager { @@ -218,6 +246,7 @@ public class WxPayManagerImpl implements WxPayManager {
218 246
219 /** 247 /**
220 * 生成预支付订单 248 * 生成预支付订单
  249 + *
221 * @param wDd 250 * @param wDd
222 * @param openId 251 * @param openId
223 * @return 252 * @return