EveryInfra

reCAPTCHA v3 Enterprise

reCAPTCHA v3 EnterpriseGoogle无感打分与普通 v3 完全一致:没有勾选框、没有图片题,只有右下角一个「protected by reCAPTCHA」徽标(位置可配 bottomright / bottomleft / inline)。**用户端看不出 Enterprise 和普通版的任何差别**,差别全在站点接的是哪套端点和后端 API。

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

接口规格

项目
typerecaptcha_v3_enterprise
必填参数website_urlwebsite_key
可选参数page_actionenterprise_payloadapi_domain
返回一个 token 字符串solution.gRecaptchaResponse
怎么用这个解填回目标站表单的 `g-recaptcha-response` 字段
价格$3.06 / 1K 次 —— 按成功计费,没解出来退款
厂商文档Google 官方文档

参数去页面哪里取

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

必填仍是 website_url + website_key,可选 page_action / enterprise_payload / api_domain。取法与 v3 同构,但每一处都要换成 enterprise 通道——这几处也正是判断「这站到底是不是 Enterprise」的全部依据。

第一判据:script 路径

<script src="https://www.google.com/recaptcha/enterprise.js?render=<sitekey>"></script>

路径是 /recaptcha/**enterprise.js** 而不是 /recaptcha/api.jsrender= 后面那 40 位就是 website_key。可选 query 有 hl=<语言>badge=bottomright|bottomleft|inline
一行取:document.querySelector('script[src*="recaptcha/enterprise.js"]').src

第二判据:JS 命名空间

页面代码用的是 grecaptcha.enterprise.*

grecaptcha.enterprise.ready(async () => {
  const token = await grecaptcha.enterprise.execute('<sitekey>', {action: 'LOGIN'});
});

控制台一句话判定:typeof grecaptcha.enterprise —— 返回 "object" 就是 Enterprise,"undefined" 就不是。

第三判据:iframe / 网络请求路径

徽标 iframe 的 src 是
https://www.google.com/recaptcha/**enterprise**/anchor?ar=1&k=<sitekey>&co=<base64 origin>&size=invisible

(普通版对应的是 /recaptcha/api2/anchor)。DevTools Network 面板过滤 enterprise 一眼可辨;k= 参数同样是 sitekey。

自动绑定写法

和普通版属性名完全一样,只是脚本换了:
<button class="g-recaptcha" data-sitekey="<sitekey>" data-callback="onSubmit" data-action="submit" data-badge="bottomleft">

page_action

就是 grecaptcha.enterprise.execute() 第二个参数里的 action。找法:DOM 上的 data-action 属性 → DevTools 全局搜 enterprise.execute → 都拿不到就打探针(注意要打在 enterprise 命名空间上):

const _x = grecaptcha.enterprise.execute;
grecaptcha.enterprise.execute = (k, o) => { console.log(k, o); return _x(k, o); };

官方约束同 v3:只能含字母数字、斜杠、下划线,不区分大小写;官方推荐名 login signup password_reset checkout cart_add cart_view payment_add get_price play_song,并且明确允许拼接(如 cart_view_payment)。Enterprise 侧 Google 明写 action 会原样回到 assessment 里、对不上就是「伪造 action」——所以照抄,别猜。

enterprise_payload

页面调 execute() 时除 sitekeyaction 之外还塞了别的键,就把那个对象原样给我们。最常见的额外键是 s(多见于 Google 自家产品线,页面上有时以 data-s 属性出现)。没有额外键就不要传

api_domain

看脚本 host:www.google.com(默认)还是 www.recaptcha.net(要传)。

sitekey 本身分辨不出版本。 Enterprise key 与普通 key 同形(Google 官方定义:唯一、大小写敏感、40 个字符),所以只能靠上面那三条通道判据,不能靠 key 的样子。

调用示例

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

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

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

客户端仍然是「主动 execute 换一个加密 token」,但走的是 Enterprise 通道:脚本是 `enterprise.js`、命名空间是 `grecaptcha.enterprise.*`、iframe 走 `/recaptcha/enterprise/anchor`。站点后端不再用 siteverify,而是调 Google Cloud 的 recaptchaenterprise.googleapis.com 创建 assessment,除分数外还能拿到 reason code、按 action 细分的风控上下文,并可把真实结果回写(annotation)反哺模型。Google 官方对应的 key 类型叫 SCORE(score-based key),文档明写它「不显示『我不是机器人』勾选框,也永不出题」。

