Skip to content

错误码

更新时间:2026/7/26 21:23:52

错误码体系

DaxPay 有两层 API,响应结构略有不同:

支付 API/unipay/*)— DaxResult

json
{
  "code": 0,
  "msg": "success",
  "data": { }
}

管理 API/mch/*)— Result

json
{
  "code": 0,
  "message": "success",
  "data": { }
}
字段类型支付 API管理 API说明
codeint业务状态码。0 表示成功,非 0 表示失败
msgstring提示信息(DaxResult 字段名)
messagestring已按 Accept-Language 翻译的可读文案(Result 字段名)
dataobject|null业务数据,失败时通常为 null
signstringRSA 响应签名(仅支付 API)
resTimestring响应时间 UTC(仅支付 API)
reqIdstring请求 ID 回显(仅支付 API)
  • 成功: {"code": 0, "msg": "success", ...}
  • 失败: {"code": 10506, "msg": "通道路由未找到匹配通道", "data": null}

错误文案支持 10 语种国际化(zh-CN / en-US / zh-TW / zh-HK / ja-JP / ko-KR / id-ID / vi-VN / th-TH / ms-MY),由请求头 Accept-Language 决定返回语言。code 是数字分类码,与文案独立 —— 同一文案可能用不同 code 抛出,定位问题时以 code 为准。

HTTP 状态码对照

HTTP 状态码说明
200请求成功,具体业务结果见响应体 code
400请求参数格式错误
401未授权(Accesstoken 缺失或无效)
403禁止访问(权限不足)
404接口不存在
429请求频率超限
500服务器内部错误

错误码字典

错误码由后端常量类定义,按业务域分段。以下取自开源版真实源码:

基础码 CommonCode

状态码常量含义
0SUCCESS_CODE成功
1FAIL_CODE失败(未细分类的通用失败兜底码)

通用错误码 CommonErrorCode(10000-19999)

状态码常量含义
10401AUTHENTICATION_FAIL认证失败(Token 过期 / 无效)
10404SOURCES_NOT_EXIST资源不存在
10405DATA_NOT_EXIST数据不存在
10408NONCE_MISSINGNonce 缺失
10409NONCE_INVALIDNonce 无效或已过期
10410TIMESTAMP_EXPIRED请求时间戳超出允许范围
10415UN_SUPPORTED_OPERATE不支持的操作
10500SYSTEM_ERROR系统错误
10505PARSE_PARAMETERS_ERROR参数解析失败
10506VALIDATE_PARAMETERS_ERROR参数校验失败
10507REPETITIVE_OPERATION_ERROR重复操作
10512DANGER_SQL危险 SQL 异常

支付错误码 PayErrorCode(20000-29999)

状态码常量含义
20000UNCLASSIFIED_ERROR未归类的支付错误
20011CHANNEL_NOT_EXIST支付通道不存在
20012METHOD_NOT_EXIST支付方式不存在
20013STATUS_NOT_EXIST支付状态不存在
20021CHANNEL_NOT_ENABLE支付通道未启用
20022METHOD_NOT_ENABLE支付方式未启用
20023CONFIG_NOT_ENABLE配置未启用
20024CONFIG_ERROR配置错误
20025CONFIG_NOT_EXIST配置不存在
20030UNSUPPORTED_ABILITY不支持该支付能力
20041TRADE_NOT_EXIST交易不存在
20042TRADE_CLOSED交易已关闭
20043TRADE_PROCESSING交易处理中,请勿重复操作
20044TRADE_STATUS_ERROR交易状态错误
20045TRADE_FAIL交易失败
20052VERIFY_SIGN_FAILED验签失败
20060AMOUNT_EXCEED_LIMIT金额超过限额
20080OPERATION_FAIL操作失败
20081OPERATION_PROCESSING操作处理中,请勿重复操作
20082OPERATION_UNSUPPORTED不支持的操作
20091DATA_ERROR数据错误

系统未知错误(越界码)

30000 不在 20000-29999 段内

SYSTEM_UNKNOWN_ERROR 虽定义在 PayErrorCode 类中,但其 code 值 30000 已超出该类的 20000-29999 段,作为「未知异常」单独存在。对接时遇到此码表示发生了未预期的系统级异常,需联系平台排查。

状态码常量含义
30000SYSTEM_UNKNOWN_ERROR未知异常,系统无法处理

用户中心错误码 IamErrorCode(21000-21999)

主要出现在管理端 / 商户端的登录、用户、角色、权限场景。

状态码常量含义
21014USER_EMAIL_ALREADY_EXISTED用户 Email 已存在
21015USER_PHONE_ALREADY_EXISTED用户手机号已存在
21020USER_INFO_NOT_EXISTS用户信息不存在
21022DUPLICATE_PHONE_NUMBER手机号重复(批量导入)
21023DUPLICATE_EMAIL_ADDRESS邮箱重复(批量导入)
21024NONE_PHONE_AND_EMAIL邮箱和手机号均为空
21025ROLE_ALREADY_EXISTED角色已存在
21026ROLE_NOT_EXISTED角色不存在
21027ROLE_ALREADY_USED角色已被使用
21028ROLE_HAS_CHILD / PERMISSION_DB_ERROR含有下级角色 / 权限操作错误
21029PERMISSION_NOT_EXIST没有访问权限
22016USER_PASSWORD_INVALID密码不正确

业务异常机制

后端业务异常通过 BizInfoException 抛出,构造时同时传入数字 code(决定响应 code 字段)与 messageKey(决定 message 文案):

java
// 指定 code + messageKey
throw new BizInfoException(PayErrorCode.TRADE_STATUS_ERROR, "pay.order.status.invalid");
// 仅 messageKey,code 取默认 FAIL_CODE = 1
throw new BizInfoException("pay.route.error.noMatch");
  • code 来自上述常量类,决定错误分类
  • messageKey 对应 i18n/{locale}/ 下资源文件中的文案 key,决定 message 显示内容

code 与 messageKey 的关系

二者独立:同一 messageKey 可被不同 code 抛出(如 pay.route.error.noMatch 多处用 VALIDATE_PARAMETERS_ERROR=10506 抛出,也可能用 FAIL_CODE=1)。对接排错时以响应体的 code 定位错误分类,以 message 理解具体原因。

常见 messageKey 文案

完整 messageKey 字典见后端 daxpay-platform-common/common-i18n/src/main/resources/i18n/{locale}/(按业务模块分文件组织,共数百条)。下表列出对接高频项:

messageKey含义
pay.route.error.noMatch通道路由无匹配
pay.error.methodNotExist不存在的支付方式
error.common.payStatusNotExist支付状态不存在
error.common.tradeStatusNotExist交易状态不存在
error.common.payRefundStatusNotExist退款状态不存在
error.common.normalOrderStatusNotExist订单状态不存在

字段校验错误

支付通道相关的参数校验遵循以下 messageKey 命名规则:

validation.field.{字段名}.{约束}

例如 validation.field.bizOrderNo.notBlank 表示「业务订单号不能为空」。

对应 i18n 文件位置(各语种结构相同,仅 {locale} 目录不同):

  • 简体中文: i18n/zh-CN/validation/field.json
  • 英文: i18n/en-US/validation/field.json
  • 繁体中文 / 日 / 韩 / 东盟四语同结构,位于对应 {locale} 目录下

字段校验失败时,响应 codeCommonErrorCode.VALIDATE_PARAMETERS_ERROR(10506)。

基于 GNU LGPL v3.0 协议开源