reCAPTCHA v2 Enterprise
reCAPTCHA v2 Enterprise 是 Google 的勾选框。经典的「我不是机器人」勾选框。点一下之后,风险高就弹出九宫格图片题(选出所有红绿灯 / 人行横道 / 公交车之类),过了才打勾。也有配成 invisible 的变体——那种没有可见勾选框,只有右下角徽标,风险高时直接弹图片题。页面观感与普通 reCAPTCHA v2 一模一样。
接口规格
| 项目 | 值 |
|---|---|
| type | recaptcha_v2_enterprise |
| 必填参数 | website_urlwebsite_key |
| 可选参数 | enterprise_payloadpage_actioninvisibleapi_domain |
| 返回 | 一个 token 字符串(solution.gRecaptchaResponse) |
| 怎么用这个解 | 填回目标站表单的 `g-recaptcha-response` 字段 |
| 价格 | $1.53 / 1K 次 —— 按成功计费,没解出来退款 |
| 厂商文档 | Google 官方文档 |
参数去页面哪里取
下面全部是可以直接照做的定位方法 —— DOM 属性名、JS 全局变量名、script 上的 query 参数。
必填 website_url + website_key,可选 page_action / invisible / enterprise_payload / api_domain。
website_key(sitekey)——两种渲染写法,位置不同
1. 自动渲染(最常见):带 g-recaptcha class 的容器元素上:
<div class="g-recaptcha" data-sitekey="<sitekey>" data-action="LOGIN"></div>
→ data-sitekey 属性。一行取:
document.querySelector('.g-recaptcha').dataset.sitekey
2. 显式渲染:脚本带 ?onload=<回调名>&render=explicit,key 在 render 的参数对象里:
grecaptcha.enterprise.render('html_element', {
'sitekey': '<sitekey>',
'action': 'LOGIN',
'theme': 'light',
'callback': verifyCallback
});→ DevTools 全局搜 enterprise.render 就能看到字面量。
3. 兜底:勾选框 iframe 的 src 里 k= 参数就是 sitekey(见下条)。
怎么确认它是 Enterprise 而不是普通 v2——三条判据,命中一条即可
- script 路径是 https://www.google.com/recaptcha/**enterprise.js**(普通 v2 是 /recaptcha/api.js);
- 全局对象存在:控制台敲 typeof grecaptcha.enterprise 返回 "object";页面代码调的是 grecaptcha.enterprise.render/getResponse/reset;
- iframe 路径(最直观):勾选框那个 iframe 是 /recaptcha/**enterprise**/anchor?ar=1&k=<sitekey>&co=<base64 origin>&hl=…,弹出的图片挑战层是 /recaptcha/**enterprise**/bframe。普通 v2 对应 /recaptcha/api2/anchor 与 /recaptcha/api2/bframe。DevTools Network 过滤 anchor 一眼分辨。
invisible
满足任一条就把 invisible 传 true:iframe URL 里带 size=invisible;render 参数里 'size': 'invisible';页面上根本没有可见勾选框、只有右下角徽标。
page_action
v2 Enterprise 的 action 是可选的——页面写了就抄,没写就别传。位置:.g-recaptcha 元素的 data-action 属性,或 grecaptcha.enterprise.render() 参数对象里的 action 键。规则同 Enterprise 全线:只能含字母数字、斜杠、下划线,不区分大小写,Google 会在 assessment 里核对。
enterprise_payload
grecaptcha.enterprise.render() / execute() 的参数对象里,除了 sitekey / action / theme / size / callback 这些标准键之外还多出来的键,原样打包给我们。实践中最常见的是 s(页面上有时以 data-s 属性出现)。⚠ 这个值经常是目标站后端逐次下发的一次性值,不是常量——每次求解前现取,别缓存复用。没有额外键就不要传这个参数。
解回来怎么用
我们交付的是 token。落点两选一:填进表单里名为 g-recaptcha-response 的隐藏字段随表单 POST(Google 官方描述的默认路径),或者直接调页面 data-callback / render({callback}) 指定的那个回调函数并把 token 作为第一个实参传进去。显式渲染了多个 widget 时,grecaptcha.enterprise.getResponse(widgetId) 要带对 widget id,不带默认取第一个。
api_domain
看脚本 host 是 www.google.com 还是 www.recaptcha.net。
调用示例
一个端点解全部验证码类型 —— 换一种验证码只改 type 这一个字段。
curl -X POST https://api.everyinfra.com/api/v1/captcha \ -H "Authorization: Bearer omg_你的KEY" \ -H "Content-Type: application/json" \ -d '{"type":"recaptcha_v2_enterprise","website_url":"<website_url>","website_key":"<website_key>"}'
{ "solution": { "gRecaptchaResponse": "…" }, "billing": { "charged": true, "credits": 110 }}
怎么确认目标站用的就是它
Google 官方的 CHECKBOX key 类型:显示「我不是机器人」勾选框,勾选后可能出图形挑战;挑战难度由建 key 时选的 challenge security 档位决定。勾选(或通过挑战)时执行一次 execution,生成 token 落进表单的 `g-recaptcha-response` 字段;站点后端再拿它去 Google Cloud 创建 assessment。和普通 v2 的差别不在交互形态,而在客户端走 `enterprise.js` / `/recaptcha/enterprise/*` 端点、后端走 Enterprise assessment API,因而能拿到 reason code 和 action 维度的风控数据。
容易搞混的
和 recaptcha_v2(普通版)只差端点:enterprise.js / grecaptcha.enterprise / /recaptcha/enterprise/anchor 命中就是本类型,否则按 recaptcha_v2 走。⚠ 同样注意反向不成立——从 Classic 迁到 Google Cloud 的 v2 key,页面代码可以一行不改仍跑 api.js(Google 官方:迁移「requires no code changes」),那种要按 recaptcha_v2 提交。
和 recaptcha_v3_enterprise 的区别:本类型页面上有 div.g-recaptcha 可见勾选框、enterprise.js 不带 render=<sitekey>(或带 render=explicit);v3 Enterprise 的 enterprise.js 带 render=<40 位 key> 且页面无勾选框。配成 invisible 的 v2 Enterprise 与 v3 Enterprise 在视觉上完全一样,这时只能靠 script URL 有没有 key 来分。
另外别和「reCAPTCHA 九宫格识图」类能力混:那类只是把图片认出来(返回该点哪几格),不产出可提交的 token,也不负责过盾。本类型直接交付 g-recaptcha-response 可用的 token。
常见部署场景
- 需要「明确挡一道」的高风险动作:注册、找回密码、下单支付、后台/管理端登录
- 票务、抢购、限量发售——要的就是可见摩擦本身
- 从 Classic v2 Checkbox 迁上 Google Cloud、或直接在 Cloud 控制台新建 checkbox key 的企业站点
- 把 Enterprise 当标准配置提供的商业电商平台(如 Adobe Commerce storefront 的验证码模块)
- 内容平台的举报、申诉、投稿入口——低频但滥用成本高的表单
已知的坑
`s` / `enterprise_payload` 常是一次性值,由目标站后端逐次下发。缓存复用会失败,且失败发生在目标站侧——每次求解前现取。
invisible 的 v2 Enterprise 和 v3 Enterprise 在页面上无法凭肉眼区分,判据只有一条:script URL 里有没有 render=<40 位 key>。选错 type 拿到的 token 目标站不认。
key 类型不可互换:checkbox key 与 score-based key 不能混用,配错页面直接显示 ERROR for site owner: Invalid key type for enterprise key——那是站点侧配置问题,不是求解失败。
action 别自己编。v2 Enterprise 里它是可选的,页面 data-action 没写就不传;编一个反而会在 assessment 的 action 核对上被判成伪造。
显式渲染多 widget 时 getResponse() 不带 widget id 会默认取第一个——多表单页面上很容易取到隔壁那个的 token。
勾选框 iframe(anchor)和图片挑战层(bframe)是两个不同的 iframe,判版本看 anchor 那个的路径就够,不用等挑战弹出来。
sitekey 官方定义是「唯一、大小写敏感、40 个字符」,Enterprise 与普通版同形,不能从 key 的样子判断版本。
常见问题
reCAPTCHA v2 Enterprise 要传哪些参数?
必填 website_url、website_key;可选 enterprise_payload、page_action、invisible、api_domain。请求里 type 传 recaptcha_v2_enterprise。
解出来的东西怎么用?
返回一个 token 字符串,取 solution.gRecaptchaResponse。填回目标站表单的 g-recaptcha-response 字段
enterprise.render 要去页面的哪里找?
重点找 enterprise.render、callback、anchor。本页「参数去页面哪里取」一节写了全部位置与取法,含可直接粘进控制台的一行命令。
怎么确认目标站用的就是 reCAPTCHA v2 Enterprise?
和 recaptcha_v2(普通版)只差端点:enterprise.js / grecaptcha.enterprise / /recaptcha/enterprise/anchor 命中就是本类型,否则按 recaptcha_v2 走。⚠ 同样注意反向不成立——从 Classic 迁到 Google Cloud 的 v2 key,页面代码可以一行不改仍跑 api.js(Google 官方:迁移「requires no code changes」),那种要按 recaptcha_v2 提交。
和 recaptcha_v3_enterprise 的区别:本类型页面上有 div.g-recaptcha 可见勾选框、enterprise.js 不带 render=<sitekey>(或带 render=explicit);v3 Enterprise 的 enterprise.js 带 render=<40 位 key> 且页面无勾选框。配成 invisible 的 v2 Enterprise 与 v3 Enterprise 在视觉上完全一样,这时只能靠 script URL 有没有 key 来分。
另外别和「reCAPTCHA 九宫格识图」类能力混:那类只是把图片认出来(返回该点哪几格),不产出可提交的 token,也不负责过盾。本类型直接交付 g-recaptcha-response 可用的 token。
有什么容易踩的坑?
`s` / `enterprise_payload` 常是一次性值,由目标站后端逐次下发。缓存复用会失败,且失败发生在目标站侧——每次求解前现取。
多少钱一次,失败扣不扣?
$1.53 / 1K 次。按成功计费 —— 没解出来一律退款,所以失败不花钱。账单按次记,标价按每千次是为了让量级读得出来。