容易搞混的

recaptcha_v3 的唯一差别就是端点:enterprise.js / grecaptcha.enterprise / /recaptcha/enterprise/anchor 三选一命中就是本类型,否则按 recaptcha_v3 走。

⚠⚠ 反过来不成立,这是本组最大的坑:Google 官方的 Classic 迁移文档写得很清楚——把旧的 v2/v3 key 迁到 Google Cloud「requires no code changes」「你可以保留原有的网页埋点和后端调用」、siteverify 继续可用。也就是说一个站点在计费和控制台上完完全全是 Enterprise,页面却仍然在跑 `api.js` + `grecaptcha.execute`。这种页面对我们而言就是 recaptcha_v3,不是本类型。
判据要落在页面实际加载了什么,不要落在客户口头说的「我们用的是 Enterprise」。

recaptcha_v2_enterprise 的区别:本类型的 enterprise.jsrender=<sitekey> 且页面上没有可见勾选框;v2 Enterprise 的 enterprise.js 不带 key(或带 render=explicit)且页面上有 div.g-recaptcha 勾选框。

常见部署场景

已知的坑

「没有 enterprise.js」≠「不是 Enterprise」(见上一栏)。迁移过来的 Classic key 保持原代码原端点,选 type 只能看页面实际加载的脚本。

Enterprise sitekey 与普通版同形(40 位、大小写敏感、实践中多以 6L 开头),从 key 本身推不出版本,别在这上面浪费时间。

key 类型不可互换。把 score-based key 当勾选框用(或反过来),页面会直接显示 ERROR for site owner: Invalid key type for enterprise key。看到这句是页面/参数配错了,不是解出问题。

Enterprise 还有不在页面上跑 execute() 的形态:WAF 侧的 session-token key、challenge-page key、action-token key,以及给 IoT/无 JS 客户端用的 express key。那几种的参数来源和本条完全不同,别硬套。

token 同样是两分钟内必须完成 assessment(Google 官方原话),别囤。

badge=inline 可以把徽标嵌进页面,视觉上等于消失——不能靠「看不到徽标」下结论。

Google 现在把 Essentials / Premium / Enterprise 都跑在 recaptchaenterprise.googleapis.com 上,所以「Enterprise」既指一个计费档也指那套 API。对我们只有一个含义:页面走的是 enterprise 通道。

常见问题

reCAPTCHA v3 Enterprise 要传哪些参数?

必填 website_url、website_key;可选 page_action、enterprise_payload、api_domain。请求里 type 传 recaptcha_v3_enterprise。

解出来的东西怎么用?

返回一个 token 字符串,取 solution.gRecaptchaResponse。填回目标站表单的 g-recaptcha-response 字段

enterprise.execute 要去页面的哪里找?

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

怎么确认目标站用的就是 reCAPTCHA v3 Enterprise?

recaptcha_v3 的唯一差别就是端点:enterprise.js / grecaptcha.enterprise / /recaptcha/enterprise/anchor 三选一命中就是本类型,否则按 recaptcha_v3 走。

⚠⚠ 反过来不成立,这是本组最大的坑:Google 官方的 Classic 迁移文档写得很清楚——把旧的 v2/v3 key 迁到 Google Cloud「requires no code changes」「你可以保留原有的网页埋点和后端调用」、siteverify 继续可用。也就是说一个站点在计费和控制台上完完全全是 Enterprise,页面却仍然在跑 `api.js` + `grecaptcha.execute`。这种页面对我们而言就是 recaptcha_v3,不是本类型。
判据要落在页面实际加载了什么,不要落在客户口头说的「我们用的是 Enterprise」。

recaptcha_v2_enterprise 的区别:本类型的 enterprise.jsrender=<sitekey> 且页面上没有可见勾选框;v2 Enterprise 的 enterprise.js 不带 key(或带 render=explicit)且页面上有 div.g-recaptcha 勾选框。

有什么容易踩的坑?

「没有 enterprise.js」≠「不是 Enterprise」(见上一栏)。迁移过来的 Classic key 保持原代码原端点,选 type 只能看页面实际加载的脚本。

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

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

开始接入

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