+7 (987) 026-06-36
Написать в Telegram

Оставить заявку
stanislav_web

Подключение reCAPTCHA v3 к веб-формам 1С-Битрикс

Подключение reCAPTCHA v3 к веб-формам 1С-Битрикс Объясняю и показываю примеры решений разных задач с которыми сталкивался и сталкиваюсь в процессе работы

Подключение reCAPTCHA v3 к веб-формам 1С-Битрикс

Объясняю и показываю примеры решений разных задач с которыми сталкивался и сталкиваюсь в процессе работы

📅 28 ноября 2023

👁‍🗨 1403

🔥 0

Подключение reCAPTCHA v3 к веб-формам 1С-Битрикс
<? // /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');
?>