Используя RECAPTCHA и при отправке, выдает ошибки, используя file_get_contents () - PullRequest
0 голосов
/ 25 мая 2019

Я использую XAMPP для запуска своего кода на локальном хосте - у меня есть форма, которая позволяет пользователю вводить имя, адрес электронной почты и сообщение. У меня есть виджет RECAPTCHA v2 перед кнопкой отправки. В настоящее время похоже, что ответ file_get_contents фактически не работает для проверки ответа RECAPTCHA, поэтому он не может определить, был ли ответ успешным или нет.

В настоящее время он всегда возвращает 'Invalid Captcha. Пожалуйста, попробуйте еще раз'. $ response никогда не бывает успешным, даже если так и должно быть.

Я получаю следующие предупреждающие сообщения:

Предупреждение: не удалось загрузить поток из кафе: `C: \ xampp \ apache \ bin \ curl-ca-bundle.crt 'в строке C: \ xampp \ htdocs \ oscommerce \ catalog \ recaptchaexample.phpon 105

Предупреждение: file_get_contents (): не удалось включить шифрование в строке C: \ xampp \ htdocs \ oscommerce \ catalog \ recaptchaexample.phpon 105

Предупреждение: file_get_contents (https://www.google.com/recaptcha/api/siteverify?secret=6Lf1EaIUAAAAAEsUH5qVDPzLV0JqHf5d2RpDn155&response=&remoteip=::1): не удалось открыть поток: сбой операции в C: \ xampp \ htdocs \ oscommerce \ catalog \ recaptchaexample.phpon строка 105

Примечание: Попытка получить свойство необъекта в строке C: \ xampp \ htdocs \ oscommerce \ catalog \ recaptchaexample.phpon 111

Неверная капча. Пожалуйста, попробуйте еще раз

<head>
<title>Contact Form Design</title>

<style type="text/css">

body {
    margin: 0;
    padding: 0;
    font-family: sans-serif;
}

.contact-form {
    box-shadow: 0 0 4px 0 4gba(0,0,0,0.5);
    margin: 50px auto;
    width: 350px;
    text-align: center;
}

.contact-form h2 {
    background: #efefef;
    margin-top: 0;
    padding: 10px;
}


.contact-form input {
    display: block;
    width: 90%;
    margin: 10px;
}

.contact-form textarea {
    width: 90%;
    margin: 5px auto;
    padding-left: 10px;
    height: 80px;
}

.submit-btn {
    cursor: pointer;
    width: 150px !important;
    margin-left: 18px;
}


.status {
    font-size: 15px;
    color: green;
    padding: 15px;
}
</style>

<script src="https://www.google.com/recaptcha/api.js" async defer></script>

</head>

<body>
    <div class="contact-form">
<h2>CONTACT US</h2>
<form method="post" action="">

    <input type="text" name="name" placeholder="Your name" required />
    <input type="email" name="email" placeholder="Your email" required />
    <textarea name="message" placeholder="Your message" required ></textarea>


    <div class="g-recaptcha" data-sitekey="sitekey"></div>


    <input type="submit" name="submit" value="Send Message" class="submit-btn">

</form>



<div class="status">

<?php
    if(isset($_POST['submit']))
    { 

        $name = $_POST['name'];
        $email = $_POST['email'];
        $message = $_POST['message'];

        $email_from = "noreply@gmail.com";
        $email_subject = "New Form Submission";
        $email_body = "Name: $name.\n".
                        "Email: $email.\n".
                        "Message: $message.\n";


        $to_email = "toemail";
        $headers = "From: $email_from \r\n";
        $headers = "Reply-To: $email \r\n";

        $secretKey = "secretkey";
        $responseKey = $_POST['g-recaptcha-response'];
        $UserIP = $_SERVER['REMOTE_ADDR'];



           // Verify the reCAPTCHA response 
           $response = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secretKey.'&response='.$responseKey.'&remoteip='.$UserIP); 

            // Decode json data 
            $response = json_decode($response); 


        if ($response->success)
        {
            mail($to_email,$email_subject,$email_body,$headers);
            echo "Message sent succesfully";
        }
        else
        {
            echo "Invalid Captcha. Please try again";
        }

    }
?>
</div>

</div>




</body>
</html>

...