|
|
@@ -17,6 +17,7 @@ import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
import shop.alien.entity.store.*;
|
|
|
import shop.alien.lawyer.service.StoreAliPayRefundLogService;
|
|
|
+import shop.alien.lawyer.service.StoreAliPayErrorLogService;
|
|
|
import shop.alien.util.common.UniqueRandomNumGenerator;
|
|
|
import shop.alien.util.common.UrlEncode;
|
|
|
import shop.alien.util.system.OSUtil;
|
|
|
@@ -39,6 +40,7 @@ public class AliApi {
|
|
|
|
|
|
|
|
|
private final StoreAliPayRefundLogService storeAliPayRefundLogService;
|
|
|
+private final StoreAliPayErrorLogService storeAliPayErrorLogService;
|
|
|
|
|
|
/**
|
|
|
* 商家端appId
|
|
|
@@ -235,14 +237,75 @@ private final StoreAliPayRefundLogService storeAliPayRefundLogService;
|
|
|
|
|
|
} else {
|
|
|
log.warn("AliPayConfig.processRefund ERROR Msg={}", response.getBody());
|
|
|
- JSONObject jsonObject = JSONObject.parseObject(response.getBody()).getJSONObject("alipay_trade_refund_response");
|
|
|
- refundReslut = jsonObject.getString("sub_msg");
|
|
|
+ // 退款失败,保存错误信息到错误日志表
|
|
|
+ JSONObject refundResponse = null;
|
|
|
+ try {
|
|
|
+ JSONObject responseBody = JSONObject.parseObject(response.getBody());
|
|
|
+ refundResponse = responseBody.getJSONObject("alipay_trade_refund_response");
|
|
|
+
|
|
|
+ StoreAliPayErrorLog errorLog = new StoreAliPayErrorLog();
|
|
|
+ // 订单金额
|
|
|
+ errorLog.setTransAmount(refundAmount);
|
|
|
+ // 阿里返回错误信息
|
|
|
+ errorLog.setSubMsg(refundResponse.getString("sub_msg"));
|
|
|
+ // 阿里返回状态码
|
|
|
+ errorLog.setSubCode(refundResponse.getString("sub_code"));
|
|
|
+ // 阿里返回参数具体内容(保存完整的响应体)
|
|
|
+ errorLog.setBizContent(response.getBody());
|
|
|
+ // 错误信息(优先使用sub_msg,如果没有则使用msg)
|
|
|
+ String errorMsg = refundResponse.getString("sub_msg");
|
|
|
+ if (StringUtils.isBlank(errorMsg)) {
|
|
|
+ errorMsg = refundResponse.getString("msg");
|
|
|
+ }
|
|
|
+ if (StringUtils.isBlank(errorMsg)) {
|
|
|
+ errorMsg = "支付宝退款失败";
|
|
|
+ }
|
|
|
+ errorLog.setInformation(errorMsg);
|
|
|
+ // 标准字段
|
|
|
+ errorLog.setDeleteFlag(0);
|
|
|
+ errorLog.setCreatedTime(new Date());
|
|
|
+
|
|
|
+ storeAliPayErrorLogService.save(errorLog);
|
|
|
+ log.info("退款失败错误信息已保存到错误日志表,订单号: {}, 错误信息: {}", outTradeNo, errorMsg);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("保存退款失败错误信息到错误日志表时发生异常,订单号: {}", outTradeNo, e);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 设置返回的错误信息
|
|
|
+ if (refundResponse != null) {
|
|
|
+ refundReslut = refundResponse.getString("sub_msg");
|
|
|
+ if (StringUtils.isBlank(refundReslut)) {
|
|
|
+ refundReslut = refundResponse.getString("msg");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (StringUtils.isBlank(refundReslut)) {
|
|
|
+ refundReslut = "退款失败";
|
|
|
+ }
|
|
|
}
|
|
|
return refundReslut;
|
|
|
} catch (AlipayApiException e) {
|
|
|
- throw new RuntimeException(e);
|
|
|
+ // 异常情况,也保存错误信息到错误日志表
|
|
|
+ try {
|
|
|
+ StoreAliPayErrorLog errorLog = new StoreAliPayErrorLog();
|
|
|
+ // 订单金额
|
|
|
+ errorLog.setTransAmount(refundAmount);
|
|
|
+ // 错误信息
|
|
|
+ String errorMsg = "支付宝退款接口调用异常: " + e.getMessage();
|
|
|
+ errorLog.setInformation(errorMsg);
|
|
|
+ // 异常信息保存到bizContent
|
|
|
+ errorLog.setBizContent("异常类型: " + e.getClass().getName() + ", 异常信息: " + e.getMessage());
|
|
|
+ // 标准字段
|
|
|
+ errorLog.setDeleteFlag(0);
|
|
|
+ errorLog.setCreatedTime(new Date());
|
|
|
+
|
|
|
+ storeAliPayErrorLogService.save(errorLog);
|
|
|
+ log.info("退款异常错误信息已保存到错误日志表,订单号: {}, 异常信息: {}", outTradeNo, errorMsg);
|
|
|
+ } catch (Exception ex) {
|
|
|
+ log.error("保存退款异常错误信息到错误日志表时发生异常,订单号: {}", outTradeNo, ex);
|
|
|
+ }
|
|
|
+ log.error("AliPayConfig.processRefund 调用支付宝退款接口异常,订单号: {}", outTradeNo, e);
|
|
|
+ throw new RuntimeException("支付宝退款接口调用失败: " + e.getMessage(), e);
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
|
|
|
|