Pārlūkot izejas kodu

1、提示不精确调整

yys 3 dienas atpakaļ
vecāks
revīzija
64f6f46938

+ 124 - 2
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -89,6 +89,7 @@ import com.fs.system.mapper.SysDictDataMapper;
 import com.fs.system.service.ISysConfigService;
 import com.fs.voice.utils.StringUtil;
 import com.github.binarywang.wxpay.bean.transfer.TransferBillsResult;
+import com.github.binarywang.wxpay.exception.WxPayException;
 import com.volcengine.service.vod.IVodService;
 import com.volcengine.service.vod.model.business.VodUrlUploadURLSet;
 import com.volcengine.service.vod.model.request.*;
@@ -1873,6 +1874,10 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
                 // 异常时回滚余额
 
                 rollbackBalance(balanceRollbackError);
+                WxPayException wxEx = extractWxPayException(e);
+                if (wxEx != null) {
+                    return R.error(resolveWxPayTransferErrorMsg(wxEx));
+                }
                 return R.error("奖励发送失败,请联系客服");
             }
 
@@ -2126,6 +2131,10 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
                     // 异常时回滚余额
 
                     rollbackBalance(balanceRollbackError);
+                    WxPayException wxEx = extractWxPayException(e);
+                    if (wxEx != null) {
+                        return R.error(resolveWxPayTransferErrorMsg(wxEx));
+                    }
                     return R.error("奖励发送失败,请联系客服");
                 }
 
@@ -2231,7 +2240,11 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
                      return R.error("奖励发送失败,请联系客服");
                  }
              }catch (Exception e){
-                 return R.error(e.getMessage());
+                     WxPayException wxEx = extractWxPayException(e);
+                     if (wxEx != null) {
+                         return R.error(resolveWxPayTransferErrorMsg(wxEx));
+                     }
+                     return R.error("奖励发送失败,请联系客服");
              }
 
             }
@@ -5411,6 +5424,10 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
                     // 异常时回滚余额
 
                     rollbackBalance(balanceRollbackError);
+                    WxPayException wxEx = extractWxPayException(e);
+                    if (wxEx != null) {
+                        return R.error(resolveWxPayTransferErrorMsg(wxEx));
+                    }
                     return R.error("奖励发送失败,请联系客服");
                 }
 
@@ -5517,7 +5534,11 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
                         return R.error("奖励发送失败,请联系客服");
                     }
                 }catch (Exception e){
-                    return R.error(e.getMessage());
+                    WxPayException wxEx = extractWxPayException(e);
+                    if (wxEx != null) {
+                        return R.error(resolveWxPayTransferErrorMsg(wxEx));
+                    }
+                    return R.error("奖励发送失败,请联系客服");
                 }
 
             }
@@ -5573,5 +5594,106 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
 
         return user.getMpOpenId();
     }
