Документация

Форма без капчи Битрикса

Статическая форма в шаблоне или свой компонент, которые капчу Битрикса не выводят, автоматической защиты не получают: модулю нечего подменять. Такую форму подключают руками — двумя вызовами.

Разметка формы

В том месте, где должна появиться проверка, выведите блок с идентификатором от модуля:

php · form.php
<?php
use DevBx\Recaptcha\Api;

if (\Bitrix\Main\Loader::includeModule('devbx.recaptcha')): ?>
    <div id="<?= Api::getRecaptchaId() ?>"></div>
<?php endif; ?>

Api::getRecaptchaId() возвращает новый идентификатор и запоминает его: перед отдачей страницы модуль допишет код, который отрисует в этом блоке проверку с ключом текущего сайта.

Для каждой формы вызов делается отдельно — два блока на странице получат два разных идентификатора.

Обработка отправки

В обработчике формы, до сохранения данных, спросите модуль о результате проверки:

php · handler.php
<?php
use DevBx\Recaptcha\Api;

if (\Bitrix\Main\Loader::includeModule('devbx.recaptcha')) {
    if (!Api::checkCaptcha()) {
        $error = Api::getLastError();
        // показать $error и не сохранять данные
        return;
    }
}

// сюда доходят только проверенные отправки

Api::checkCaptcha() сам берёт ответ из запроса, подтверждает его у Google и для v3 сравнивает оценку с порогом. Api::getLastError() возвращает текст для посетителя — «Капча не пройдена». Метод getLastError(true) отдаёт тот же текст, подготовленный для вывода в разметку.

Чего делать не нужно

  • Проверять путь страницы. Правила показа к проверке отношения не имеют, и добавлять их в свой код не нужно — это ослабило бы защиту.
  • Отправлять ответ на проверку дважды. Ответ reCAPTCHA одноразовый: второй запрос к Google с тем же ответом вернёт отказ, и форма перестанет отправляться.
  • Хранить секретный ключ в шаблоне. Модуль берёт ключ из настроек сайта сам; в разметку попадает только публичный.