Форма без капчи Битрикса
Статическая форма в шаблоне или свой компонент, которые капчу Битрикса не выводят, автоматической защиты не получают: модулю нечего подменять. Такую форму подключают руками — двумя вызовами.
Разметка формы
В том месте, где должна появиться проверка, выведите блок с идентификатором от модуля:
<?php
use DevBx\Recaptcha\Api;
if (\Bitrix\Main\Loader::includeModule('devbx.recaptcha')): ?>
<div id="<?= Api::getRecaptchaId() ?>"></div>
<?php endif; ?>
Api::getRecaptchaId() возвращает новый идентификатор и запоминает его: перед отдачей страницы
модуль допишет код, который отрисует в этом блоке проверку с ключом текущего сайта.
Для каждой формы вызов делается отдельно — два блока на странице получат два разных идентификатора.
Обработка отправки
В обработчике формы, до сохранения данных, спросите модуль о результате проверки:
<?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 с тем же ответом вернёт отказ, и форма перестанет отправляться.
- Хранить секретный ключ в шаблоне. Модуль берёт ключ из настроек сайта сам; в разметку попадает только публичный.