+
+    /**
+     * 递归查找异常链中的WxPayException(处理多层RuntimeException包装的情况)
+     */
+    private WxPayException extractWxPayException(Throwable e) {
+        if (e == null) {
+            return null;
+        }
+        if (e instanceof WxPayException) {
+            return (WxPayException) e;
+        }
+        return extractWxPayException(e.getCause());
+    }
+
+    /**
+     * 根据微信支付转账接口错误码解析用户可读的中文错误信息
+     */
+    private String resolveWxPayTransferErrorMsg(WxPayException e) {
+        String errCode = e.getErrCode();
+        String customErrorMsg = e.getCustomErrorMsg();
+        // 优先处理自定义错误信息中的已知中文关键词
+        if (customErrorMsg != null && !customErrorMsg.isEmpty()) {
+            if (customErrorMsg.contains("资金不足") || customErrorMsg.contains("余额不足")) {
+                return "商户账户余额不足,请联系管理员充值";
+            }
+            if (customErrorMsg.contains("没有绑定关系")) {
+                return "商户号与appid未绑定,请联系管理员配置";
+            }
+        }
+        if (errCode == null || errCode.isEmpty()) {
+            return "微信支付服务异常,请稍后重试";
+        }
+        switch (errCode) {
+            case "SYSTEMERROR":
+                return "微信支付系统繁忙,请稍后重试";
+            case "INVALID_REQUEST":
+                return "请求参数不合法,请联系管理员";
+            case "PARAM_ERROR":
+                return "请求参数错误,请联系管理员";
+            case "NOTENOUGH":
+                return "商户账户余额不足,请联系管理员充值";
+            case "ORDERNOTEXIST":
+                return "发放订单不存在";
+            case "ORDER_PAID":
+                return "发放订单已支付,请勿重复操作";
+            case "FREQUENCY_LIMITED":
+                return "操作过于频繁,请稍后再试";
+            case "EXCEED_QTY_LIMIT":
+                return "超过发放数量限制,请稍后再试";
+            case "EXCEED_QUOTA_LIMIT":
+                return "超过发放额度限制,请稍后再试";
+            case "TRANSFER_QUOTA_OVER_LIMIT":
+                return "发放金额超限,请联系管理员";
+            case "PAY_FAIL":
+                return "发放失败,请稍后重试";
+            case "PAYER_ACCOUNT_ERROR":
+                return "付款账户异常,请联系管理员";
+            case "PAYER_USER_INFO_ERROR":
+                return "付款方信息错误,请联系管理员";
+            case "PAYEE_ACCOUNT_ERROR":
+            case "PAYEE_NOT_EXIST":
+                return "收款账户异常,请重新授权后重试";
+            case "PAYEE_USER_INFO_ERROR":
+                return "收款人信息错误,请重新授权";
+            case "RECV_ACCOUNT_NOT_ALLOWED":
+                return "收款账户不允许,请核实后重试";
+            case "USER_BANNED":
+                return "收款账号被限制,请联系客服";
+            case "TRANSFER_RISK":
+                return "发放存在风险,请稍后重试";
+            case "REALNAME_CHECK_ERROR":
+                return "收款人实名信息不匹配,请核实后重试";
+            case "OPENID_ERROR":
+                return "收款人账号不正确,请重新授权";
+            case "APPID_OPENID_ERROR":
+                return "应用与用户不匹配,请重新授权";
+            case "APPID_MCHID_NOT_MATCH":
+                return "商户号与应用未绑定,请联系管理员配置";
+            case "MCH_NOT_EXISTS":
+                return "商户号不存在,请联系管理员";
+            case "MCH_ERROR":
+                return "商户配置异常,请联系管理员";
+            case "NO_AUTH":
+            case "NOT_PERMISSION":
+                return "商户无此接口权限,请联系管理员";
+            case "SIGN_ERROR":
+                return "签名错误,请联系管理员";
+            case "SCENE_ID_NOT_EXIST":
+                return "发放场景不存在,请联系管理员";
+            case "SCENE_NOT_ALLOWED":
+                return "该场景不允许发放,请联系管理员";
+            case "TRANSFER_ALREADY_EXISTS":
+                return "发放已存在,请勿重复操作";
+            case "RESOURCE_NOT_EXISTS":
+                return "发放账单不存在";
+            case "REQUEST_BLOCKED":
+                return "请求被拦截,请稍后重试";
+            default:
+                return "微信支付服务异常,请稍后重试";
+        }
+    }
 }
 

+ 2 - 127
fs-user-app/src/main/java/com/fs/app/controller/course/CourseFsUserController.java

@@ -30,7 +30,6 @@ import com.fs.his.enums.FsUserOperationEnum;
 import com.fs.his.service.IFsUserService;
 import com.fs.im.dto.OpenImResponseDTO;
 import com.fs.im.service.OpenIMService;
-import com.github.binarywang.wxpay.exception.WxPayException;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.slf4j.Logger;
@@ -174,11 +173,6 @@ public class CourseFsUserController extends AppBaseController {
         try {
             return courseVideoService.sendRewardByFsUser(param);
         } catch (Exception e) {
-            WxPayException wxEx = extractWxPayException(e);
-            if (wxEx != null) {
-                logger.error("【发放奖励】微信支付转账异常,用户ID:{},错误码:{},错误信息:{}", param.getUserId(), wxEx.getErrCode(), wxEx.getErrCodeDes(), e);
-                return R.error(resolveWxPayTransferErrorMsg(wxEx));
-            }
             logger.error("【发放奖励】奖励发放异常,用户ID:{}", param.getUserId(), e);
             return R.error("奖励发放失败,请稍后重试");
         }
@@ -214,133 +208,14 @@ public class CourseFsUserController extends AppBaseController {
         }
         param.setUserId(Long.parseLong(userId));
         try {
-            return R.ok(courseVideoService.withdrawal(param));
+            return courseVideoService.withdrawal(param);
         } catch (Exception e) {
-            WxPayException wxEx = extractWxPayException(e);
-            if (wxEx != null) {
-                logger.error("【积分提现】微信支付转账异常,用户ID:{},错误码:{},错误信息:{}", param.getUserId(), wxEx.getErrCode(), wxEx.getErrCodeDes(), e);
-                return R.error(resolveWxPayTransferErrorMsg(wxEx));
-            }
             logger.error("【积分提现】提现异常,用户ID:{}", param.getUserId(), e);
             return R.error("提现失败,请稍后重试");
         }
     }
 
-    /**
-     * 递归查找异常链中的WxPayException(处理多层RuntimeException包装的情况)
-     */
-    private WxPayException extractWxPayException(Throwable e) {
-        if (e == null) {
-            return null;
-        }
-        if (e instanceof WxPayException) {
-            return (WxPayException) e;
-        }
-        return extractWxPayException(e.getCause());
-    }
 
