Подключение reCAPTCHA v3 к веб-формам 1С-Битрикс
Объясняю и показываю примеры решений разных задач с которыми сталкивался и сталкиваюсь в процессе работыПодключение reCAPTCHA v3 к веб-формам 1С-Битрикс
Объясняю и показываю примеры решений разных задач с которыми сталкивался и сталкиваюсь в процессе работы
📅 28 ноября 2023
👁🗨 1403
<? // /local/templates/sw/header.php
use \Bitrix\Main\Page\Asset;
Asset::getInstance()->addJs('https://www.google.com/recaptcha/api.js?render=site_key');
?>
<? // /local/templates/sw/components/bitrix/form/template/bitrix/form.result.new/.default/template.php ?>
<input type="hidden" name="g-recaptcha-response" id="recaptchaResponse">
<script>
grecaptcha.ready(function () {
grecaptcha.execute('site_key', { action: 'token' }).then(function (token) {
var recaptchaResponse = document.getElementById('recaptchaResponse');
recaptchaResponse.value = token;
});
});
</script>
<? if ($arResult['isFormNote'] == 'Y') { ?>
<script>
openFormModalSuccess();
</script>
<? } ?>
<? // /local/php_interface/init.php
function gRecaptcha_onBeforeResultAdd($WEB_FORM_ID, &$arFields, &$arrVALUES) {
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' => 'secret_key',
'response' => $_REQUEST['g-recaptcha-response'],
'remoteip' => $_SERVER['HTTP_X_REAL_IP']
)
);
$result = json_decode($result, true);
// {
// "success": true,
// "challenge_ts": "2023-11-28T05:40:14Z",
// "hostname": "stanislav-web.com",
// "score": 0.9,
// "action": "token"
// }
if ($result['success'] !== true || $result['score'] < 0.5) {
$APPLICATION->throwException("Похоже, что вы бот!");
return false;
}
} else {
$APPLICATION->ThrowException('Похоже, что вы бот!');
return false;
}
}
AddEventHandler('form', 'onBeforeResultAdd', 'gRecaptcha_onBeforeResultAdd');
?>