Проблема с reCAPTCHA v3 проверить счет - PullRequest
0 голосов
/ 28 января 2019

Попытка добавить в мою форму контакта для моего сайта контактную информацию, и у меня возникают проблемы с получением результата, если я не установил оценку 0,0.Даже 0,1 пинает его спамом.Есть много примеров того, как реализовать, и я попробовал несколько из них, но мне не повезло (так как несколько для разных версий, что затрудняет работу для нас, новичков).

В любом случаеВот урезанная версия html-страницы формы, которую я пытаюсь использовать:

<head>
<script src='https://www.google.com/recaptcha/api.js?render=KEY'></script>
</head>
<body>
<form name="contactform" action="send_form_email.php" method="post">
<div class="input-group">
    <span class="input-group-label">Name</span>
    <input name="realname" class="input-group-field" type="text" value="Your Name Here" maxlength="50" onFocus="this.value=''">
</div>
<div class="input-group">
    <span class="input-group-label">Email</span>
    <input name="email" class="input-group-field" type="email" value="Your E-Mail Here" maxlength="50" onFocus="this.value=''">
</div>
<div class="input-group">
    <span class="input-group-label">Message</span>
    <textarea name="message" rows="10"></textarea>
</div>          
<input type="Submit" class="button" value="SEND"><input type="Reset" class="button" value="RESET">
</form>
<script>
    $(function(){ //wait for document ready
        grecaptcha.ready(function() {
            grecaptcha.execute('KEY', {action: 'contactUs'}).then(function(token) {
            // Verify the token on the server.
            });
        });
    });
</script>
</body>

Итак, у меня есть PHP-форма send_form_email.php, которую я использую, чтобы позаботиться обо всехтяжелая работа:

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Build POST request:
$recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify';
$recaptcha_secret = 'SECRET_KEY';
$recaptcha_response = $_POST['g-recaptcha-response'];
// Make and decode POST request:
$recaptcha = file_get_contents($recaptcha_url . '?secret=' . $recaptcha_secret . '&response=' . $recaptcha_response);
$recaptcha = json_decode($recaptcha);

    // Take action based on the score returned:
    if ($recaptcha->score >= 0.0) {
    // This is just where I take care of formatting the email and sending it to me, which is working just fine... well while the score is set to 0.0
    }
    } else {
    // otherwise, let the spammer think that they got their message through
    header('Location: success.htm');
    exit();
    }
}
?>

Так вот, где я столкнулся с моей проблемой.В приведенном выше коде он установлен на 0.0, и это ЕДИНСТВЕННЫЙ способ, которым электронные письма приходят вообще.Но, конечно, это пропускает спам или реальные сообщения, потому что это в основном отключено.Как я уже сказал, если я установлю его даже на 0,1, он не пройдет проверку счета и никогда не отправит электронное письмо.Я уверен, что это что-то простое, что я пропускаю, или я не передаю информацию правильно или что-то в этом роде, но документация Google не очень полезна.Поэтому я надеюсь, что кто-то может указать, что я пропустил?

Спасибо!

1 Ответ

0 голосов
/ 31 января 2019

Наконец нашел ответ здесь , который дал мне именно то, что я искал.Несколько простых примеров кода, который работает!(почему Google не может этого сделать?) Он не был указан в качестве «принятого» ответа, он ниже того, но принятый ответ просто швыряет вас в мерзавца, который смехотворно сбивает с толку нубов.

Вот мой отредактированный код, приведенный выше:

<head>
<script src='https://www.google.com/recaptcha/api.js?render=YOUR_KEY_HERE'></script>
</head>
<body>
<form name="contactform" action="send_form_email.php" method="post">
<input type="hidden" id="g-recaptcha-response" name="g-recaptcha-response">
<input type="hidden" name="action" value="validate_captcha">
<div class="input-group">
    <span class="input-group-label">Name</span>
    <input name="realname" class="input-group-field" type="text" value="Your Name Here" maxlength="50" onFocus="this.value=''">
</div>
<div class="input-group">
    <span class="input-group-label">Email</span>
    <input name="email" class="input-group-field" type="email" value="Your E-Mail Here" maxlength="50" onFocus="this.value=''">
</div>
<div class="input-group">
    <span class="input-group-label">Message</span>
    <textarea name="message" rows="10"></textarea>
</div>          
<input type="Submit" class="button" value="SEND"><input type="Reset" class="button" value="RESET">
</form>
<script>
    $(function(){ //wait for document ready
        grecaptcha.ready(function() {
            grecaptcha.execute('YOUR_KEY_HERE', {action: 'contactUs'}).then(function(token) {
            // Verify the token on the server.
            document.getElementById('g-recaptcha-response').value = token;
            });
        });
    });
</script>
</body>

Затем пересмотренная форма PHP с именем send_form_email.php, которую я использую для выполнения всей тяжелой работы:

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Build POST request:
$recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify';
$recaptcha_secret = 'YOUR_SECRET_KEY';
$recaptcha_response = $_POST['g-recaptcha-response'];
// Make and decode POST request:
$recaptcha = file_get_contents($recaptcha_url.'?secret='.$recaptcha_secret.'&response='.$recaptcha_response);
$recaptcha = json_decode($recaptcha);

    // Take action based on the score returned:
    if ($recaptcha->score >= 0.5) {
    // Basically if the score is equal to or better than the above, you have a good one and can send your email off and this is just where you would do that
    }
    } else {
    // otherwise, let the spammer think that they got their message through
    header('Location: success.htm');
    exit();
    }
}
?>

На данный момент он показывает 0,5 балла, но вы, конечно, должны проверить своего администратора в Google и посмотреть, какие баллы вы получаете, и откорректировать при необходимости.

...