-    /**
-     * 根据微信支付转账接口错误码解析用户可读的中文错误信息
-     */
-    private String resolveWxPayTransferErrorMsg(WxPayException e) {
-        String errCode = e.getErrCode();
-        String customErrorMsg = e.getCustomErrorMsg();
-        // 优先处理自定义错误信息中的已知中文关键词
-        if (customErrorMsg != null && !customErrorMsg.isEmpty()) {
-            if (customErrorMsg.contains("资金不足") || customErrorMsg.contains("余额不足")) {
-                return "商户账户余额不足,请联系管理员充值";
-            }
-            if (customErrorMsg.contains("没有绑定关系")) {
-                return "商户号与appid未绑定,请联系管理员配置";
-            }
-            // customErrorMsg可能含英文,不再直接透传,走errCode映射
-        }
-        if (errCode == null || errCode.isEmpty()) {
-            return "微信支付服务异常,请稍后重试";
-        }
-        switch (errCode) {
-            // 系统级错误
-            case "SYSTEMERROR":
-                return "微信支付系统繁忙,请稍后重试";
-            case "INVALID_REQUEST":
-                return "请求参数不合法,请联系管理员";
-            case "PARAM_ERROR":
-                return "请求参数错误,请联系管理员";
-            // 余额不足
-            case "NOTENOUGH":
-                return "商户账户余额不足,请联系管理员充值";
-            // 订单相关
-            case "ORDERNOTEXIST":
-                return "发放订单不存在";
-            case "ORDER_PAID":
-                return "发放订单已支付,请勿重复操作";
-            // 频率/额度限制
-            case "FREQUENCY_LIMITED":
-                return "操作过于频繁,请稍后再试";
-            case "EXCEED_QTY_LIMIT":
-                return "超过发放数量限制,请稍后再试";
-            case "EXCEED_QUOTA_LIMIT":
-                return "超过发放额度限制,请稍后再试";
-            case "TRANSFER_QUOTA_OVER_LIMIT":
-                return "发放金额超限,请联系管理员";
-            // 转账失败
-            case "PAY_FAIL":
-                return "发放失败,请稍后重试";
-            // 付款方账户问题
-            case "PAYER_ACCOUNT_ERROR":
-                return "付款账户异常,请联系管理员";
-            case "PAYER_USER_INFO_ERROR":
-                return "付款方信息错误,请联系管理员";
-            // 收款方账户问题
-            case "PAYEE_ACCOUNT_ERROR":
-            case "PAYEE_NOT_EXIST":
-                return "收款账户异常,请重新授权后重试";
-            case "PAYEE_USER_INFO_ERROR":
-                return "收款人信息错误,请重新授权";
-            case "RECV_ACCOUNT_NOT_ALLOWED":
-                return "收款账户不允许,请核实后重试";
-            case "USER_BANNED":
-                return "收款账号被限制,请联系客服";
-            // 风控
-            case "TRANSFER_RISK":
-                return "发放存在风险,请稍后重试";
-            // 实名校验
-            case "REALNAME_CHECK_ERROR":
-                return "收款人实名信息不匹配,请核实后重试";
-            // openid/appid/商户号关系问题
-            case "OPENID_ERROR":
-                return "收款人账号不正确,请重新授权";
-            case "APPID_OPENID_ERROR":
-                return "应用与用户不匹配,请重新授权";
-            case "APPID_MCHID_NOT_MATCH":
-                return "商户号与应用未绑定,请联系管理员配置";
-            case "MCH_NOT_EXISTS":
-                return "商户号不存在,请联系管理员";
-            case "MCH_ERROR":
-                return "商户配置异常,请联系管理员";
-            // 权限问题
-            case "NO_AUTH":
-            case "NOT_PERMISSION":
-                return "商户无此接口权限,请联系管理员";
-            // 签名错误
-            case "SIGN_ERROR":
-                return "签名错误,请联系管理员";
-            // 场景ID相关
-            case "SCENE_ID_NOT_EXIST":
-                return "发放场景不存在,请联系管理员";
-            case "SCENE_NOT_ALLOWED":
-                return "该场景不允许发放,请联系管理员";
-            // 转账状态
-            case "TRANSFER_ALREADY_EXISTS":
-                return "发放已存在,请勿重复操作";
-            // V3接口特有错误码
-            case "RESOURCE_NOT_EXISTS":
-                return "发放账单不存在";
-            case "REQUEST_BLOCKED":
-                return "请求被拦截,请稍后重试";
-            default:
-                return "微信支付服务异常,请稍后重试";
-        }
-    }
+
 
 }