Сообщение об ошибке
Мы обнаружили, что ваш сайт не проверяет решения reCAPTCHA. Это необходимо для правильного использования reCAPTCHA на вашем сайте. Пожалуйста, посетите наш сайт разработчика для получения дополнительной информации.
Я создал этот код reCaptcha, он работает хорошо, но я не знаю, как его проверить, я думал, что это проверка с помощью функции
grecaptcha.getResponse();
но это было не так.
Судя по всему, на сайте хорошо работал recaptcha, но я только что увидел в админе Google следующее сообщение:
Требования:
1. Не используйте action="file.php"
в форме, только функция JavaScript в форме.
<!DOCTYPE>
<html>
<head >
<title></title>
<script src='https://www.google.com/recaptcha/api.js'></script>
<script type="text/javascript">
function get_action() {
var v = grecaptcha.getResponse();
console.log("Resp" + v );
if (v == '') {
document.getElementById('captcha').innerHTML = "You can't leave Captcha Code empty";
return false;
}
else {
document.getElementById('captcha').innerHTML = "Captcha completed";
return true;
}
}
</script>
</head>
<body>
<form id="form1" onsubmit="return get_action();">
<div>
<div class="g-recaptcha" data-sitekey="6LdNIlAUAAAAADS_uVMUayu5Z8C0tw_jspdntbYl"></div>
</div>
<input type="submit" value="Button" />
<div id="captcha"></div>
</form>
</body>
</html>
grecaptcha.getResponse()
Функция предоставит вам только токен ответа пользователя, который затем должен быть подтвержден HTTP POST
позвоните на сервер Google reCAPTCHA.
Вы можете использовать AJAX-запрос для проверки токена, но эти проверки всегда должно быть сделано на стороне сервера, по соображениям безопасности — JavaScript всегда мог вмешиваться пользователем и обманывать себя, полагая, что reCAPTCHA была успешно проверена.
После получения токена ответа его необходимо проверить с помощью reCAPTCHA, используя следующий API, чтобы убедиться, что токен действителен.
Итак, что вам нужно сделать, это отправить ваш секрет reCAPTCHA (второй ключ, который был сгенерирован для вас на странице администратора reCAPTCHA) и токен ответа пользователя (тот, который был получен от grecaptcha.getResponse()
функция), чтобы reCAPTCHA API, как описано в reCAPTCHA документы.
В PHP, вы бы сделали что-то вроде этого:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.google.com/recaptcha/api/siteverify");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([
'secret' => YOUR_RECAPTCHA_SECRET,
'response' => USER_RESPONSE_TOKEN,
]));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);
$response = @json_decode($data);
if ($response && $response->success)
{
// validation succeeded, user input is correct
}
else
{
// response is invalid for some reason
// you can find more in $data->{"error-codes"}
}
Это то, что я хотел бы предложить …
1.) Добавьте строку запроса в ваш скрипт reCPATCHA. Также для повышения производительности, предотвращает блокировку рендера, вы можете добавить async defer
атрибуты вашего <script ...>
, И для правильности вы должны переместить скрипт в после <form>
в ДОМ. ...</form> <script src='https://www.google.com/recaptcha/api.js?onload=recaptchaRender' async defer></script>
,
2.) Добавьте новую функцию с именем recaptchaRender()
, Чтобы обработать вашу проверку в Google и разгрузить ответ на ваш обратный вызов get_action
, замещать RECAPTCHA_SITE_KEY
с вашим ключом сайта Google.
function recaptchaRender{
grecaptcha.render( 'reCaptchSubmit', {
'sitekey': 'RECAPTCHA_SITE_KEY',
'callback': get_action
});
}
3.) Добавить id="reCaptchSubmit"
на кнопку отправки.
4.) Удалить onsubmit="return get_action();"
от вашего элемента формы.
По сути, вам не хватало аутентификации между вашим скриптом и Google. Это не обрабатывает проверку ваших форм, но, по крайней мере, приведет вас к обратному вызову рендеринга get_action()
где вы можете обрабатывать валидацию — возможно, вы захотите переименовать что-то более актуальное, т.е. validateForm()
так далее