В этой статье будем подключать Google reCAPTCHA v2 на PHP, эта система нужна для того, что бы на вашем сайте не было спама, поэтому обязательно её установите.
Получение API ключей:
Первым делом нужно получить ключ, для этого заходим на сайт Google reCAPTCHA, и там сверху нажимаем на кнопку «Admin console».
У вас должно открыться в окне с настройками капчи, настраиваем всё как из скриншота.
Как видите, я назвал капчу «Тест», и выбрал reCAPTCHA v2, то есть капча версии два, также выбрал там под пункт флажок «я не робот», это значит на сайте у меня будет отображаться специальный флажок, который при нажатие будет проверять все данные браузера, например, cookie, и если всё в порядке, то я не робот.
Дальше в строчке домен, вводите доменное имя своего сайта, со всем соглашаетесь и нажимаете кнопку «отправить», у вас должно появится на экране два ключа.
Если у вас всё примерно так, то значит создание ключа прошло успешно, верхний ключ используйте на клиенте, а нижний на сервере.
HTML:
Теперь займёмся нашем HTML файлом, тут всё просто, сделаем не большую форму и в строем туда Google капчу.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Google reCAPTCHA</title> <script src="https://www.google.com/recaptcha/api.js" async defer></script> </head> <body> <form action="http://example.com/form.php" method="POST"> <p>Логин: <input type="text" name="login"></p> <p>EMail: <input type="email" name="email"></p> <div class="g-recaptcha" data-sitekey="В пишем ваш клиентский ключ"></div> <hr/> <input type="submit" value="Submit"> </form> </body> </html> |
Как видите всё очень просто, вы подключаете скрипт с API в header
и добавляете в форму специальный div
элемент с классом g-recaptcha
, также имеет атрибут data-sitekey
, который хранит в себе ключ для клиентской части сайта.
Как видите она совершенно нормально отображается у нас.
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 30 31 32 33 34 35 36 37 38 | // Проверка того, что есть данные из капчи if (!$_POST["g-recaptcha-response"]) { // Если данных нет, то программа останавливается и выводит ошибку exit("Произошла ошибка"); } else { // Иначе создаём запрос для проверки капчи // URL куда отправлять запрос для проверки $url = "https://www.google.com/recaptcha/api/siteverify"; // Ключ для сервера $key = "Тут ключ для сервера"; // Данные для запроса $query = array( "secret" => $key, // Ключ для сервера "response" => $_POST["g-recaptcha-response"], // Данные от капчи "remoteip" => $_SERVER['REMOTE_ADDR'] // Адрес сервера ); // Создаём запрос для отправки $ch = curl_init(); // Настраиваем запрос curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $query); // отправляет и возвращает данные $data = json_decode(curl_exec($ch), $assoc=true); // Закрытие соединения curl_close($ch); // Если нет success то if (!$data['success']) { // Останавливает программу и выводит "ВЫ РОБОТ" exit("ВЫ РОБОТ"); } else { // Иначе выводим логин и Email echo $_POST['login'] . "<br/>". $_POST['email']; } } |
Конечно, я написал комментарии, но всё же надо разобрать код, тем более, он тут не такой уж сложный и большой.
Сначала мы проверяем, существует ли переменная в массиве g-recaptcha-response
, которая хранит в себе ключ то Google, если вы оказались не робот, если её нет, то программа выводит на экран «Произошла ошибка» и перестают работать.
Иначе он создаёт запрос для полной проверки на робота, но перед этим мы объявляем две переменные, первая, это переменная с URL, куда отправлять проверку, вторая, хранит ключ, который используется для обмена данными между сайтом и сервисом reCAPTCHA, также создаётся массив для отправки данных на сервер.
Теперь наконец делаем запрос на сервер для полной проверки, я не буду тут объяснять какая команда для чего нужна, лучше посмотрите по этой ссылке.
Можете заметить, что когда мы возвращаем данные, используем функцию json_decode()
, она нужна потому что, сервер возвращает JSON данные, а PHP не умеет читать такой тип данных, первым параметром он принимает JSON, а второй, в нашем случае это $assoc=true
, значение true
нужен, что бы он превращал не в объект, а в массив.
Ну и в конце проверяем, если в массиве нет переменной success
, то программа останавливается и выводит надпись «ВЫ РОБОТ» иначе, выводит логин и email, который вы вводили в начале, вот результат.
Как видите всё работает.
Вывод:
В этой статье вы узнали как подключить Google reCAPTCHA v2 на PHP, и можете заметить, что это достаточно легко, надеюс вам понравилась статья.