加载中…
验证码 captcha

模块说明

captcha 提供注册与手机验证码登录共用的两步验证码流程:

  1. 获取图形令牌对(captcha/token);
  2. 凭令牌对下发短信/邮件验证码(captcha/verification),成功后拿到「验证数据」,原样透传给注册/登录提交接口。

完整流程图与 verification_data 的透传约定见《鉴权与会话》。

鉴权级别:可选(匿名可调,且本接口不依赖令牌)。

接口一览

方法 URL 鉴权 说明
GET /api/captcha 可选 等价于 captcha/token(兼容入口)
GET /api/captcha/token 可选 颁发验证码表单令牌对
POST /api/captcha/verification 可选 下发短信/邮件验证码(限流 5 次/300 秒)

获取令牌对

GET /api/captcha/token
{
  "code": "OK",
  "message": "",
  "data": {
    "captcha_token": "...",
    "storage_captcha_token": "..."
  },
  "errors": {},
  "request_id": "9f2a5c8e1b3d7f40"
}

两个令牌必须成对保存与使用,令牌与图形验证流程关联。

下发验证码

POST /api/captcha/verification
Content-Type: application/json

{
  "type": "sms",                 // sms=短信 / email=邮件
  "account": "13800000000",      // 接收账号(手机号 / 邮箱)
  "captcha_token": "...",
  "storage_captcha_token": "...",
  "check": "no_allow_phone_exist" // 业务策略(见下表)
}
参数 必填 说明
type 是 sms(短信)/ email(邮件)
account 是 手机号或邮箱(与 type 对应)
captcha_token 是 captcha/token 返回
storage_captcha_token 是 captcha/token 返回
check 否 业务策略,默认 no_allow_phone_exist(账号已注册则拒绝,适合注册场景);登录场景请传空串(允许已存在账号)

成功响应

{
  "code": "OK",
  "message": "",
  "data": {
    "account": "13800000000",
    "ontime": 1760000000,
    "code": "服务端生成的验证码校验摘要"
  },
  "errors": {},
  "request_id": "9f2a5c8e1b3d7f40"
}

data 即「验证数据」(verification_data):客户端原样保存、原样透传,不要解析或修改。

失败响应

{
  "code": "BUSINESS_RULE_VIOLATION",
  "message": "该手机号已经存在",
  "data": {},
  "errors": {},
  "request_id": "9f2a5c8e1b3d7f40"
}

常见失败原因:令牌对无效/过期、账号格式错误、账号已存在(check 策略)、短信/邮件通道发送失败。

注意事项

  • 验证码有效期 5 分钟(提交时服务端校验 ontime);
  • 本接口限流 5 次/300 秒(按 IP),客户端应做 60 秒按钮倒计时,避免用户连点触发 429;
  • 下发成功后用户收到的验证码需在注册/登录提交时以独立字段(verification)传入,与 verification_data 配合校验;
  • 收到 429 时读取 Retry-After 展示"请 X 秒后再试"。
添加日期:2026-10-06