reCaptcha V3 не проходит проверку только при первой отправке формы - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь настроить reCaptcha v3, и это вроде работает. По какой-то причине в первый раз, когда я отправляю форму, она терпит неудачу, но со второй отправки это нормально. Я не могу понять, почему это происходит?

<script src="https://www.google.com/recaptcha/api.js?render=MY_SITE_KEY"></script>
<script>
grecaptcha.ready(function () {
    grecaptcha.execute('MY_SITE_KEY', { action: 'contact' }).then(function (token) {
        var recaptchaResponse = document.getElementById('captcha-response');
        recaptchaResponse.value = token;
    });
});
</script>




 <input type="hidden" name="captcha-response" id="captcha-response">

PHP

$verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secretKey.'&response='.$_POST['captcha-response']);
$responseData = json_decode($verifyResponse);

     if(!$responseData->score < 0.5) {
      $message .= "Verification failed " . $responseData->score;
  }

Когда я отправляю форму в первый раз, я получаю ошибку проверки, но мой результат равен 0,9.

1 Ответ

0 голосов
/ 30 сентября 2019

Почему вы добавили "!"с "$ responseData-> оценка"? вам может потребоваться заменить ваше состояние следующим:

Замените это:

if(!$responseData->score < 0.5) {
    $message .= "Verification failed " . $responseData->score;
}

На это:

if($responseData->score < 0.5) {
    $message .= "Verification failed " . $responseData->score;
}

PS: следующий код занимает несколько секунд, чтобыправильно загрузите и получите код «captcha-reponse», поэтому вам может потребоваться отключить все кнопки отправки и подождать, пока вы не получите «captcha-reponse», чтобы включить кнопку отправки в форме, или вам нужно найти другой способ отложить отправкувыполнять только после того, как вы получили код «captcha-response», иначе вы будете продолжать получать сообщение об ошибке «missing-input-response»

<script src="https://www.google.com/recaptcha/api.js?render=MY_SITE_KEY"></script>
<script>
  grecaptcha.ready(function() {
    grecaptcha.execute('MY_SITE_KEY', {
      action: 'contact'
    }).then(function(token) {
      var recaptchaResponse = document.getElementById('captcha-response');
      recaptchaResponse.value = token;
    });
  });
</script>
...