Установка reCAPTCHA v3 на сайт или лендинг

Раньше капча выглядела как набор картинок с числами, или как решение примеров а-ля “2 + 2”. С ботами, конечно, она отлично справляется, но уж слишком раздражает нормальных пользователей. Порой вместо нормального входа требует жмакать на кучу картинок с машинами или дорожными знаками.

В нынешнее время технологии дошли до невиданных высот. Спасибо Google за попытку исправить вселенскую несправедливость. Представляю вашему вниманию: reCAPTCHA v3.

Новая версия, в общем, та же история, только теперь она старается меньше напрягать юзеров. Она следит за тем, что ты там на сайте делаешь, и выставляет тебе баллы. Потом, в зависимости от этого балла, ты как владелец сайта можешь что-то сделать: блокировать отправку, требовать проверку вручную или вообще всё разрешать.

Здесь я покажу как подключить её на примере HTML + JS + PHP.


Регистрация

Для начала заходим на сайт https://www.google.com/recaptcha/admin/, логинимся под аккаунтом Гугла, выбираем “Зарегистрировать новый сайт”, даём имя, выбираем “reCAPTCHA v3”, добавляем свои домены и заканчивает кликом на “Зарегистрироваться”. После нехитрых манипуляций тебе дадут два ключа – “Ключ сайта” и “Секретный ключ”.

Интеграция на стороне клиента

Дальше мы встраиваем эту штуку на свой сайт. Заменяем “YOUR_RECAPTCHA_SITE_KEY” на “Ключ сайта” из админки reCAPTCHA.

Смысл кода такой: после инициализации гугловских скриптов уже наш скрипт перебирает все формы, создаёт скрытое поле “recResponse” и прописывает туда токен.

<script src="https://www.google.com/recaptcha/api.js?render=YOUR_RECAPTCHA_SITE_KEY"></script>

<script>
        grecaptcha.ready(function () {
            grecaptcha.execute('YOUR_RECAPTCHA_SITE_KEY', { action: 'send_form' }).then(function (token) {
                let recResponse = document.querySelectorAll('form');
                
                if (recResponse.length){
                    recResponse.forEach((form) => {
                        let input = document.createElement("input");
                        input.setAttribute('type', 'hidden');
                        input.setAttribute('name', 'recResponse');
                        input.setAttribute('value', token);
                        
                        form.appendChild(input);
                    })
                }
            });
        });
</script>

Далее просто отправляем любым удобным способом форму на файл /send.php (или любое другое название и/или путь файла).

Интеграция на стороне сервера

На серверной стороне пишем код, который проверяет этот токен.

Для этого заменяем “YOUR_RECAPTCHA_SECRET_KEY” в коде на тот, что нам дали в админке reCAPTCHA.

<?php
    $_POST['server'] = $_SERVER['HTTP_HOST'];

    if (isset($_POST['recResponse'])){
            // Создаем POST запрос
            $recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify';
            $recaptcha_secret = 'YOUR_RECAPTCHA_SECRET_KEY';
            $recaptcha_response = $_POST['recResponse'];
         
            // Отправляем POST запрос и декодируем результаты ответа
            $recaptcha = file_get_contents($recaptcha_url . '?secret=' . $recaptcha_secret . '&response=' . $recaptcha_response);
            $recaptcha = json_decode($recaptcha);
         
            // Здесь можно поменять score от 0.1 до 1.0
            if ($recaptcha->score >= 0.4) {
               // Отправляем форму куда нам нужно
            }
    }
?>

И вы снова великолепны!

Итог

Теперь, в зависимости от балла который получит пользователь при отправке формы, можем что-то предпринять. Если уверены, что это человек, то отправляем сообщение, а если что-то не так – показываем ошибку.

После долгих опытах на более 30-ти сайтах могу посоветовать не делать “score” ниже 0.3. Иначе совсем загадят вашу CRM, или куда вы там хотите отправлять формы.

Exit mobile version