Подключаем Goolge reCAPTCHA 2 к формам 1С-Битрикс

15k
Алексей,
Подключаем Goolge reCAPTCHA 2 к формам 1С-Битрикс
Подключаем Goolge reCAPTCHA 2 к формам 1С-Битрикс

Стандартная каптча, с вводом непонятных символов это уже "прошлый век". Важно что бы защита от ботов не стала проблемой для ваших посетителей.

Стандартная каптча, с вводом непонятных символов это уже "прошлый век". Чаще "каптчи" ставят на различные формы. А эти данные очень важны для владельца сайта, т.к. это может быть заказ услуги, обратная связь, регистрация в партнерском разделе и т.п. Важно что бы защита от ботов не стала проблемой для ваших посетителей.

Что бы установить Google recaptcha 2 на сайт необходимо:
  • Зарегистрировать сайт на https://www.google.com/recaptcha/admin и получить секретные ключи и инструкцию по установке
  • Действовать согласно инструкции.  :) Шучу. Подключаем js библиотеку в header.php или в component_epilog.php компонента с формой.
    <?\Bitrix\Main\Page\Asset::getInstance()->addJs('//www.google.com/recaptcha/api.js');?> 
  • В настройках компонента формы отключите стандартную каптчу.
  • В шаблоне формы находим место подключения стандартной каптчи и меняем на предложенный по инструкции код. Параметр data-sitekey у вас будет свой.
    <div class="g-recaptcha" data-sitekey="6Leh4iETAAAAAM6ybuqexxuK0Sc4Q4MBYK3xO3JZ"></div>
  • Если ваша форма загружается с помощью ajax, просто подключите скрипт api.js в форме, а не в шаблоне сайта.
    <script src="https://www.google.com/recaptcha/api.js" async defer></script>
  • Для изменения размера каптчи можно использовать параметр "data-size", либо с помощью css
    <div class="g-recaptcha" data-size="compact" ... 
     
    .g-recaptcha { 
    	transform:scale(0.77);
    	transform-origin:0 0; 
    }
  • Добавляем обработчик добавления элементов в init.php и смотрим прошел ли пользователь проверку. Не забудьте заменить секретный ключ и ID инфоблока.
    <?
    	AddEventHandler("iblock", "OnBeforeIBlockElementAdd", "checkGoogleCaptcha");
    
    	function checkGoogleCaptcha(&$arFields) {
    		if ($arFields['IBLOCK_ID'] == 6 && $_REQUEST['iblock_submit']) {
    			global $APPLICATION;
    			if ($_REQUEST['g-recaptcha-response']) {
    				$httpClient = new \Bitrix\Main\Web\HttpClient;
    						$result = $httpClient->post(
    							'https://www.google.com/recaptcha/api/siteverify',
    							array(
    								'secret' => '6Leh4iETAAAAAO7ynh2PqbbB777777noIG0tc',
    								'response' => $_REQUEST['g-recaptcha-response'],
    								'remoteip' => $_SERVER["REMOTE_ADDR"]
    					 	)
    				);
    				$result = json_decode($result, true);
    				if ($result['success'] !== true) {
    					$APPLICATION->throwException("Вы не прошли проверку подтверждения личности");
    					return false;
    				}
    			} else {
    				$APPLICATION->throwException("Вы не прошли проверку подтверждения личности");
    				return false;
    			}
    		}
    	}
    ?>
  • Если форма загружается ajax`ом не забудьте обновить каптчу с помощью js-метода grecaptcha.reset();

Есть вопросы или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.

Опубликовано 7 июня 2016 | Обновлено 22 февраля 2024
разработчику, юзабилити
Поделиться
Похожие статьи
Как сделать ИМ дружелюбнее. E-mail уведомления
Наверно это касается всех интернет-магазинов на 1С-Битрикс. Делаешь заказ и понеслось: заказ оформле...
Читать дальше » 0
Алексей,
Получаем адрес посетителя
От браузера или по IP с помощью Yandex Map API для автозаполнения в формах
Читать дальше » 0
Алексей,
Комментарии
❮…❯
Авторизуйтесь чтобы получать уведомления об ответе
22 сен 2018
Есть проблемы с подключением для AJAX. Без него всё работает. Подключение google api прописал в шаблоне. А когда с AJAX, получается так: 1. Выводится форма с reCaptcha 2. Нажимаю отправку формы без заполнения reCaptcha 3. Выводится ошибка и ссылка, по которой нужно вернуться назад 4. Перехожу по ссылке. Поскольку включен режим AJAX, то и переход происходит без перезагрузки страницы 5. Выводится форма с reCaptcha. Если снова повторить шаги 1-5, то reCaptcha не отобразится. Почему и как исправить?
Алексей
23 сен 2018
Никита, если я правильно понял, то включен стандартный режим работы компонента с ajax. Можно либо переделать форму и сделать отправку данных через ajax самостоятельно. Либо пробуйте так https://blog.budagov.ru/podklyuchaem-goolge-recaptcha-2-k-formam-1sbitriks/#comment95234
14 июл 2018
Не работает ничего по вашей инструкции. Капча появляется, но живет своей жизнью. Нет никакой связи между капчей и кнопкой отправить.
Алексей
17 июл 2018
Михаил, добрый день. При отправке формы (нажатие на кнопку) Вы должны проверить каптчу (сделать запрос в гугл). Пример есть в пункте "Добавляем обработчик добавления элементов в init.php..."
7 дек 2017
Алексей, а можете рассказать подробнее как обновить капчу с помощью grecaptcha.reset()?
Алексей
7 дек 2017
Игорь, после успешного выполнения ajax запроса. Например на jquery: $.get('path/to/ajax', function(data){ {обновляем форму} grecaptcha.reset(); }); Вообще в любой момент можете вызвать метод grecaptcha.reset(); и каптча будет обновлена.
8 дек 2017
Спасибо Алексей! Разобрался с вашей помощью! Добавлю, что если компонент работает в режиме "AJAX", то ловим событие onAjaxSuccess и уже в обработчике вызываем grecaptcha.render().
8 авг 2017
Алексей, спасибо за статью! Не понятно только о каком инфоблоке идет речь "Не забудьте заменить секретный ключ в POST параметрах и ID инфоблока"
Алексей
8 авг 2017
Владимир, инфоблок в который добавляются элементы из формы, к которой вы подключаете рекаптчу. В обработчике события добавления нового элемента есть проверка на ID инфоблока ($arFields['IBLOCK_ID'] == 6), для того что бы код срабатывал только для определенного инфоблока.
21 июн 2017
целый день мучаюсь с этой рекапчей. везде она работает, но только не на битриксе. в общем, ситуаевина какая: component_epilog.php файлы нет. (версия 16 битрикса). постоянно не верный ключ. даже с гитхаба скачать рекапчу файлы по другим инструкциям. ничего не помогает.
Алексей
21 июн 2017
Fhntv, файл component_epilog.php необходимо создать, если его нет. С Битриксом тяжело работать без изучения курсов и документации. Статья все же для тех кто уже хорошо разбираться в битриксе и кому необходим алгоритм подключения рекаптчи, а не готовый вариант.
3 мая 2017
Здравствуйте, хотела подключить рекапчу от гугл по вашему описанию, но капча не проходит проверку. И вот эта строка если вставляю выдаёт ошибку Можете подсказать в чём может заключаться моя ошибка?
Алексей
4 мая 2017
Елена, возможно у вас отключена функция file_get_contents(), проверьте параметр php allow_url_fopen, должен быть On. И похоже у вас старое ядро, используйте вместо "\Bitrix\Main\Page\Asset::getInstance()->addJs();" старый метод: $APPLICATION->AddHeadScript();
30 мар 2017
init.php где находится?
Алексей
30 мар 2017
andrey, /bitrix/php_interface/init.php или /local/php_interface/init.php. Без необходимых знаний не рекомендую самостоятельно создавать/редактировать данный файл.
Стандартная каптча, с вводом непонятных символов это уже "прошлый век". Чаще "каптчи" ставят на различные формы. А эти данные очень важны для владельца сайта, т.к. это может быть заказ услуги, обратная связь, регистрация в партнерском разделе и т.п. Важно что бы защита от ботов не стала проблемой для ваших посетителей.