Как работает reCAPTCHA
Когда reCAPTCHA развёрнута в вашей среде, она взаимодействует с вашим бэкендом и клиентом (веб‑страницами или мобильными приложениями).
Когда конечный пользователь посещает веб‑страницу или использует мобильное приложение, последовательно происходят следующие события:
Клиент загружает веб‑страницу с бэкенда или запускает мобильное приложение.
Веб‑страница или мобильное приложение инициализирует JavaScript API reCAPTCHA или мобильный SDK, которые начинают собирать сигналы.
Когда пользователь инициирует действие, защищённое reCAPTCHA (например, вход в систему), reCAPTCHA JavaScript API или мобильный SDK на клиенте запрашивает вердикт у reCAPTCHA.
reCAPTCHA возвращает зашифрованный токен reCAPTCHA клиенту для последующего использования.
Клиент отправляет зашифрованный токен reCAPTCHA на бэкенд для оценки.
Бэкенд отправляет токен на REST‑endpoint siteverify.
reCAPTCHA возвращает вердикт на бэкенд на основе оценки риска для этого запроса. Вердикт включает в себя оценки от 0.0 до 1.0 и коды причин.
В зависимости от вердикта вы (как разработчик) определяете, какие последующие шаги предпринять для данного пользовательского запроса или действия.
Следующая диаграмма показывает графическое представление рабочего процесса reCAPTCHA:

См. также диаграммы процессов внедрения: https://docs.cloud.google.com/recaptcha/docs/implementation-workflow
Ключи Captcha API (site key + secret)
Для reCAPTCHA v3 вы регистрируете ключи в Google reCAPTCHA Admin Console и получаете ключ сайта (публичный) и секретный ключ (используемый вашим бэкендом). Относитесь к секретному ключу как к серверным учётным данным: он передаётся в параметре secret при вызове верификационного endpoint, поэтому он никогда не должен попадать в клиентский код.
Интеграция на клиенте (JavaScript)
reCAPTCHA v3 работает без прерывания действий пользователей и возвращает оценку для каждого запроса, где 1.0 — это, скорее всего, живой человек, а 0.0 — скорее бот. Вы вызываете reCAPTCHA для конкретных действий (например, login или signup), и на бэкенде вы должны проверить, что возвращённое поле action соответствует ожидаемому. Google рекомендует немедленно отправлять токен на ваш бэкенд вместе с запросом, который вы хотите защитить.
Вариант A: Привязка к кнопке (адаптировано для JSON‑бэкенда)
Подключите JavaScript API и добавьте атрибуты reCAPTCHA к кнопке. Вызов callback получит токен.
Примечание: чтобы работать с приведёнными ниже JSON‑бэкенд‑примерами, этот скрипт перехватывает отправку формы и отправляет JSON‑запрос вместо стандартного POST‑запроса формы.
<script src="https://www.google.com/recaptcha/api.js?render=YOUR_SITE_KEY"></script>
<script>
function onSubmit(token) {
// Предотвращаем отправку формы по умолчанию и отправляем JSON на бэкэнд
const form = document.getElementById("demo-form");
const formData = new FormData(form);
const data = Object.fromEntries(formData.entries());
data.recaptchaToken = token; // Добавляем токен в JSON payload
fetch("/api/submit", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(data)
}).then(response => {
if (response.ok) console.log("Success");
});
}
</script>
<form id="demo-form">
<!-- Поля формы -->
<button
class="g-recaptcha"
data-sitekey="YOUR_SITE_KEY"
data-callback="onSubmit"
data-action="submit"
type="button">
Submit
</button>
</form>
Вариант B: Программный вызов (рекомендуется для API/AJAX)
Подключите api.js с параметром ?render=YOUR_SITE_KEY, затем вызывайте grecaptcha.execute() для каждого действия, которое вы хотите защитить.
<script src="https://www.google.com/recaptcha/api.js?render=YOUR_SITE_KEY"></script>
<script>
async function getTokenAndCallBackend() {
const token = await new Promise((resolve) => {
grecaptcha.ready(() => {
grecaptcha.execute("YOUR_SITE_KEY", { action: "login" }).then(resolve);
});
});
// Отправляем токен методом POST на бэкэнд, который вызовет siteverify
await fetch("/api/login", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ recaptchaToken: token })
});
}
</script>
Проверка Captcha API (REST: siteverify)
Обращение к REST‑endpoint Google для проверки (https://www.google.com/recaptcha/api/siteverify) выполняется методом POST. Отправьте поля secret (обязательный), response (обязательный токен с клиента) и при необходимости remoteip (IP‑адрес пользователя). Каждый токен действителен две минуты и может быть проверен только один раз.
Пример REST‑запроса (curl)
curl -X POST \
-d "secret=YOUR_SECRET_KEY" \
-d "response=USER_TOKEN" \
-d "remoteip=USER_IP_OPTIONAL" \
https://www.google.com/recaptcha/api/siteverify
Поля REST‑ответа (reCAPTCHA v3)
Успешный ответ — это JSON‑объект, который включает поле success, а также специфичные для reCAPTCHA v3 поля, такие как score и action, и может включать массив error-codes. Также вы увидите challenge_ts (timestamp в формате ISO) и hostname (домен, на котором был решён токен).
Пример структуры (набор полей зависит от сценария):
{
"success": true,
"score": 0.7,
"action": "login",
"challenge_ts": "2026-02-18T10:00:00Z",
"hostname": "example.com"
}