Добавляем 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>