Commit d735294ad316364259ef455f96ff70cdcaa48d47
1 parent
212469a1
Exists in
dev
update
Showing
1 changed file
with
43 additions
and
14 deletions
Show diff stats
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 | ... | ... |