Для установки Capcha v.2 от Google необходимо иметь аккаунт Google. Если он у вас есть, переходим по ссылке
Там выбираем reCAPTCHA v2 тип флажок, вводим для какого домена мы будем ее использовать, принимаем условия и жмем регистрация.
После этого мы попадаем на страницу с данными о вашей капче и краткой инструкцией по настройке (ссылка на скрипт и div-блок для вставки в html-код формы сайта).
Принцип действия капчи таков. При загрузке страницы загружается java-скрипт капчи и сама капча. Скрипт каким-то хитрым образом анализирует действия посетителя сайта, когда тот ставит галочку в поле “Я не робот” и при отправке данных формы на сервер вместе с данными формы отправляются идентификатор данного анализа в пост-переменной $_POST[‘g-recaptcha-response’].
Получив значение этой переменной вместе с данными формы, скрипт отправляет запрос на сервер гугл на url. Запрос содержит secret (есть в данных по вашей капче) и собственно сам $_POST[‘g-recaptcha-response’] и получает ответ от сервера с информацией робот ли посетитель или нет.
Далее идет простейший пример использования капчи: файлик index.php c формой, файл verify.php c запросом к серверу гугл и собственно сам ответ.
index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>TEST</title> <script src='https://www.google.com/recaptcha/api.js'></script> </head> <body> <h2>Форма обратной связи.</h2> <form name="myform" action="https://site.ru/verify.php" method="post"> <p><input class="input" name="name" type="text" style="width:15%" /> Ваше имя*</p> <p><input class="input" name="email" type="text" style="width:15%" /> Электронная почта*</p> <p><input class="input" name="sub" type="text" style="width:15%" /> Тема сообщения</p> <p>Текст сообщения:<br /><textarea name="body" cols="1" rows="5" style="width:30%" /></textarea></p> <p><input id="submit" value="Отправить" type="submit" /></p> <div class="g-recaptcha" data-sitekey="6LfgWn8Uetetnum,yetepgGbivFErRw"></div> </form> </body> </html> |
verify.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<pre> <?php // массив для переменных, которые будут переданы с запросом $paramsArray = array( 'secret' => '6LfgWn8trrtyewAAwHPMggbrrtwerwrFGVrr', 'response' => $_POST['g-recaptcha-response'] ); // преобразуем массив в URL-кодированную строку $vars = http_build_query($paramsArray); // создаем параметры контекста $options = array( 'http' => array( 'method' => 'POST', // метод передачи данных 'header' => 'Content-type: application/x-www-form-urlencoded', // заголовок 'content' => $vars, // переменные ) ); $context = stream_context_create($options); // создаём контекст потока $result = file_get_contents('https://www.google.com/recaptcha/api/siteverify', false, $context); //отправляем запрос var_dump(json_decode($result, true)); // вывод результата ?> </pre> |
И сам результат, который выводит команда var_dump в предыдущем скрипте:
1 2 3 4 5 6 7 8 9 10 |
array(3) { ["success"]=> bool(true) ["challenge_ts"]=> string(20) "2018-12-14T09:20:54Z" ["hostname"]=> string(7) "site.ru" } |
[“success”] = bool(true) говорит о том, что посетитель не робот.
Оставить комментарий