EveryInfra

atbCAPTCHA

atbCAPTCHAatbCAPTCHA (AISecurius)无感打分 / 滑块拼图 / 旋转 / 点选文字(顺序点选)/ 刮刮卡默认是一个 300×200px 的嵌入式验证框(embed),也可能是最小只有 40px 高的一键条(oneclick)、行内浮层(inline)或弹窗(popup)。低风险用户直接被服务端放行、根本不出题;高风险才出滑动拼图、把图片转正、刮开涂层、或按提示顺序点击文字。

也叫 AISecurius(atbCAPTCHA 最常见的部署方名称)。调用时 type 一律传 atb_captcha

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

接口规格

项目
typeatb_captcha
必填参数website_urlapp_idapi_server
可选参数
返回一个 token 字符串solution.token
怎么用这个解填回目标站的 atbCAPTCHA token(⚠ 结尾冒号是值的一部分)
价格$2.22 / 1K 次 —— 按成功计费,没解出来退款
厂商文档atbCAPTCHA (AISecurius) 官方文档

参数去页面哪里取

下面全部是可以直接照做的定位方法 —— DOM 属性名、JS 全局变量名、script 上的 query 参数。

三个参数全部能从页面上直接抄,而且都在同一个函数调用里。

先确认是 atbCAPTCHA<script> 标签长这样(官方示例自带 id,非常好认):

<script src="https://cdn.aisecurius.com/ctu-group/captcha-ui/v5/index.js"
        crossorigin="anonymous" id="as-captcha-script"></script>

初始化调用是 as.Captcha(容器DOM, {配置})

全文搜 `as.Captcha(`,两个参数就在第二个实参里:

var myCaptcha = as.Captcha(document.getElementById('demo'), {
  appId: 'your appId',                        // → 填我们的 app_id
  apiServer: 'https://cap.aisecurius.com',    // → 填我们的 api_server
  success: function (token) { /* ... */ }
})
  • appId → 我们的 `app_id`
  • apiServer → 我们的 `api_server`必须带 `https://` 前缀整串照抄

