Добавляем recaptcha v3 (невидимая) на сайт, php

01.04.2024
Несколько уточнений:

1) Если вывести капчу визуально, например заменив button на div, то она отображается с ошибкой про ключ, на это не стоит обращать внимания.

2) При срабатывании проверки капчи идет запрос в гугл, потом вызывается data-callback="onSubmit", если форму отправить сращу, то данные будут пустыми. Нужно дождаться колбэка.

 
function soRecaptchaCheck()
{
    $bRet = FALSE;

    $sCaptchaResponse = isset($_REQUEST['g-recaptcha-response'])?$_REQUEST['g-recaptcha-response']:'';
    if($sCaptchaResponse)
    {
        $aParams = [
            'secret' => 'XXX', // секретный_код_google
            'response' => $sCaptchaResponse,
            'remoteip' => $_SERVER['REMOTE_ADDR']
        ];

        $ch = curl_init('https://www.google.com/recaptcha/api/siteverify');
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $aParams);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

        $response = curl_exec($ch);
        if($response) {
            $oResponse = json_decode($response);

            if ($oResponse->success) {
                if ($oResponse->score >= 0.5) {
                    $bRet = TRUE;
                }
            }
        }
    }
    return $bRet;
}

Вывод капчи на фронтэнде:

 
<script src="https://www.google.com/recaptcha/api.js"></script>
<script>
    function onSubmit(token) {
        document.getElementById("demo-form").submit();
    }
</script>

<form id="demo-form" action="1.php">
    <input type="text" name="test">
    <br>
    <button type="submit" class="form-standard__btn fw btn is-orange g-recaptcha" data-sitekey="YYY" data-callback="onSubmit" data-action="submit">Отправить</button>
</form>


Категории: PHP, Сторонние сервисы
Яндекс.Метрика