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 12 import com.github.binarywang.wxpay.bean.result.WxPayRefundResult;
13 13 import com.github.binarywang.wxpay.exception.WxPayException;
14 14 import com.github.binarywang.wxpay.service.WxPayService;
  15 +import com.hotent.base.exception.BaseException;
15 16 import com.hotent.base.util.BeanUtils;
16 17 import com.hotent.lpg.common.enums.DdZffsEnum;
17 18 import com.hotent.lpg.common.enums.DdlyEnum;
... ... @@ -47,6 +48,7 @@ import javax.xml.xpath.XPathFactory;
47 48 import java.io.StringReader;
48 49 import java.io.StringWriter;
49 50 import java.math.BigDecimal;
  51 +import java.rmi.ServerError;
50 52 import java.time.LocalDateTime;
51 53 import java.util.HashMap;
52 54  
... ... @@ -59,10 +61,10 @@ public class WxPayManagerImpl implements WxPayManager {
59 61 private String hostUrl;
60 62  
61 63 @Resource
62   - private DdDao ddDao;
  64 + private DdDao ddDao;
63 65  
64 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 120 */
119 121 @Override
120 122 public String handleRefundSuccessCallback(String xmlData) {
  123 + // 将XML格式的回调数据转换为WxPayOrderNotifyResult对象
121 124 WxPayOrderNotifyResult rs = WxPayOrderNotifyResult.fromXML(xmlData);
  125 + // 获取回调中的返回码
122 126 String returnCode = rs.getReturnCode();
  127 + // 如果返回码不是"SUCCESS",则生成失败响应并返回
123 128 if (!returnCode.equals("SUCCESS")) {
124 129 return generateXmlResponse("FAIL", "退款失败", returnCode);
125 130 }
  131 + // 获取回调中的appid和mchId
126 132 String appid = rs.getAppid();
127 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 144 WxPayService wxPayService = WxPayConfiguration.getPayService(wCzzfpz);
131   - //下面依旧是走微信sdk,查询订单和验证订单,为了保证数据得安全性,还是重复验证一次
132   - String dddh = null;
133 145 try {
  146 + // 解析退款通知结果
134 147 WxPayRefundNotifyResult notifyResult = wxPayService.parseRefundNotifyResult(xmlData);
  148 + // 获取退款请求信息
135 149 WxPayRefundNotifyResult.ReqInfo reqInfo = notifyResult.getReqInfo();
  150 + // 提取退款相关信息
136 151 String refundId = reqInfo.getRefundId();
137 152 String successTime = reqInfo.getSuccessTime();
138 153 String transactionId = reqInfo.getTransactionId();
139 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 160 if (wDd == null) {
142 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 165 return generateXmlResponse("FAIL", "订单已退款", outTradeNo);
146 166 }
147   - // 5. 更新订单状态
  167 + // 更新订单状态为已退款,并记录相关信息
148 168 wDd.setFDdzt(DdztEnum.REFUNDED.getCode());
149 169 wDd.setFSftk(SysEnum.Y.getCode());
150 170 wDd.setFTkdh(refundId);
151 171 wDd.setFTksj(LocalDateTimeUtils.parse(successTime));
  172 + // 保存更新后的订单信息
152 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 178 } catch (WxPayException e) {
  179 + // 记录微信支付异常信息
156 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 246  
219 247 /**
220 248 * 生成预支付订单
  249 + *
221 250 * @param wDd
222 251 * @param openId
223 252 * @return
... ...