Просмотр исходного кода

1、调整领取红包正确提示

yys 2 дней назад
Родитель
Сommit
1fa4a3f35e

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

@@ -5751,6 +5751,82 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
         return extractWxPayException(e.getCause());
     }
 
+    /**
+     * 提取微信返回的详细错误描述(仅用于 INVALID_REQUEST / PARAM_ERROR 精细提示)
+     */
+    private String extractWxPayDetailMsg(WxPayException e) {
+        if (StringUtils.isNotBlank(e.getErrCodeDes())) {
+            return e.getErrCodeDes().trim();
+        }
+        if (StringUtils.isNotBlank(e.getCustomErrorMsg())) {
+            return e.getCustomErrorMsg().trim();
+        }
+        if (StringUtils.isNotBlank(e.getReturnMsg())) {
+            return e.getReturnMsg().trim();
+        }
+        return null;
+    }
+
+    /**
+     * 将 INVALID_REQUEST / PARAM_ERROR 的微信明细转成客户能看懂的精确提示
+     */
+    private String resolveInvalidOrParamErrorMsg(String errCode, String detail) {
+        logger.warn("微信支付转账参数类错误: errCode={}, detail={}", errCode, detail);
+        if (StringUtils.isNotBlank(detail)) {
+            if (detail.contains("Openid") || detail.contains("openid") || detail.contains("OPENID")) {
+                return "当前微信账号与应用不匹配,请重新授权后再试";
+            }
+            if (detail.contains("实名") || detail.contains("姓名不一致")) {
+                return "收款人姓名与微信实名不一致,请核实后再试";
+            }
+            if (detail.contains("0.3元以下") && detail.contains("姓名")) {
+                return "小额奖励无需校验姓名,请联系客服处理";
+            }
+            if (detail.contains("单日转账额度") || detail.contains("单笔转账") || detail.contains("上下限")) {
+                return "奖励金额超出可发放范围,请稍后再试或联系客服";
+            }
+            if (detail.contains("API通道未开启")) {
+                return "奖励发放通道未开通,请联系客服";
+            }
+            if (detail.contains("产品权限") || detail.contains("尚未获取该转账场景") || detail.contains("转账场景")
+                    || detail.contains("场景报备") || detail.contains("未传入完整")) {
+                return "奖励发放场景未配置完成,请联系客服";
+            }
+            if (detail.contains("收款用户列表")) {
+                return "当前账号不在可收款名单中,请联系客服";
+            }
+            if (detail.contains("用户收款感知") || detail.contains("user_recv_perception")) {
+                return "奖励发放文案配置不正确,请联系客服";
+            }
+            if (detail.contains("IP地址不允许") || detail.contains("此IP地址")) {
+                return "服务网络未授权发放,请联系客服";
+            }
+            if (detail.contains("超出重试期")) {
+                return "发放单已超时,请联系客服重新处理";
+            }
+            if (detail.contains("创建订单冲突")) {
+                return "发放操作冲突,请稍后再试";
+            }
+            if (detail.contains("资金不足") || detail.contains("余额不足")) {
+                return "商户账户余额不足,请联系管理员充值";
+            }
+            if (detail.contains("没有绑定关系") || detail.contains("商户号和AppID")) {
+                return "商户号与应用未绑定,请联系管理员配置";
+            }
+            if (detail.contains("Wechatpay-Serial") || detail.contains("平台证书") || detail.contains("证书")) {
+                return "支付证书配置异常,请联系客服";
+            }
+            // 微信已返回中文说明时,直接给客户看(更精确)
+            if (detail.matches(".*[\\u4e00-\\u9fa5]+.*")) {
+                return detail;
+            }
+        }
+        if ("PARAM_ERROR".equals(errCode)) {
+            return "发放信息不完整,请重新授权后再试;如仍失败请联系客服";
+        }
+        return "当前无法完成发放,请稍后重试;如多次失败请联系客服";
+    }
+
     /**
      * 根据微信支付转账接口错误码解析用户可读的中文错误信息
      */
@@ -5773,9 +5849,8 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
             case "SYSTEMERROR":
                 return "微信支付系统繁忙,请稍后重试";
             case "INVALID_REQUEST":
-                return "请求参数不合法,请联系管理员";
             case "PARAM_ERROR":
-                return "请求参数错误,请联系管理员";
+                return resolveInvalidOrParamErrorMsg(errCode, extractWxPayDetailMsg(e));
             case "NOTENOUGH":
                 return "商户账户余额不足,请联系管理员充值";
             case "ORDERNOTEXIST":