阿里云验证码
阿里云验证码 是 Alibaba Cloud 的弹出式 / 嵌入式行为验证 —— 官方列出五种形态:无痕验证、一点即过、滑块验证、拼图验证、图像复原。一条「点击按钮开始智能验证」的横条,或一个从左拖到右的滑块。多数正常用户点一下就过;风险升高时才换成拼图、图像复原这类需要动手的题。样式高度统一,滑块默认 360×40。
接口规格
| 项目 | 值 |
|---|---|
| type | alibaba |
| 必填参数 | website_url |
| 可选参数 | 无 |
| 返回 | 一个 token 字符串(solution.token) |
| 怎么用这个解 | ⚠ 一个 JSON 字符串(需二次 parse),内含 sceneId / certifyId / deviceToken / data |
| 价格 | $1.25 / 千次 —— 按成功计费,没解出来退款 |
| 厂商或项目资料 | 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 一次才能拿到里面的字段
参考资料
下列资料用于核对验证码厂商、题型和页面术语,不表示相关厂商对 EveryInfra 的授权或背书。 EverySolve 的参数、返回字段、可用状态和计费仍以本页接口契约及公开类型目录为准。
- Alibaba Cloud 厂商或项目资料
- help.aliyun.com/zh/captcha/captcha2-0/user-guide/client-access
- help.aliyun.com/zh/captcha/captcha2-0/user-guide/server-access
- help.aliyun.com/zh/captcha/captcha1-0/user-guide/integration-methods-for-intelligent-verification
- help.aliyun.com/zh/captcha/captcha2-0/product-overview/how-to-upgrade-captcha-1-0-to-2-0
- help.aliyun.com/zh/captcha/captcha2-0/product-overview/basic-concepts
常见问题
阿里云验证码 要传哪些参数?
必填 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 / 千次。按成功计费 —— 没解出来一律退款,所以失败不花钱。账单按次记,标价按每千次是为了让量级读得出来。