错误码与异常处理规范
概述
本文档定义了井云服务中心后端系统的错误码规范、异常处理机制和错误响应格式,确保前后端能够统一处理各种错误情况。
错误码设计原则
分段规则
错误码采用 5 位数字格式,按照服务模块进行分段:
[服务码][错误类型][具体错误]
2位 1位 2位
服务码分配
10:通用错误(系统级)11:认证服务(Auth)12:用户服务(User)13:智能体服务(Agent)14:租户服务(Tenant)15:支付服务(Payment)16:集成服务(Integration)17: 网关服务(Gateway)18:定时任务服务(Cron)
错误类型
1:参数错误(客户端错误)2:权限错误(授权失败)3:业务逻辑错误(业务规则违反)4:系统错误(服务端错误)5:第三方错误(外部依赖错误)
具体错误码定义
通用错误(10xxx)
| 错误码 | 错误信息 | HTTP状态码 | 说明 |
|---|---|---|---|
| 10101 | 参数错误 | 400 | 请求参数格式或内容错误 |
| 10102 | 缺少必需参数 | 400 | 缺少必需的请求参数 |
| 10103 | 参数类型错误 | 400 | 参数类型不匹配 |
| 10104 | 参数值超出范围 | 400 | 参数值不在允许范围内 |
| 10201 | 未授权访问 | 401 | 缺少有效的认证信息 |
| 10202 | Token 已过期 | 401 | JWT Token 已过期 |
| 10203 | Token 无效 | 401 | JWT Token 格式错误或签名无效 |
| 10204 | 权限不足 | 403 | 用户权限不足,无法访问资源 |
| 10301 | 资源不存在 | 404 | 请求的资源不存在 |
| 10302 | 资源已存在 | 409 | 资源已存在,无法重复创建 |
| 10303 | 操作不允许 | 403 | 当前状态下不允许此操作 |
| 10401 | 系统内部错误 | 500 | 服务器内部错误 |
| 10402 | 数据库连接失败 | 500 | 数据库连接异常 |
| 10403 | 缓存服务异常 | 500 | Redis 连接异常 |
| 10404 | 消息队列异常 | 500 | RabbitMQ 连接异常 |
| 10501 | 第三方服务不可用 | 503 | 外部服务暂时不可用 |
| 10502 | 第三方服务超时 | 504 | 外部服务响应超时 |
认证服务错误(11xxx)
| 错误码 | 错误信息 | HTTP状态码 | 说明 |
|---|---|---|---|
| 11101 | 手机号格式错误 | 400 | 手机号格式不正确 |
| 11102 | 验证码错误 | 400 | 短信验证码错误 |
| 11103 | 验证码已过期 | 400 | 短信验证码已过期 |
| 11104 | 验证码发送频率过高 | 429 | 短信验证码发送过于频繁 |
| 11201 | 微信登录失败 | 401 | 微信授权失败 |
| 11202 | 微信用户信息获取失败 | 401 | 无法获取微信用户信息 |
| 11301 | 用户已被禁用 | 403 | 用户账 号已被禁用 |
| 11302 | 用户未注册 | 404 | 用户不存在 |
用户服务错误(12xxx)
| 错误码 | 错误信息 | HTTP状态码 | 说明 |
|---|---|---|---|
| 12101 | 用户信息不完整 | 400 | 用户缺少必要信息 |
| 12102 | 分销码无效 | 400 | 分销邀请码无效 |
| 12201 | 无权限访问用户信息 | 403 | 无权限访问其他用户信息 |
| 12301 | 点数余额不足 | 400 | 用户点数余额不足 |
| 12302 | 点数已过期 | 400 | 尝试使用已过期的点数 |
| 12303 | 点数消费失败 | 500 | 点数扣减操作失败 |
| 12401 | 分销等级不满足条件 | 400 | 当前分销等级不满足操作条件 |
| 12402 | 佣金余额不足 | 400 | 佣金余额不足,无法提现 |
智能体服务错误(13xxx)
| 错误码 | 错误信息 | HTTP状态码 | 说明 |
|---|---|---|---|
| 13101 | 智能体名称重复 | 409 | 同一租户下智能体名称已存在 |
| 13102 | 智能体类型不支持 | 400 | 不支持的智能体类型 |
| 13103 | 智能体配置错误 | 400 | 智能体配置格式错误 |
| 13201 | 无权限访问智能体 | 403 | 无权限访问该智能体 |
| 13301 | 智能体不存在 | 404 | 指定的智能体不存在 |
| 13302 | 智能体分类不存在 | 404 | 指定的分类不存在 |
| 13401 | 精选分类已存在 | 409 | 租户下已存在精选分类 |
| 13501 | 平台同步失败 | 500 | 与 AI 平台同步失败 |
| 13502 | 平台 API 调用失败 | 502 | AI 平台 API 调用失败 |
租户服务错误(14xxx)
| 错误码 | 错误信息 | HTTP状态码 | 说明 |
|---|---|---|---|
| 14101 | 租户名称重复 | 409 | 租户名称已存在 |
| 14102 | 二级域名重复 | 409 | 二级域名已被占用 |
| 14103 | 租户域名格式错误 | 400 | 二级域名格式不正确 |
| 14201 | 无权限访问租户 | 403 | 无权限访问该租户 |
| 14301 | 租户不存在 | 404 | 指定的租户不存在 |
| 14302 | 版本不存在 | 404 | 指定的版本不存在 |
| 14303 | 租户已过期 | 403 | 租户已过期,无法使用 |
| 14401 | 菜单层级过深 | 400 | 菜单层级超过最大限制 |
| 14402 | 菜单名称重复 | 409 | 同一级别下菜单名称重复 |
支付服务错误(15xxx)
| 错误码 | 错误信息 | HTTP状态码 | 说明 |
|---|---|---|---|
| 15101 | 订单不存在 | 404 | 指定的订单不存在 |
| 15102 | 订单状态错误 | 400 | 订单状态不允许当前操作 |
| 15103 | 订单已过期 | 410 | 订单已过期,无法支付 |
| 15104 | 订单金额错误 | 400 | 订单金额与实际不符 |
| 15201 | 支付失败 | 500 | 支付处理失败 |
| 15202 | 支付超时 | 504 | 支付处理超时 |
| 15301 | 版本购买失败 | 500 | 版本购买流程失败 |
| 15302 | 租户创建失败 | 500 | 支付成功后租户创建失败 |
集成服务错误(16xxx)
| 错误码 | 错误信息 | HTTP状态码 | 说明 |
|---|---|---|---|
| 16101 | 文件上传失败 | 500 | 文件上传到存储服务失败 |
| 16102 | 文件格式不支持 | 400 | 不支持的文件格式 |
| 16103 | 文件大小超限 | 400 | 文件大小超过限制 |
| 16201 | 短信发送失败 | 500 | 短信发送失败 |
| 16202 | 短信余额不足 | 400 | 短信服务余额不足 |
| 16301 |