Добавляем 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="g-recaptcha" data-sitekey="YYY" data-callback="onSubmit" data-action="submit">Отправить</button>
</form>