Уроки по программированию

Как настроить google recapcha v3

SITE_KEY и SECRET_KEY необходимо получить с сервиса google

Устанавливаем токен на все формы с классом

ts-recapcha-response
<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Recapcha Test</title>
  </head>
  <body>
	<h2>Форма 1</h2>
	<form action="send.php" method="POST">
	   <input type="text" name="name" />
	   <input type="hidden" class="ts-recaptcha-response" name="g-recaptcha-response" />
	   <button>Отправить</button>
	</form>
	
	<h2>Форма 2</h2>
	<form action="send.php" method="POST">
	   <input type="text" name="name" />
	   <input type="text" class="ts-recaptcha-response" name="g-recaptcha-response" />
	   <button>Отправить2</button>
	</form>

	<script src="https://www.google.com/recaptcha/api.js?render=<SITE_KEY>"></script>
	<script>
		// Установка токена на все формы
		grecaptcha.ready(function() {
		   grecaptcha.execute('<SITE_KEY>', {action: 'homepage'}).then(function(token) {
				//console.log(token);
				const allRecapcha = document.querySelectorAll('.ts-recaptcha-response');
				allRecapcha.forEach(item => item.value = token);				
		   });
		});
	</script>
  </body>
</html>

Проверяем качество отправленных данных в файле

send.php
// Объявляем константу
define('SECRET_KEY', '<SECRET_KEY>');
if($_POST){
	function getCaptcha($token) {
        $response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret={$secretKey}&response={$token}");        
        return json_decode($response);
    }
        
    $result = getCaptcha($_POST['g-recaptcha-response']);
        
    if($result->success == true && $result->score > 0.5){
		// Код отправки вашей формы
    }
    else {
		// Сообщение о некачественно заполненных данных
		// Сюда попадает в том случае если пользователь/робот не прошел проверку recapcha v3
    }
}

Комментарии к статье

  • Оставьте первый комментарий - автор старался

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *