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

Как подменяется капча Битрикса

Модуль ничего не знает о конкретных формах. Он работает с тем, что штатная капча Битрикса всегда выглядит одинаково: картинка /bitrix/tools/captcha.php и поле ввода captcha_word рядом.

Что происходит с готовой страницей

Перед отдачей страницы модуль:

  1. заменяет картинку капчи на блок проверки reCAPTCHA;
  2. прячет поле ввода и подставляет в него значение, которое пройдёт проверку Битрикса;
  3. заменяет подписи: «Введите текст с картинки» превращается в «Подтвердите, что вы не робот», а «Неверно введено слово с картинки» — в «Проверка „Я не робот“ не пройдена».

Подписи заменяются и в ответах, отдаваемых в формате JSON: ajax-формы получают текст ошибки той же строкой, что и обычные страницы.

Что происходит с отправкой

Отправленная форма приходит с ответом reCAPTCHA. Модуль подтверждает ответ у Google и, если проверка пройдена, подставляет ожидаемое значение штатной капчи в запрос и в сессию. Дальше компонент Битрикса работает обычным порядком: он сверяет свою капчу и видит, что она сошлась.

Из этого следует главное ограничение: модуль защищает те формы, которые пользуются капчей Битрикса. Форма, которая рисует своё поле проверки или обходится без капчи вовсе, останется без reCAPTCHA — подменять там нечего. Что делать в этом случае, описано на странице «Форма без капчи Битрикса».

Кодировка страницы

Подмена делается только тогда, когда кодировка ответа совпадает с кодировкой сайта. Страница в Windows-1251 на сайте в UTF-8 (или наоборот) пропускается целиком: подстановка в чужой кодировке испортила бы разметку.

Это редкий случай, но он объясняет ситуацию, когда на всём сайте капча заменяется, а на одной странице — нет.

Переопределённый класс капчи

Модуль подменяет класс CCaptcha. Если тот же класс переопределён чем-то ещё — своим кодом в /bitrix/php_interface/init.php или другим модулем, — подмена не состоится: в системе может быть только одно объявление класса.

Такой случай модуль не оставляет молчаливым. В админке появляется уведомление с ссылкой на файл, где объявлен чужой класс. Пока конфликт не разобран, формы работают со штатной капчой.