Как подключить Google reCAPTCHA к форме на PHP

Подключение reCAPTCHA v2 к форме: получение ключей, виджет на странице и проверка ответа на сервере через siteverify без сторонних библиотек.

Актуальность. Раньше для проверки использовали библиотеку recaptchalib.php версии 1.0 — она устарела. Ниже проверка напрямую через API Google. Учтите, что сервисы Google могут работать нестабильно для части посетителей из России; для российских сайтов стоит рассмотреть Yandex SmartCaptcha.

1. Ключи

Зарегистрируйте сайт в консоли reCAPTCHA: укажите домен и тип «reCAPTCHA v2 — флажок „Я не робот“». Вы получите два ключа: ключ сайта (можно показывать в коде страницы) и секретный ключ (хранится только на сервере, никогда не публикуется).

2. Виджет в форме

<script src="https://www.google.com/recaptcha/api.js" async defer></script>

<form action="/send.php" method="post">
  <label for="name">Имя</label>
  <input id="name" name="name" required>
  <div class="g-recaptcha" data-sitekey="КЛЮЧ_САЙТА"></div>
  <button type="submit">Отправить</button>
</form>

3. Проверка на сервере

<?php
$secret = getenv('RECAPTCHA_SECRET');          // секретный ключ — не в коде
$token = $_POST['g-recaptcha-response'] ?? '';

$context = stream_context_create(['http' => [
    'method' => 'POST',
    'header' => 'Content-Type: application/x-www-form-urlencoded',
    'content' => http_build_query(['secret' => $secret, 'response' => $token, 'remoteip' => $_SERVER['REMOTE_ADDR']]),
    'timeout' => 5,
]]);
$answer = json_decode((string)file_get_contents('https://www.google.com/recaptcha/api/siteverify', false, $context), true);

if (!empty($answer['success'])) {
    echo 'Спасибо, ' . htmlspecialchars($_POST['name'] ?? '') . '!';
} else {
    http_response_code(400);
    echo 'Подтвердите, что вы не робот.';
}

Проверка обязательна именно на сервере: виджет на странице бот может просто пропустить. Имя из формы выводится через htmlspecialchars, чтобы в ответ нельзя было внедрить скрипт.

Для 1С-Битрикс

В Битриксе есть встроенная CAPTCHA для веб-форм и регистрации, а также модули Маркетплейса для reCAPTCHA и Yandex SmartCaptcha — с ними не нужно править шаблоны компонентов.

Все статьи

Расскажите о задаче — подберём платформу и оценим работу

Обсудить проект