Google Recaptha V3 + PHP

Тимур Беретарь / 2021-07-05

Для начала получаем SiteKey и Secret Key со админки Google Recaptcha

Далее подключаем JS

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

Сама форма может быть произвольной, главное добавить в нее скрытый input, для хранения токена:

<input type="hidden" name="form[recaptcha]" class="recaptchaResponse hidden">

Обработчик нажатия кнопки submit:

$('form').on('submit',function(){
    let form = $(this);
 
    grecaptcha.ready(function () {
        grecaptcha.execute('reCAPTCHA_site_key', {action: 'feedback'}).then(function (token) {
            var recaptchaResponse = form.find('.recaptchaResponse');
            recaptchaResponse.val(token);
            $.post('/',form.serialize() ,function(data){
                $('form').hide('slow');
                $('.post_form_success').html(data);
            });
        });
    });
 
    return false;
});

Собственно, сам код PHP:

// Составляем POST-запрос, чтобы получить от Google оценку reCAPTCHA v3
$recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify';
$recaptcha_secret = 'reCAPTCHA_secret_key';
$recaptcha_response = $form['recaptcha'];
$recaptcha = file_get_contents($recaptcha_url . '?secret=' . $recaptcha_secret . '&response=' . $recaptcha_response);
$recaptcha = json_decode($recaptcha);
 
if ($recaptcha->success == true && $recaptcha->score >= 0.5 && $recaptcha->action == 'feedback') {
//здесь что-то делаем, если проверка прошла успешно
}

action - произвольный идентификатор, который позволяет нам определить, проверку какого события мы делаем.