Прежде всего, я знаю, что та же проблема уже была обнаружена здесь:
Ошибка: клиентов reCAPTCHA не существует (reCAPTCHA v3) Но поскольку ответы там не привели меня к решению, я попытал здесь удачу.
Поэтому я попытался использовать reCAPTCHA, так как я получаю много спам-писем из формы на моей веб-странице. В моей HTML-главе у меня есть этот код:
<script src="https://www.google.com/recaptcha/api.js?render=MY_SITE_KEY"></script>
<script>
grecaptcha.ready(function() {
grecaptcha.execute("MY_SITE_KEY").then(function(token) {
console.log(token);
});
});
</script>
чтобы загрузить капчу и которая генерирует токен. Когда я отправляю свою форму, я вызываю следующий код AJAX:
$.ajax({
type: 'POST',
url: $(form).attr('action'),
data: {
name: name,
email: email,
message: message,
captcha: grecaptcha.getResponse()
}).done(function(response){ ... })
и, наконец, в PHP я делаю следующее:
<?php
$secret = "MY_SECRET_KEY";
$response = $_POST["captcha"];
$verify=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret={$secret}&response={$response}");
$captcha_success=json_decode($verify);
if ($captcha_success->success==false) {
echo "reCaptcha indentified you as a bot. We don't like bots here.";
}
else if ($captcha_success->success==true) {
// MY WHOLE mail() function here
}
?>
Когда я отправляю форму, я получаю сообщение об ошибке:
Uncaught Error: No reCAPTCHA clients exist.
at Gw (recaptcha__de.js:511)
at Object.Q5 [as getResponse] (recaptcha__de.js:519)
at HTMLFormElement.<anonymous> (main.js:265)
at HTMLFormElement.dispatch (jquery.min.js:3)
at HTMLFormElement.q.handle (jquery.min.js:3)
Что я сделал не так? Я следовал инструкциям Googles, но, может быть, я что-то упустил.