1. Главная
  2. Блог
  3. 1С-Битрикс
  4. Добавление reCAPTCHA на сайт с 1С-Битрикс

Добавление reCAPTCHA на сайт с 1С-Битрикс

Процесс получения ключей reCAPTCHA v3 довольно прост и описан на многих сайтах, поэтому не будем на этом останавливаться.

Оставим только ссылку на сервис reCAPTCHA:

https://www.google.com/recaptcha/admin/

Итак мы получили ключ сайта и секретный ключ

recaptcha ключи

Во время своей работы reCAPTCHA v3 собирает данные о взаимодействии с сайтом и формирует специальную строку — токен.

Токен необходимо передать на сервер, обслуживающий сайт, сервер с применением секретного ключа делает запрос к сервису reCAPTCHA v3. Ответ содержит число в диапазоне от 0 (бот) до 1 (человек). Далее вы самостоятельно определяете проходное значение для своего сайта.

Исходя из этой информации сервер "решает" — обрабатывать или нет полученный от пользователя запрос

Если на вашем сайте под управлением 1С-Битрикс используется компонент Веб-формы, то наиболее простым решением будет использование решений из Маркетплейса, которые заменяют стандартную капчу на reCaptcha.

Далее рассмотрим пример подключения reCAPTCHA v3 для сайта под управлением БУС 1С-Битрикс, для случая когда используются формы не на основе компонента Веб-формы. Обращаем внимание что часть кода для reCAPTCHA помечена соответствующими комментариями в начале и в конце. А некоторые строки закомментированы.

В файле footer.php шаблона размещаем полученный ключ сайта


<script type="text/javascript">		
//popup order
$('#popup-order1').dialog({
	autoOpen: false,
	modal: true,
	resizable: false,
	draggable: false,
	width: 300,
	show: { effect: "fade", duration: 400 },
	hide: { effect: "fade", duration: 400 },
	dialogClass: '',
	title: ''
})
$('.js-btn-popup-order1').on('click', function() {
	$('#popup-order1').dialog('open');
	return false;
})


$('#form1').each(function(){
	var $form = $(this),
	$inpRequ  = $form.find('.reqired'),

	init = function(){
$form.on('submit', submit);
$inpRequ.on('focusin', focusIn);
	},

	submit = function(e){
e.preventDefault();
var error = false;
$inpRequ.each(function(){
	if ($(this).val() == '') {
$(this).addClass('inp-error');
error = true;
	}
});

if (!error) {
	//$.post($form.attr('action'), $form.serialize()); комментируем
	//$(this).addClass('frm-succefull'); комментируем
//recaptcha start
	if ($form.find('.g-recaptcha-token').length) {
grecaptcha.execute('6LcDZ2....b8b9K', {action:'validate_captcha'})//КЛЮЧ САЙТА
	.then(function(token) {
$form.find('.g-recaptcha-token').val(token);

postForm();
	});
	}
	else
postForm();
}
	},
	postForm = function(){
$.post($form.attr('action'), $form.serialize(), function(result){
if (result) {
  if (result.success)
  	$form.addClass('frm-succefull');
  else
  {
	$form.addClass('error');
	$form.find('.frm-error .details').text(result.error);
  }
}
else
{
  $form.addClass('error');
  $form.find('.frm-error .details').text('Неизвестная ошибка');
}
}, 'json');
	},//recaptcha end

	focusIn = function(){
$(this).removeClass('inp-error');
	};

	init();
});
</script>	

В нашем случае обработчик формы указан в теге формы <form action="send.php"..... Вносим изменения в файл send.php, расположенный в корне сайта


<?
//recaptcha блок получения оценки капчи (score) капчи - значение score можно изменять от 0 до 1
$capcha_ok = false;
$google_response = null;
if (@$_POST['g-recaptcha-token'])
{
    $google_response = file_get_contents(
        "https://www.google.com/recaptcha/api/siteverify?secret=".
        '6LcDZ2Yp....o6'. //СЕКРЕТНЫЙ КЛЮЧ
        "&response=" . @$_POST['g-recaptcha-token'].
        "&remoteip=" . $_SERVER['REMOTE_ADDR']
    );
    $google_response = json_decode($google_response);
    if ($google_response && $google_response->success && $google_response->score > 0.4)
        $capcha_ok = true;
}

if ($capcha_ok)
{//recaptcha конец получения оценки
//require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
    require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");//добавляем вместо предыдущей строки

$strEmail = COption::GetOptionString("main", "email_from", "");


if(SITE_CHARSET == "windows-1251")
.........

$success = mail($strEmail, $subject, $template, $headers);
//echo ($success) ? 'true' : 'false'; комментируем
    
    //recaptcha сообщения отправки формы
    if ($success)
        echo json_encode(['success' => true, 'score' => $google_response ? $google_response->score : null]);

    else
        echo json_encode(['success' => false, 'error' => 'Ошибка отправки письма', 'score' => $google_response ? $google_response->score : null]);
}
else
    echo json_encode(['success' => false, 'error' => 'Ошибка прохождения капчи', 'score' => $google_response ? $google_response->score : null]);
//recaptcha end
//require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php"); комментируем

?>

Проверка полученного значения score и прохождения капчи в консоли Google Chrome

recaptcha ошибка прохождения

recaptcha score

Комментарии
Name
Email
Phone
Ваше имя
Ваш email
Оставить комментарий
Нажмите для звонка
Хотите заказать сайт?
Обращайтесь любым удобным способом и мы поможем подобрать интересный вариант для Вас!