Установака recaptcha v2 на сайт

Пример подключения ReCaptcha на сайт, регистрация в API, вставка кода в форму, проверка правильности введенной капчи.

1

Итак, сначала нужно добавить сайт в ReCaptcha API перейдя по ссылке https://www.google.com/recaptcha/admin/create (нужна авторизация), в форме нужно указать название и домен сайта где будет использоваться капча.

После отправки формы появится страница с данными для интеграции.

2

Чтобы вывести капчу в форме, нужно подключить api.js и добавить <div> c классом g-recaptcha и атрибутом data-sitekey с открытым ключом.

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

<form method="post" action="#">
	<input type="email">
	<div class="g-recaptcha" data-sitekey="КЛЮЧ_САЙТА"></div>
	<button type="submit">Отправить</button>
</form>
HTML

Пример:

В таком случаи, в формах вставляется <div id="recaptcha-1"></div> и <div id="recaptcha-2"></div> и более, далее к ним подключается recaptcha JS-скриптом.

Форма #1
<form method="post" action="#">
	<input type="email">
	<div id="recaptcha-1"></div>
	<button type="submit">Отправить</button>
</form>

Форма #2
<form method="post" action="#">
	<input type="email">
	<div id="recaptcha-2"></div>
	<button type="submit">Отправить</button>
</form>

<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit">
<script>
var onloadCallback = function(){
	var key = 'КЛЮЧ_САЙТА';
	grecaptcha.render('recaptcha-1', {
		'sitekey': key
	});
	grecaptcha.render('recaptcha-2', {
		'sitekey': key
	});
};
</script>
HTML

Пример:

3

После отправки формы, на стороне сервера, введённый ответ капчи (будет в $_POST['g-recaptcha-response']) нужно отправить на https://www.google.com/recaptcha/api/siteverify вместе с секретным ключом и получить положительный или отрицательный ответ. Данное действие можно реализовать двумя способами:

Вариант на curl (через POST)

$error = true;
$secret = 'СЕКРЕТНЫЙ_КЛЮЧ';

if (!empty($_POST['g-recaptcha-response'])) {
	$curl = curl_init('https://www.google.com/recaptcha/api/siteverify');
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($curl, CURLOPT_POST, true);
	curl_setopt($curl, CURLOPT_POSTFIELDS, 'secret=' . $secret . '&response=' . $_POST['g-recaptcha-response']);
	$out = curl_exec($curl);
	curl_close($curl);
	
	$out = json_decode($out);
	if ($out->success == true) {
		$error = false;
	} 
}    

if ($error) {
	echo 'Ошибка заполнения капчи.';
}
PHP
$error = true;
$secret = 'СЕКРЕТНЫЙ_КЛЮЧ';

if (!empty($_POST['g-recaptcha-response'])) {
	$out = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret=' . $secret . '&response=' . $_POST['g-recaptcha-response']);
	$out = json_decode($out);
	if ($out->success == true) {
		$error = false;
	} 
}

if ($error) {
	echo 'Ошибка заполнения капчи.';
}
PHP
4

Чтобы проверить правильность заполнения капчи перед отправкой формы, можно применить следующий код:

<script src="https://www.google.com/recaptcha/api.js"></script>
 
<form method="post" action="#" id="form">
	<input type="email">
	<div class="g-recaptcha" data-sitekey="КЛЮЧ_САЙТА"></div>
	<button type="submit">Отправить</button>
</form>

<script>
$('#form').submit(function(){
	var response = grecaptcha.getResponse();
	if(response.length == 0) {
		alert('Вы не прошли проверку CAPTCHA должным образом');
		return false;
	}
});
</script>
HTML

Пример:

15.02.2017, обновлено 02.12.2022
30623

Комментарии 5

Алексей Дементьев Алексей Дементьев
22 сентября 2020 в 12:22
В первом примере "Одна капча на странице" какой смысл в капче, если форма отправляется без нажатия на капчу?
Алексей Дементьев Алексей Дементьев
22 сентября 2020 в 12:29
"if (!empty($_POST['g-recaptcha-response'])) {" - откуда при загрузки страницы может появиться параметр "g-recaptcha-response"? Его по любому нет, значит при загрузке страницы появится надпись "Ошибка заполнения капчи".
Или я чего то не понял в этой статье?
Snipp.ru Snipp.ru
22 сентября 2020 в 14:21
При загрузки страницы его нет, добавляется он скриптом ReCAPTCHA при нажатии на кнопку «Отправить».
Александр Третьяков Александр Третьяков
14 декабря 2021 в 17:59
как сделать, так чтоб при установки флажка, меня перекидывало на другой сайт?
Пишите в телеграм с пометкой темы https://t.me/BlackDemar
Руслан Оганесян Руслан Оганесян
8 марта 2022 в 10:55
Здравствуйте! Скажите куда нужно вставлять код из 3-его пункта статьи "Проверка заполнения капчи"?
И как мне тогда использовать мой обработчик формы (у вас в form action ни один php обработчик не указан)?, он у меня используется для передачи заявок с форм в битрикс

, чтобы добавить комментарий.

Другие публикации

Загрузка файлов на сервер PHP
В статье приведен пример формы и php-скрипта для безопасной загрузки файлов на сервер, возможные ошибки и рекомендации при работе с данной темой.
72129
+22
После отправки формы сохранить позицию скролла
В больших формах, с несколькими кнопками «Отправить/сохранить» есть одна проблема – после ее отправки браузер обновит...
11031
+4
Загрузка файлов через AJAX с помощью jQuery Form Plugin
Пример загрузки изображений через AJAX с помощью плагина jQuery Form Plugin.
19338
+7
Публикация записей на стену сообщества VK
Для начала вы должны быть авторизированы в VK и являться администратором группы или страницы. Далее нужно создать...
31343
+9
Использование API Яндекс Диска на PHP
Можно найти множество применений Яндекс Диска на своем сайте, например, хранение бекапов и отчетов, обновление прайсов,...
55895
+20
Автоматическое сжатие и оптимизация картинок на сайте
Изображения нужно сжимать для ускорения скорости загрузки сайта, но как это сделать? На многих хостингах нет...
28409
+8