Как подменяется капча Битрикса
Модуль ничего не знает о конкретных формах. Он работает с тем, что штатная капча Битрикса всегда
выглядит одинаково: картинка /bitrix/tools/captcha.php и поле ввода captcha_word рядом.
Что происходит с готовой страницей
Перед отдачей страницы модуль:
- заменяет картинку капчи на блок проверки reCAPTCHA;
- прячет поле ввода и подставляет в него значение, которое пройдёт проверку Битрикса;
- заменяет подписи: «Введите текст с картинки» превращается в «Подтвердите, что вы не робот», а «Неверно введено слово с картинки» — в «Проверка „Я не робот“ не пройдена».
Подписи заменяются и в ответах, отдаваемых в формате JSON: ajax-формы получают текст ошибки той же строкой, что и обычные страницы.
Что происходит с отправкой
Отправленная форма приходит с ответом reCAPTCHA. Модуль подтверждает ответ у Google и, если проверка пройдена, подставляет ожидаемое значение штатной капчи в запрос и в сессию. Дальше компонент Битрикса работает обычным порядком: он сверяет свою капчу и видит, что она сошлась.
Из этого следует главное ограничение: модуль защищает те формы, которые пользуются капчей Битрикса. Форма, которая рисует своё поле проверки или обходится без капчи вовсе, останется без reCAPTCHA — подменять там нечего. Что делать в этом случае, описано на странице «Форма без капчи Битрикса».
Кодировка страницы
Подмена делается только тогда, когда кодировка ответа совпадает с кодировкой сайта. Страница в Windows-1251 на сайте в UTF-8 (или наоборот) пропускается целиком: подстановка в чужой кодировке испортила бы разметку.
Это редкий случай, но он объясняет ситуацию, когда на всём сайте капча заменяется, а на одной странице — нет.
Переопределённый класс капчи
Модуль подменяет класс CCaptcha. Если тот же класс переопределён чем-то ещё — своим кодом в
/bitrix/php_interface/init.php или другим модулем, — подмена не состоится: в системе может быть
только одно объявление класса.
Такой случай модуль не оставляет молчаливым. В админке появляется уведомление с ссылкой на файл, где объявлен чужой класс. Пока конфликт не разобран, формы работают со штатной капчой.