Подключаем 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();
Есть вопросы или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.