Странно, что документация Google для recaptcha не так полезна, как я думал, это будет. Меня попросили принять текущую существующую форму (которая получает спам несколько раз в день) и обновлять ее с помощью новой recaptcha от Google. Есть много учебников для старого капчи, но не так много для нового. Я просто хочу, чтобы простая форма захватила имя, адрес электронной почты, сообщение, а затем заменила мое текущее «поле борьбы с ботом» на recaptcha (я использовал поле, в котором в основном спрашивали вас, что такое 2 + 2, и если вы ввели что-либо, но 4, он не отправил). Если требуемые поля действительны и вернавка действительна, я хочу, чтобы она отправила мне электронное письмо с содержимым полей формы.
Я прошел через простые шаги:
зарегистрировал мой сайт, чтобы получить ключи
добавлен этот фрагмент внутри моей теги:
<script src='https://www.google.com/recaptcha/api.js'></script>
добавлен этот фрагмент в конце моей формы:
<div class="g-recaptcha" data-sitekey="#MYKEY#"></div>
На данный момент, recaptcha появляется просто отлично. Но часть на стороне сервера немного запутанна.
Это моя обновленная контактная форма с показанием recaptcha:
<form method="post" action="contact-post.php"> <label>Your Name (required):</label> <input name="name" type="text" placeholder="Enter your name here"> <label>Email Address (required):</label> <input name="email" type="email" placeholder="Enter your email address here"> <label>Your Message (required):</label> <textarea name="message" placeholder="Write your message here"></textarea> <div style="margin-top:20px;" class="g-recaptcha" data-sitekey="#MYKEY#"></div> <input id="submit" name="submit" type="submit" value="Submit Form"> </form>
И вот моя текущая страница POST (я не уверен, где добавить код recaptcha):
<?php $name = $_POST['name']; $email = $_POST['email']; $message = $_POST['message']; $human = $_POST['human']; $from = 'From: My Website'; $to = 'myemail@gmail.com'; $subject = 'Request Form'; $body = "Name: $name \n E-Mail: $email \nMessage:\n$message"; if ($_POST['submit']) { if ($email != '') { if ($human == '4') { if (mail ($to, $subject, $body, $from)) { echo '<p>You have successfully submitted your information to PS4RS. Subscribers to our mailing list will begin to periodically receive updates.</p>'; } else { echo '<p>Something went wrong, go back and try again!</p><p><input type="button" value="Go Back" onclick="history.back(-1)" class="goback" /></p>'; } } else if ($_POST['submit'] && $human != '4') { echo '<p>You answered the anti-spam question incorrectly!</p><p><input type="button" value="Go Back" onclick="history.back(-1)" class="goback" /></p>'; } } else { echo '<p>You need to fill in all required fields!!</p><p><input type="button" value="Go Back" onclick="history.back(-1)" class="goback" /></p>'; } } ?>
Любая помощь приветствуется. Я чувствую, что это могут быть довольно распространенные люди с людьми, которые пытаются внедрить его в свои текущие рабочие формы.
Проверьте эту ссылку: https://developers.google.com/recaptcha/docs/verify
В нескольких словах вы должны подать запрос на
https://www.google.com/recaptcha/api/siteverify?secret=YOUR_SECRET&response=RESPONSE_CAME_FROM_YOUR_FORM&remoteip=USER_IP_ADDRESS
Если YOUR_SECRET является секретным ключом, который вы получили на сайте ReCAPTCHA, USER_IP_ADDRESS может быть получен через массив $_SERVER
а RESPONSE_CAME_FROM_YOUR_FORM – это строка, отправленная с вашей формой. Он хранится в $_POST['g-recaptcha-response']
.
Вы можете сделать это через file_get_contents($url)
как
$data = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=YOUR_SECRET&response=RESPONSE_CAME_FROM_YOUR_FORM&remoteip=USER_IP_ADDRESS");
В $data
вы получите объект JSON, содержащий поле success
, которое вы ищете. Если успех неверен, то это не человек, и вы должны exit()
. Я предлагаю вам проверить это в начале вашей программы.
Обновление :
Декодирование объекта JSON выглядит так:
$data = json_decode($data); // This will decode JSON to object if(!$data->success) exit();
Обновление :
Иногда file_get_contents($url)
не сможет настроить защищенное соединение https. Вместо этого вы можете использовать open_https_url($url)
Сделайте свой код похожим:
<?php $your_secret = "<secret_key_you_received_from_recaptcha_site>"; $client_captcha_response = $_POST['g-recaptcha-response']; $user_ip = $_SERVER['REMOTE_ADDR']; $captcha_verify = open_https_url("https://www.google.com/recaptcha/api/siteverify?secret=$your_secret&response=$client_captcha_response&remoteip=$user_ip"); $captcha_verify_decoded = json_decode($captcha_verify); if(!$captcha_verify_decoded->success) die('DIRTY ROBOT'); $name = $_POST['name']; $email = $_POST['email']; $message = $_POST['message']; $human = $_POST['human']; $from = 'From: My Website'; $to = 'myemail@gmail.com'; $subject = 'Request Form'; $body = "Name: $name \n E-Mail: $email \nMessage:\n$message"; if ($_POST['submit']) { if ($email != '') { if ($human == '4') { if (mail ($to, $subject, $body, $from)) { echo '<p>You have successfully submitted your information to PS4RS. Subscribers to our mailing list will begin to periodically receive updates.</p>'; } else { echo '<p>Something went wrong, go back and try again!</p><p><input type="button" value="Go Back" onclick="history.back(-1)" class="goback" /></p>'; } } else if ($_POST['submit'] && $human != '4') { echo '<p>You answered the anti-spam question incorrectly!</p><p><input type="button" value="Go Back" onclick="history.back(-1)" class="goback" /></p>'; } } else { echo '<p>You need to fill in all required fields!!</p><p><input type="button" value="Go Back" onclick="history.back(-1)" class="goback" /></p>'; } } ?>
Возможно, вышеупомянутый ответ немного устарел, поскольку Google теперь использует reCaptcha nocaptcha. Я нашел более простой и более полный ответ здесь для использования с вашим отдельным файлом электронной почты php.
Решение имеет простую форму электронной почты с именем и электронной почтой и отдельный файл php для отправки формы. Вы должны быть в состоянии пойти оттуда и настроить свою форму соответственно. Решение работало для меня.
https://stackoverflow.com/a/27439796/3934886
и ссылку на учебник: