阿里云验证码
阿里云验证码 是 Alibaba Cloud 的弹出式 / 嵌入式行为验证 —— 官方列出五种形态:无痕验证、一点即过、滑块验证、拼图验证、图像复原。一条「点击按钮开始智能验证」的横条,或一个从左拖到右的滑块。多数正常用户点一下就过;风险升高时才换成拼图、图像复原这类需要动手的题。样式高度统一,滑块默认 360×40。
接口规格
| 项目 | 值 |
|---|---|
| type | alibaba |
| 必填参数 | website_url |
| 可选参数 | 无 |
| 返回 | 一个 token 字符串(solution.token) |
| 怎么用这个解 | ⚠ 一个 **JSON 字符串**(需二次 parse),内含 sceneId / certifyId / deviceToken / data |
| 价格 | $1.25 / 1K 次 —— 按成功计费,没解出来退款 |
| 厂商文档 | Alibaba Cloud 官方文档 |
参数去页面哪里取
下面全部是可以直接照做的定位方法 —— DOM 属性名、JS 全局变量名、script 上的 query 参数。
我们的接口只必填 website_url(出现验证的页面地址)—— 但你得先确认它真是阿里云验证码、且分清 2.0 还是 1.0,两代的取值完全不同名。直接粘控制台:
// —— 2.0:全局配置 + 场景 ID ——
[ window.AliyunCaptchaConfig, // {region:'cn', prefix:'xxxx'}
window.AliyunCaptchaConfig?.prefix, // 身份标识(1.0 里叫 appkey)
document.documentElement.innerHTML.match(/SceneId["'\s:=]{1,4}["']([A-Za-z0-9]{4,16})["']/), // 场景 ID(1.0 里叫 scene)
document.querySelector('#captcha-element'), // 默认容器 id
[...document.scripts].map(s=>s.src).filter(s=>/AliyunCaptcha\.js|captcha-frontend/i.test(s)) ]
// —— 1.0:全局 AWSC + appkey/scene ——
[ typeof window.AWSC,
document.documentElement.innerHTML.match(/appkey["'\s:=]{1,4}["']([\w-]+)["']/),
document.documentElement.innerHTML.match(/\bscene["'\s:=]{1,4}["']([\w-]+)["']/),
[...document.scripts].map(s=>s.src).filter(s=>/g\.alicdn\.com\/AWSC/.test(s)) ]拿到解之后:我们返回的 token 是一个 JSON 字符串,不是裸 token,先 JSON.parse(token) 一次拿到 sceneId / certifyId / deviceToken / data 四件套,再按目标站要的字段名填回去 —— 绝大多数 2.0 站点就是把整串当 captchaVerifyParam 提交给自己的后端。
调用示例
一个端点解全部验证码类型 —— 换一种验证码只改 type 这一个字段。
curl -X POST https://api.everyinfra.com/api/v1/captcha \ -H "Authorization: Bearer omg_你的KEY" \ -H "Content-Type: application/json" \ -d '{"type":"alibaba","website_url":"<website_url>"}'
{ "solution": { "token": "…" }, "billing": { "charged": true, "credits": 90 }}
怎么确认目标站用的就是它
**2.0**:先声明 `window.AliyunCaptchaConfig = { region, prefix }`(`region` 取 `cn` 或 `sgp`,`prefix` 是控制台概览页的身份标识),再引 `https://o.alicdn.com/captcha-frontend/aliyunCaptcha/AliyunCaptcha.js`,然后 `window.initAliyunCaptcha({ SceneId, mode, element, button, captchaVerifyCallback, onBizResultCallback, getInstance })`。验证通过后回调拿到一个 **`captchaVerifyParam` 字符串**,原样交给业务服务端,服务端调 `VerifyIntelligentCaptcha` 核验;`captchaVerifyParam` 里带 `sceneId`(场景 ID)、`certifyId`(单次请求唯一标识)等字段,服务端不得改动一个字符,改了就报 `F002`/`F003`。 **1.0**:`<script src="https://g.alicdn.com/AWSC/AWSC/awsc.js">` + `AWSC.use("ic", (state, module) => { window.ic = module.init({ appkey, scene, renderTo }) })`,容器是 `<div id="sc">`。`success` 回调给 `data.sessionId` / `data.sig` / `data.token` 三件套,服务端拿去验签,返回 `100` 通过、`900` 失败;验签参数 10 分钟有效、只能用一次。
容易搞混的
与「阿里云 5 秒盾 / Alix5sec」不是一回事 —— 那个是整页拦截、交付的是通行 Cookie;这个是表单里的行为验证、交付的是 token。也别和淘宝/天猫自家的滑动验证混,那是另一套内部风控,不走阿里云 Captcha 的公开接入。
常见部署场景
- 国内银行、券商、保险的网银与开户流程
- 政务、教育、医疗预约类站点的注册登录与短信下发
- 企业 SaaS / 电商后台的登录、改密、抽奖秒杀、表单防刷
- 1.0 时代的 `AWSC` 滑动验证在老站点里仍大量存活,两代并行
已知的坑
返回值需要 JSON.parse 一次才能拿到里面的字段,当裸 token 直接填必然失败。
客户端 region 与服务端 endpoint 必须一致(cn / sgp),不一致会直接报错 —— 这条最容易在新加坡站上翻车。
1.0 官方文档里的测试参数(appkey: "CF_APP_1"、scene: "nvc_register",以及 test: module.TEST_PASS 之类)上线前必须删掉;忘了删会让 token 里带上 CF_APP_1 导致验签失败。
1.0 的 sessionId/sig/token 三件套 10 分钟有效、只能用一次,重放会被判失败。
initAliyunCaptcha 不支持重复调用(初始化参数变化等必要场景除外),页面上反复触发要走实例的方法而不是重新 init。
2.0 拼图验证码不要用 CSS 覆写尺寸,官方明说会导致验证异常;滑块宽度小于 320px 会被强制按 320 处理。
与「阿里云 5 秒盾 / Alix5sec」不是一回事 —— 那个交付的是 Cookie,这个交付的是表单 token,目前我们不做那一个
返回值需要 JSON.parse 一次才能拿到里面的字段
常见问题
阿里云验证码 要传哪些参数?
必填 website_url,没有可选参数。请求里 type 传 alibaba。
解出来的东西怎么用?
返回一个 token 字符串,取 solution.token。⚠ 一个 JSON 字符串(需二次 parse),内含 sceneId / certifyId / deviceToken / data
captchaVerifyParam 要去页面的哪里找?
重点找 captchaVerifyParam、deviceToken、certifyId。本页「参数去页面哪里取」一节写了全部位置与取法,含可直接粘进控制台的一行命令。
怎么确认目标站用的就是 阿里云验证码?
与「阿里云 5 秒盾 / Alix5sec」不是一回事 —— 那个是整页拦截、交付的是通行 Cookie;这个是表单里的行为验证、交付的是 token。也别和淘宝/天猫自家的滑动验证混,那是另一套内部风控,不走阿里云 Captcha 的公开接入。
有什么容易踩的坑?
返回值需要 JSON.parse 一次才能拿到里面的字段,当裸 token 直接填必然失败。
多少钱一次,失败扣不扣?
$1.25 / 1K 次。按成功计费 —— 没解出来一律退款,所以失败不花钱。账单按次记,标价按每千次是为了让量级读得出来。