«Сайт переехал на Enterprise — придётся переписывать интеграцию» — самое живучее заблуждение вокруг reCAPTCHA. Переписывать нечего: метод остаётся userrecaptcha, токен уходит в то же поле g-recaptcha-response, а в запросе появляется ровно один флаг — enterprise=1.
Enterprise — не более сложная проверка, а другая консоль администрирования и другой формат вердикта на стороне сайта.
- Для интеграции: один параметр и новый sitekey.
- Для владельца сайта: коды причин, пороги под каждое действие, проекты в Google Cloud.
- Для модели оценки: ничего — диапазон 0,0–1,0 общий для обеих версий.
Что меняется в коде при переходе на reCAPTCHA Enterprise
- Формат токена — прежний: поле
g-recaptcha-response. - Метод CaptchaAI — прежний:
userrecaptchaдля обеих версий. - Параметры запроса — добавляется
enterprise=1. - Sitekey — нужен новый: ключи Enterprise создаются в Google Cloud Console.
- Версии виджета — флаг работает и для v2, и для v3.
Если интеграция уже настроена под обычную reCAPTCHA v2, переход на Enterprise — это одна строка в параметрах. Схема «задача в in.php → опрос res.php → токен в форму» не меняется.
Ответ бэкенда: чем вердикт Enterprise отличается от Standard
Обе версии возвращают оценку 0,0–1,0, но Enterprise отдаёт её в другой структуре и с контекстом.
Standard: плоский ответ
{
"success": true,
"score": 0.7,
"action": "login",
"challenge_ts": "2024-01-15T12:00:00Z",
"hostname": "example.com"
}
Enterprise: вердикт с объяснением
{
"tokenProperties": {
"valid": true,
"action": "login",
"createTime": "2024-01-15T12:00:00Z",
"hostname": "example.com"
},
"riskAnalysis": {
"score": 0.7,
"reasons": ["LOW_CONFIDENCE_SCORE"],
"extendedVerdictReasons": []
},
"event": {
"token": "...",
"siteKey": "...",
"expectedAction": "login"
}
}
Три блока делят ответственность так:
tokenProperties— валидность токена, домен и действие, под которое он выпущен.riskAnalysis— оценка и массивreasons, который объясняет, почему она такая.event— что сайт отправил на проверку: sitekey и ожидаемое действие.
Благодаря reasons владелец сайта может пропустить пользователя с оценкой 0,3 при обычном входе, но запросить второй фактор при смене платёжных данных.
Для вашей интеграции это ничего не меняет: вы отдаёте токен, а интерпретирует его чужой бэкенд.
Как определить reCAPTCHA Enterprise на странице за минуту
Enterprise опознаётся по подключаемому скрипту и по объекту в консоли.
| Признак | Standard | Enterprise |
|---|---|---|
| URL скрипта | google.com/recaptcha/api.js |
google.com/recaptcha/enterprise.js |
| Функция выполнения | grecaptcha.execute() |
grecaptcha.enterprise.execute() |
| API проверки на бэкенде | конечная точка siteverify |
recaptchaenterprise.googleapis.com |
| Где управляется | админ-консоль reCAPTCHA | Google Cloud Console |
Быстрее всего — найти подключение скрипта в исходном коде страницы:
// Standard
<script src="https://www.google.com/recaptcha/api.js?render=SITEKEY"></script>
// Enterprise
<script src="https://www.google.com/recaptcha/enterprise.js?render=SITEKEY"></script>
- Откройте исходный код и найдите строку с
recaptcha/. api.js— Standard,enterprise.js— Enterprise; там же, в параметреrender, лежит нужный sitekey.- Или введите в консоли
grecaptcha.enterprise: на Enterprise-странице объект определён, на обычной —undefined.
Версию нельзя определить по самому токену: и Standard, и Enterprise возвращают строку одного вида.
Четыре варианта запроса к CaptchaAI: v2 и v3, Standard и Enterprise
Метод один и тот же — userrecaptcha. Отличается только набор параметров.
reCAPTCHA v3, Standard
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY, "method": "userrecaptcha", "version": "v3",
"googlekey": SITEKEY, "action": "login", "pageurl": URL, "json": 1
})
reCAPTCHA v3, Enterprise
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY, "method": "userrecaptcha", "version": "v3",
"enterprise": 1, # Only difference
"googlekey": SITEKEY, "action": "login", "pageurl": URL, "json": 1
})
reCAPTCHA v2, Standard
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY, "method": "userrecaptcha",
"googlekey": SITEKEY, "pageurl": URL, "json": 1
})
reCAPTCHA v2, Enterprise
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY, "method": "userrecaptcha",
"enterprise": 1,
"googlekey": SITEKEY, "pageurl": URL, "json": 1
})
Результат во всех четырёх случаях забирается опросом res.php и подставляется в g-recaptcha-response. По времени версии сопоставимы: ориентир для reCAPTCHA v3 Enterprise — менее 4 с, для v2 Enterprise — менее 60 с, и это верхняя граница, а не среднее.
Отсюда правило: тайм-аут в тестах задавайте исходя из типа проверки, а не из того, Enterprise на странице или нет.
Сценарий: staging на Standard, продакшен на Enterprise
Ситуация, знакомая командам в Москве, Минске и Алматы: стенды живут в разных облачных проектах. Вы автоматизируете регрессию формы входа своего SaaS: на staging — reCAPTCHA v3 Standard, а в продакшене включили Enterprise ради Account Defender и правил WAF.
Ночной прогон начинает падать — и падает не потому, что Enterprise «жёстче»: в продакшене другой sitekey, а в запросе не хватает флага.
Вывод простой: sitekey и признак Enterprise держите в конфигурации окружения рядом с базовым URL, а не в коде теста — тогда один сценарий отработает на обоих стендах без ветвлений.
Стоимость на стороне CaptchaAI от версии проверки не зависит: тарификация идёт по числу одновременных потоков. Ночному набору тестов хватает плана BASIC ($15/мес, 5 потоков); для прогона сразу по нескольким окружениям ближе ADVANCE ($90/мес, 50 потоков). Командам, которые считают выручку в одной валюте, а инфраструктуру оплачивают в другой, фиксированный платёж в USD планировать проще, чем оплату за каждое решение.
Что Enterprise даёт владельцу сайта
Эта часть на ваш код не влияет, но объясняет, с чем вы имеете дело на чужом сайте.
| Возможность | Standard | Enterprise |
|---|---|---|
| Цена у Google | бесплатно (до 1 млн оценок в месяц) | $1 за 1000 оценок (объём 1 000–100 000 в месяц), выше — многоуровневый тариф |
| Диапазон оценки | 0,0–1,0 | 0,0–1,0 |
| Коды причин | нет | да (AUTOMATION, UNEXPECTED_ENVIRONMENT и другие) |
| Настраиваемые пороги | нет, порог задаётся в вашем коде | да, отдельно для каждого действия в консоли |
| Управление проектами | нет | да, через Google Cloud Console |
| Обнаружение утечки пароля | нет | да |
| Account Defender | нет | да |
| Многофакторная аутентификация | нет | да, через интеграцию с WAF |
| Поддержка v2 | да | да |
| Поддержка v3 | да | да |
Ни одна строка таблицы не описывает «более сложную» проверку: Enterprise — административная надстройка поверх той же модели оценки.
Зачем сайты включают Enterprise
Мотив почти никогда не в самой капче, а в том, что вокруг неё:
- Связка с WAF. Вердикт передаётся в Cloudflare или Akamai и участвует в правилах фильтрации.
- Аналитика. Панель показывает динамику риска, а не только итоговый score.
- Свои правила. Разные пороги для входа, регистрации и оплаты вместо константы в коде.
- Комплаенс. Корпоративный SLA и выбор региона хранения данных.
- Защита аккаунтов. Обнаружение утечки пароля и признаков захвата учётной записи.
Если при тестировании вы попутно собираете данные, ограничьтесь тем, что вправе обрабатывать: для команд в РФ ориентиром служит 152-ФЗ «О персональных данных», для кросс-граничных проектов — привычная GDPR-осмотрительность.
Частые вопросы
Что нужно изменить в коде, если сайт перешёл на Enterprise?
Ровно две вещи:
- добавить
enterprise=1в параметры запроса; - подставить новый sitekey из подключения
enterprise.js.
Метод, конечная точка in.php, опрос res.php и поле g-recaptcha-response остаются прежними.
Нужно ли указывать version=v3 вместе с enterprise=1?
Да, если на странице reCAPTCHA v3: version и action описывают виджет, а enterprise — только тип ключа. Для v2 Enterprise достаточно одного флага, version там не нужен.
Токен получен, но сайт его не принимает — что проверить?
Сначала action: если он не совпадает с expectedAction, токен валиден, но запрос отклоняется. Дальше — домен из pageurl и время: токен reCAPTCHA живёт около двух минут, подставлять его нужно сразу.
Влияет ли Enterprise на score в reCAPTCHA v3?
Модель оценки та же, диапазон 0,0–1,0 тоже. Разница в том, что владелец сайта задаёт свои пороги под каждое действие: один и тот же score на входе и на оплате обрабатывается по-разному.
Сколько потоков заложить на ночной прогон тестов?
Поток — это одна задача в работе, а не одна задача в сутки. Для 200 сценариев с reCAPTCHA v2 Enterprise худшая оценка — 200 × 60 с; на 5 потоках BASIC это около 40 минут, на практике быстрее: 60 с — потолок, а не среднее. Верх линейки — VIP-3 ($7,500/мес, 5000 потоков).