Сообщение об ошибке reCaptchav2: мы обнаружили, что ваш сайт проверяет принятые решения reCAPTCHA менее чем в 50% случаев - PullRequest
0 голосов
/ 07 марта 2019

Я интегрировал reCaptcha в тестовую форму, чтобы мы могли использовать reCaptcha для остановки ботов. После завершения всего внешнего и серверного кода я могу проверить, успешно ли пользователь выполнил reCatpha - но когда я проверяю администратора reCaptcha, я вижу это сообщение:

"Мы обнаружили, что ваш сайт проверяет решения, принятые reCAPTCHA, менее чем в 50% случаев. Это может указывать на проблему с вашей интеграцией с reCAPTCHA. Для получения дополнительной информации посетите наш сайт разработчика."

Что я делаю не так с моей проверкой на стороне сервера. Я проверил Stackoverflow и другие сайты на наличие PHP-решения, но проблема не устраняется.

Вот мой код урезанный.

<html lang="en-US">
<head>
<meta charset="UTF-8">
<title>Contact | Blah Blah</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<script src="https://www.google.com/recaptcha/api.js"></script>
</head>
<body>

<?php
    $responseErr = "";
    $responseMsg = ""; // for debugging purposes
    if($_SERVER["REQUEST_METHOD"] == "POST"){

        // reCaptcha server side integraton
        $secretKey = "secretkey-blahblahblahblahblahblahblahblahblahblah"; // required
        $responseKey = $_POST["g-recaptcha-response"]; // required

        $url = "https://www.google.com/recaptcha/api/siteverify?secret=$secretKey&response=$responseKey";
        $response = file_get_contents($url);
        $responseMsg = "<p>The response is: $response</p>"; // for debugging purposes
        $response = json_decode($response);
        if($response->success){

            // recaptcha validates so continue submitting the form.
            $responseErr = '<p><span style="color:green">* reCaptcha verified</span></p>'; // for debugging purposes
        } else {

            // recaptcha doesn't validate so give the user an error message.
            $responseErr = '<p><span style="color:red">* reCaptcha is required</span></p>';
        }
    }
?>

<form class="recaptchaFrom clearfix" method="post">
    <div class="medium-6 columns">
        <label>Name</label>
        <input type="text" placeholder="Full Name">
    </div>
    <div class="medium-6 columns">
        <label>Email</label>
        <input type="email" placeholder="Email">
    </div>
    <div class="medium-12 columns a-left">
        <div class="g-recaptcha m-bottom" data-sitekey="sitekey-blahblahblahblahblahblahblahblahblahblah"></div>    
        <?php echo $responseMsg; // for debugging purposes ?>
        <?php echo $responseErr; ?>             
    </div>
    <div class="medium-12 columns">
        <input type="submit" name="submit" class="button" value="Submit">
    </div>
</form>

</body>
</html>

Ответы [ 2 ]

0 голосов
/ 21 июня 2019
    <?php

        // https://www.youtube.com/watch?v=2NfaBfu_ndc
        $responseErr = "";
        $responseMsg = ""; // for debugging purposes
        if(isset($_POST['submit'])){

            // reCaptcha server side integraton
            $secretKey = "blahblahblahblahblahblahblahblahblahblah"; // required
            $responseKey = $_POST["g-recaptcha-response"]; // required

            $url = "https://www.google.com/recaptcha/api/siteverify?secret=$secretKey&response=$responseKey";
            $responseFile = file_get_contents($url); // send the $url to the Google reCaptcha server for validation and get a response back
            $responseJSON = json_decode($responseFile); // decode the content of the $response
            $debugSKEY = "SECRET KEY is $secretKey"; // for debugging purposes
            if ($responseKey == null){
                $responseKey = '<span style="color:red">empty</span>';
                $urlresponseKey = $responseKey;
            }
            $debugGREC = "G RECAPTCHA RESPONSE is $responseKey"; // for debugging purposes
            $debugURL = "RECAPTCHA URL is $url" . $urlresponseKey; // for debugging purposes
            $debugFILE = "FILE GET CONTENTS is $responseFile"; // for debugging purposes
            if($responseJSON->success == true){

                // recaptcha validates so continue submitting the form.
                $responseErr = '<p><span style="color:green">* reCaptcha verified</span></p>'; // for debugging purposes
            } else {

                // recaptcha doesn't validate so give the user an error message.
                $responseErr = '<p><span style="color:red">* reCaptcha is required</span></p>';
            }
        }
    ?>
0 голосов
/ 05 июня 2019

Я также получил ту же ошибку в администраторе reCAPTCHA.Вы не использовали isset, а также использовали функции urlencode при передаче секретного ключа.Вот так, надеюсь, это решит вашу проблему.

if(isset($_POST['captcha']) && !empty( $_POST['captcha'])){
       $response=$_POST['captcha'];

}

$url = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret=' . urlencode($secret) .  '&response=' . urlencode($response));
...