Explainers

reCAPTCHA Enterprise 站点密钥与 API 密钥:配置指南

提交 reCAPTCHA Enterprise 任务却拿不到 token,先别怀疑接口——十有八九是密钥拿错了。答案很短:CaptchaAI 只要页面里那串 6L 开头的 sitekey,AIzaSy 开头的 Google Cloud API key 一次都用不上。下面讲清该提交哪个值、怎么把它找出来、报错时往哪儿看。

sitekey 与 API key 的区别一览

对比项 sitekey(站点密钥) API key
格式 6L...(40 位) AIzaSy...(39 位)
可见性 公开,写在 HTML/JS 里 私有,只存在于服务端
作用 加载验证码组件 向 Google 校验 token
在哪里找 页面源码、JS 调用 服务器配置、环境变量
CaptchaAI 需要吗 需要 不需要

sitekey:写在页面里的公开值

sitekey 直接嵌在 HTML 里,告诉浏览器加载哪一份 reCAPTCHA 配置:

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

也可能出现在 grecaptcha.enterprise.execute 的第一个参数里:

grecaptcha.enterprise.execute('6LcR_RsTAAAAADge...', { action: 'login' });

它以 6L 开头,和标准 reCAPTCHA 前缀一致,在源码里直接可见——本来就是公开值,安全边界靠 Google Cloud Console 里的域名绑定来兜底。CaptchaAI 要的就是这个值。

API key:只在服务端露面的私有凭证

API key 用于网站后端向 Google 发起 token 校验请求:

POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments?key=AIzaSy...

特征刚好相反:AIzaSy 开头,从不出现在客户端代码里,只被网站后端用来校验 token。CaptchaAI 不需要它,也不应该拿到它。

Enterprise 和标准版 reCAPTCHA 差在哪

Enterprise 不是“更难的验证码”,它换掉的是密钥来源和校验链路:

对比项 标准版(免费) Enterprise
sitekey 来源 reCAPTCHA 管理后台 Google Cloud Console
校验接口 siteverify assessments
校验凭证 secret key(共享密钥) API key 或服务账号
分数字段 score(0.0–1.0) riskAnalysis.score 加原因码
CaptchaAI 任务类型 RecaptchaV2Task / RecaptchaV3Task RecaptchaV2EnterpriseTask / RecaptchaV3EnterpriseTask

完整校验链路:CaptchaAI 只接管前两步

把整条链路拆开看,就明白为什么只有 sitekey 与你有关。

  1. 浏览器sitekey 加载 enterprise.js
  2. 浏览器执行挑战,拿到 token
  3. 网站后端把 token 和自己的 API key 一起发到 Google 的 assessments 接口
  4. Google 返回风险分数和评估明细
  5. 网站后端按分数决定放行还是拦截

CaptchaAI 替代第 1、2 步:用 sitekey 生成有效 token,之后是网站方的事。这也解释了为什么网站轮换 API key 与你的识别流程无关。

三种方法定位页面上的 sitekey

方法一:直接搜页面源码

在 HTML 里搜 enterprise.js

View Source → Ctrl+F → "enterprise.js"

render 参数后面跟的就是 sitekey:

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

顺带一眼就能确认版本:Enterprise 走 /recaptcha/enterprise.js,标准版走 /recaptcha/api.js

方法二:浏览器控制台

在控制台里执行:

// Check for Enterprise grecaptcha
if (window.grecaptcha && window.grecaptcha.enterprise) {
  console.log('reCAPTCHA Enterprise detected');
}

// Find site key from rendered widgets
document.querySelectorAll('[data-sitekey]').forEach(el => {
  console.log('Site key:', el.getAttribute('data-sitekey'));
});

方法三:网络面板

在 Network 面板里按 enterprise.js 过滤,sitekey 会出现在请求 URL 里。源码是异步拼出来、搜不到明文时,用这一招基本都能拿到。

用 googlekey 和 enterprise=1 提交任务

拿到 sitekey 之后,用 googlekey 参数提交:

POST https://ocr.captchaai.com/in.php

必填参数:

参数 取值
key 你的 CaptchaAI API Key(YOUR_API_KEY
method userrecaptcha
googlekey 从页面里提取到的 sitekey(6LcR_Rs...
pageurl 验证码所在页面的完整 URL
enterprise 1(标记为 Enterprise 任务)

Enterprise 可选参数:

参数 用途
enterprise_type 指定 v2 还是 v3 Enterprise
action v3 Enterprise 的 action 名称

提交后按常规节奏轮询 res.php。同一把 CaptchaAI API Key 对所有支持的验证码类型通用,Enterprise 不需要额外开通;计费按并发线程走,换用 Enterprise 不改变成本结构。

出海业务里的两个落差

国内站点很少用 reCAPTCHA,主流是 GeeTest(极验)、网易易盾、腾讯防水墙。第一次撞上 Enterprise,多半是在做出海业务时:跨境电商后台、海外 SaaS 控制台、面向欧美用户的注册页。

由此带来两个落差。一是 enterprise.js 由 Google 托管,在内地网络下不一定稳定加载,但 sitekey 静态写在 HTML 里,所以方法一比方法二可靠——组件没渲染时 grecaptcha 对象不存在,控制台脚本会直接报错。

二是 staging 与生产挂在不同域名下,在 Google Cloud Console 里就是两份 sitekey,拿测试环境的密钥去生产提交必然无效。涉及数据采集时,还要先确认 robots 协议与《网络安全法》《数据安全法》和 PIPL 下的授权边界。

报错对照表

现象 原因 处理方式
ERROR_WRONG_CAPTCHA_ID 提交了 API key 换成页面里 6L... 开头的值
token 被网站拒绝 Enterprise 类型填错 保留 enterprise=1,修正 enterprise_type
提示 sitekey 无效 密钥来自另一套环境 从目标 URL 现场提取
被当成标准 reCAPTCHA 处理 漏了 Enterprise 标记 补上 enterprise=1

常见问题

页面里有好几个 sitekey,该提交哪一个?

以实际触发验证的那个表单为准。登录、注册、搜索组件常各绑一个 sitekey。用控制台把 data-sitekey 列出来当候选,再看提交时 enterprise.js 请求携带的 render 值。

enterprise=1enterprise_type 必须一起填吗?

enterprise=1 必填,它决定任务走不走 Enterprise 通道。enterprise_type 可选,自动判断不准时才显式指定 v2v3。目标是 v3 时建议同时带上 action

token 拿到了网站还是拒绝,是 sitekey 错了吗?

不一定。Enterprise 返回的是风险分数,放行与否由网站阈值决定。先核对 pageurl 是否与表单地址一致、v3 的 action 是否对得上、token 是否在有效期内用掉。

延伸阅读

下一步

先把目标页面的 sitekey 找出来,再注册 CaptchaAI 领取 API Key,带上 enterprise=1 提交第一个 Enterprise 任务。

该文章已禁用评论。