校验验证码
1. 接口定位
- 接口名称: 校验验证码
- 所属域: client/account
- 业务目标: 对注册、登录、重置密码场景下提交的短信或邮箱验证码做服务端校验
2. 请求定义
- Method:
POST - Path:
/account/code/verify - Content-Type: 推荐
application/json(服务端按 JSON body 解析,当前未对该请求头做强校验) - operationID: 必填,请通过 Header
operationID传入 - 鉴权: 无
- 幂等性: 非严格幂等(错误校验会累计尝试次数;成功校验本身不会直接消费验证码)
3. 请求参数
Header 参数
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
| operationID | 是 | string | 链路追踪 ID |
| token | 否 | string | 本接口无需 token |
Body 参数
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
| areaCode | 条件必填 | string | 手机区号;手机号校验方案时必填,如 +86 |
| phoneNumber | 条件必填 | string | 手机号;手机号校验方案时必填 |
| 条件必填 | string | 邮箱;邮箱校验方案时必填 | |
| verifyCode | 是 | string | 待校验的验证码 |
字段约束
verifyCode必填。email为空时,areaCode与phoneNumber必须同时提供。email非空时,按邮箱格式校验。- 若同时传
phoneNumber与email,服务端优先按手机号账户校验。 - 对手机号方案,建议
areaCode与发送验证码时保持一致,推荐显式带+;本接口不会像发送验证码或登录那样自动补齐区号。
4. 响应结构
通用响应包裹
| 字段 | 类型 | 说明 |
|---|---|---|
| errCode | int | 错误码,0 表示成功 |
| errMsg | string | 错误简述 |
| errDlt | string | 错误详情 |
| data | any | 业务数据 |
data 字段
- 本接口成功时返回空对象(无业务字段)。
5. 业务规则
- 服务端按手机号组合键或邮箱定位最近一次验证码记录。
- 默认验证码有效期为
300秒。 - 默认单条验证码最多允许校验
5次;输错会累计次数。 - 验证码已被其他业务接口消费后,不允许再次使用。
- 本接口成功只代表当前验证码可通过校验,不会在此接口内直接删除验证码。
- 真正消费验证码的业务入口在注册、验证码登录、重置密码等后续接口中。
6. 错误码与失败场景
| 错误码 | 场景 | 典型报错 |
|---|---|---|
| 1001 | verifyCode 为空 | VerifyCode is empty |
| 1001 | 手机号方案缺少区号或号码 | AreaCode is empty / PhoneNumber is empty |
| 1001 | 邮箱格式非法 | Email is invalid |
| 20006 | 验证码错误 | VerifyCodeNotMatch |
| 20007 | 验证码不存在或已过期 | VerifyCodeExpired |
| 20008 | 验证码尝试次数达到上限 | VerifyCodeMaxCount |
| 20009 | 验证码已被使用,禁止重复使用 | VerifyCodeUsed |
7. 示例
fetch 请求示例
javascript
fetch("http://localhost:10008/account/code/verify", {
method: "POST",
headers: {
operationID: "550e8400-e29b-41d4-a716-446655440001",
"Content-Type": "application/json",
},
body: JSON.stringify({
areaCode: "+86",
phoneNumber: "13800138000",
verifyCode: "123456",
}),
})
.then((res) => res.json())
.then((data) => console.log(data));请求示例(JSON)
json
{
"areaCode": "+86",
"phoneNumber": "13800138000",
"verifyCode": "123456"
}成功响应示例
json
{
"errCode": 0,
"errMsg": "",
"errDlt": "",
"data": {}
}失败响应示例
json
{
"errCode": 20008,
"errMsg": "VerifyCodeMaxCount",
"errDlt": ""
}8. 时序流程
- 解析请求并校验手机号、邮箱与验证码字段。
- 按手机号或邮箱定位最近一次验证码记录。
- 判断验证码是否存在、是否过期、是否已被使用。
- 检查当前验证码累计尝试次数是否超限。
- 对比验证码内容,错误时递增尝试次数。
- 校验通过后返回统一成功响应。
9. 变更记录
- 2026-03-31: 首版发布,补齐了有效期、尝试次数和重复使用限制。