⚠ `apiServer` 是逐客户独立的域名,千万不要默认写死 `https://cap.aisecurius.com`。 SaaS 默认确实是它(我实测 https://cap.aisecurius.com/api/tokenVerify 活着、返回 {"success":false,...,"code":"1004"}),但私有化/独立部署的客户会换成自己的域名。厂商文档原话是「在控制台左上角获取,必须填写完整包括 https://」——所以一定从目标页面抄,不要从文档抄。

取不到 JS 配置时的兜底:Network 面板看组件初始化后打出的第一个 /api/... 请求,它的 host 就是 apiServer,query 或 body 里带着 appId

⚠ 如果目标页面是中国大陆站点,脚本会换成 https://cdn.dingxiang-inc.com/ctu-group/captcha-ui/v5/index.js、id 变成 dx-captcha-script、调用变成 _dx.Captcha(el, {...}) ——但 `appId` / `apiServer` 两个键名一字不差,取法完全一样,只是 apiServer 会是 https://cap.dingxiang-inc.com 或客户自有域名。

`website_url` 填验证码所在页的完整地址(含路径),不是站点首页。

调用示例

一个端点解全部验证码类型 —— 换一种验证码只改 type 这一个字段。

请求
curl -X POST https://api.everyinfra.com/api/v1/captcha \  -H "Authorization: Bearer omg_你的KEY" \  -H "Content-Type: application/json" \  -d '{"type":"atb_captcha","website_url":"<website_url>","app_id":"<app_id>","api_server":"<api_server>"}'
响应
{  "solution": {    "token": "…"  },  "billing": { "charged": true, "credits": 160 }}

怎么确认目标站用的就是它

设备指纹 + 行为特征 + 访问频率 + 地理位置多因子联合判定:主组件之外还会加载 `constid-js`(设备标识)与 `ctu-greenseer`(环境采集)两个同源脚本。通过后前端拿到一个一次性 token(有效期 2 分钟),业务后端用 appId + appSecret 调 `<apiServer>/api/tokenVerify` 校验,返回 `success`/`msg`/`ip`/`code`。

容易搞混的

最容易和顶象国内版搞混——它其实是同一套前端,只是命名空间从 as 换成 _dx、CDN 域名换成 cdn.dingxiang-inc.com、script 的 id 从 as-captcha-script 换成 dx-captcha-script。参数键名一模一样,所以抄参数时不会出错,但判断「这是哪个验证码」时容易只认 aisecurius 域名而漏掉 dingxiang 域名的同款。另外「atb」不是缩写,就是产品名本身,别去猜它代表什么词。

常见部署场景

已知的坑

返回的 token 结尾如果有一个冒号,那是值的一部分,不要 strip。 token 的格式是 <token>:<constId>(厂商文档原话:「本次验证的 token:constId」),设备指纹段为空时就只剩一个尾冒号。去掉它目标站会拒绝。

token 以 `sl` 开头 = 降级 token,官方定义是「前端网络不通生成的降级 token」。看到 sl 开头先回头查 apiServer 是不是抄错了或抄漏了 https://

token 一次性、有效期只有 2 分钟,拿到必须立刻提交,不能缓存复用。

`apiServer` 在官方参数表里被归进「非必填」的高级配置,但三个语言的示例代码全都传了它、注释还写着「必须填写完整」 ——文档自相矛盾,实践上一律当必填处理。

不要去找 `appSecret` ——它只存在于目标站的服务端,页面上不会有,也不是我们需要的参数。同理别把 uid(业务方自己的用户标识)当必填。

页面上另外两个同源脚本 .../ctu-group/constid-js/index.js.../ctu-group/ctu-greenseer/greenseer.js 是设备指纹与环境采集,看到它们说明你找对地方了,但它们本身不携带 appId/apiServer

「atbCAPTCHA 与顶象是同一套前端引擎」是代码层面的观察,双方官网都没有公开说明这层关系,采信时请知道证据边界。可核验的事实:两个 CDN 的路径完全相同(/ctu-group/captcha-ui/v5/index.js);我实测下载两个 bundle(279KB / 271KB),两份里都同时含有 `"as"` 与 `"_dx"` 两个命名空间字符串,以及 _dxCaptchaConfig/ctu-group/ctu-greenseer/clickwordjigsaw 等相同内部标识;两边的服务端错误码表逐条相同(1001 appId 错 / 1002 签名错 / 1003 token 无效或过期 / 1004 参数错 / 1005 IP 不一致)、SDK 方法名相同(verifyToken)、token 有效期同为 2 分钟、降级 token 同为 sl 前缀;SaaS 默认域名对称(cap.aisecurius.com / cap.dingxiang-inc.com),我实测两个 /api/tokenVerify 返回的 JSON 形状逐字段一致。

常见于国内厂商 AISecurius 的部署

常见问题

atbCAPTCHA 要传哪些参数?

必填 website_url、app_id、api_server,没有可选参数。请求里 type 传 atb_captcha。

解出来的东西怎么用?

返回一个 token 字符串,取 solution.token。填回目标站的 atbCAPTCHA token(⚠ 结尾冒号是值的一部分)

apiServer 要去页面的哪里找?

重点找 apiServer、app_id、cap.dingxiang-inc.com。本页「参数去页面哪里取」一节写了全部位置与取法,含可直接粘进控制台的一行命令。

怎么确认目标站用的就是 atbCAPTCHA?

最容易和顶象国内版搞混——它其实是同一套前端,只是命名空间从 as 换成 _dx、CDN 域名换成 cdn.dingxiang-inc.com、script 的 id 从 as-captcha-script 换成 dx-captcha-script。参数键名一模一样,所以抄参数时不会出错,但判断「这是哪个验证码」时容易只认 aisecurius 域名而漏掉 dingxiang 域名的同款。另外「atb」不是缩写,就是产品名本身,别去猜它代表什么词。

有什么容易踩的坑?

返回的 token 结尾如果有一个冒号,那是值的一部分,不要 strip。 token 的格式是 <token>:<constId>(厂商文档原话:「本次验证的 token:constId」),设备指纹段为空时就只剩一个尾冒号。去掉它目标站会拒绝。

多少钱一次,失败扣不扣?

$2.22 / 1K 次。按成功计费 —— 没解出来一律退款,所以失败不花钱。账单按次记,标价按每千次是为了让量级读得出来。

开始接入

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