Форма без капчи Битрикса
Статическая форма в шаблоне или свой компонент, которые капчу Битрикса не выводят, автоматической защиты не получают. Такую форму подключают руками — одним блоком в разметке и одной проверкой в обработчике.
Разметка формы
Там, где должна появиться проверка, выведите пустой блок с классом smartcaptcha:
<div class="smartcaptcha"></div>
Больше ничего не нужно: клиентская часть модуля сама найдёт блок и нарисует в нём капчу с ключом и настройками текущего сайта. Блок, добавленный на страницу позже — из модального окна или ответом на запрос, — подхватывается так же.
Если у формы должны быть свои настройки виджета, их передают атрибутом data-params с объектом
настроек. Без атрибута берутся настройки сайта — этого достаточно почти всегда.
Обработка отправки
В обработчике формы, до сохранения данных, спросите модуль о результате проверки:
<?php
use DevBx\SmartCaptcha\Api;
if (\Bitrix\Main\Loader::includeModule('devbx.smartcaptcha')) {
if (!Api::checkCaptcha()) {
$error = Api::getLastError();
// показать $error и не сохранять данные
return;
}
}
// сюда доходят только проверенные отправки
Api::checkCaptcha() сам берёт ответ из поля smart-token, подтверждает его у Яндекса и
запоминает результат на время запроса — вызывать его в нескольких местах обработчика безопасно.
Api::getLastError() возвращает текст для посетителя, getLastError(true) — тот же текст,
подготовленный для вывода в разметку.
Чего делать не нужно
- Проверять путь страницы. Правила показа к проверке отношения не имеют, и повторять их в своём коде значит ослабить защиту.
- Отправлять ответ на проверку дважды. Ответ одноразовый: повторный запрос к Яндексу с тем же токеном вернёт отказ, и форма перестанет отправляться.
- Хранить ключ сервера в шаблоне. Модуль берёт его из настроек сайта сам; в разметку попадает только ключ клиента.