自研图形验证码

自研图形验证码(字符图片 / 算术),Pillow 本地绘制、无第三方依赖,答案一次性校验。

/api/captcha_self/

服务说明

自研图形验证码不依赖任何第三方服务,由平台用 Pillow 在本地绘制字符图片或算术题,适合对数据外发敏感、或希望零成本自建验证码的场景。

接入为两步:先调用生成接口拿到 captcha_id 与 base64 图片(带有效期),用户作答后调用校验接口提交答案。答案是「一次性」的——无论校验成功还是失败都会立即失效,失败后需重新生成再试。服务端只保存答案的 HMAC-SHA256 摘要,不落明文。

该线路为开放接口,无需项目签名;服务端已按客户端 IP 限流(生成 60 次/分、校验 120 次/分),并在响应上禁用缓存,避免图片被浏览器 / 代理复用。

同一服务下另有「滑块验证」与「汉字点选」线路:前者拖动拼图块对齐缺口,后者按提示依次点击 2-4 个汉字;两者的答案坐标都不下发,只存服务端用于校验。

三条线路怎么选:表单防刷优先字符 / 算术(生成快、体积小);想要拖动体验用滑块;面向中文用户、希望更直观可以用汉字点选。

响应格式

所有接口返回同一个 JSON 信封,业务数据都在 data 里:

{
  "code": 10000,
  "msg": "成功",
  "data": { ... }
}
  • code:业务状态码,10000 表示成功;其余为各类错误,完整清单见「错误码」页。
  • msg:给人看的提示文案,可直接展示给终端用户,但不要用它做逻辑判断。
  • data:业务数据;出错时通常为 null。各接口 data 的具体字段见该接口的「响应说明」。

判断成功与否请看 code,不要依赖 HTTP 状态码。 查看完整错误码

自研验证码

SpiderServices/Captcha 自研生成引擎(Pillow 绘制) 开放 · 免签名

两步接入:先 generate 拿 captcha_id 与图片(base64),用户作答后 POST verify 校验;答案一次性,校验后无论对错立即失效,需配合前端换新图。

GET /api/captcha_self/generate 累计调用 1 次

生成验证码

生成一张验证码,返回 captcha_id、base64 图片与有效期。

选填:char=字符图片(数字+大写字母);arithmetic=算术加减法

选填:仅 kind=char 生效,取值 4-6(默认 4)

  • 请求方式 GET,参数放 query string;公开接口,无需项目签名。
  • captcha_id 必须与答案一起回传给 verify;image 可直接用作 <img src>。
  • 响应头带 Cache-Control: no-store,图片不会被浏览器 / 代理缓存复用。
  • 同一 IP 每分钟最多生成 60 张,超出返回 20040。
响应说明 外层统一格式
字段 类型 说明
captcha_id string 验证码ID,校验时回传
kind string 类型:char/arithmetic
image string base64 图片(data URI)
expire_in int 有效期(秒)
返回示例
{"captcha_id": "9f1c1f14-6b0a-4a3e-9c31-2c9b6f0d1a55", "kind": "char", "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...", "expire_in": 300}
POST /api/captcha_self/verify 累计调用 0 次

校验验证码

提交用户答案校验,一次性消费(校验后立即失效)。

必填:生成接口返回的 captcha_id(UUID)

必填:用户填写的答案(字符不区分大小写;算术填计算结果)

  • 请求体为 application/x-www-form-urlencoded 表单;开放接口,无需项目签名。
  • 校验通过:code=10000 且 data.passed=true;
  • 未通过(答案错误 / 已过期 / 已使用 / 不存在):code=20003 且 data.passed=false,原因见 msg;
  • captcha_id 非 UUID 时返回 code=20002,参数缺失时返回 code=20001。
  • 答案一次性:同一条验证码重复提交只会成功一次,失败后需重新调用 generate。
  • 同一 IP 每分钟最多校验 120 次,超出返回 20040;答案用恒定时间比较,库中只存摘要。
响应说明 外层统一格式
字段 类型 说明
passed bool 是否校验通过
返回示例
{"passed": true}
小影API · 通用 API 聚合服务