EveryInfra

阿里云验证码

阿里云验证码Alibaba Cloud弹出式 / 嵌入式行为验证 —— 官方列出五种形态:无痕验证、一点即过、滑块验证、拼图验证、图像复原一条「点击按钮开始智能验证」的横条,或一个从左拖到右的滑块。多数正常用户点一下就过;风险升高时才换成拼图、图像复原这类需要动手的题。样式高度统一,滑块默认 360×40。

正在查询可用性…$1.25 / 1K 次按成功计费,失败退款

接口规格

项目
typealibaba
必填参数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 的公开接入。

去看 5 秒盾 那一条 →

常见部署场景

已知的坑

返回值需要 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 次。按成功计费 —— 没解出来一律退款,所以失败不花钱。账单按次记,标价按每千次是为了让量级读得出来。

开始接入

一个端点覆盖全部验证码类型,按成功计费,失败与空结果一律退款。