Готовый сниппет с инструкцией о том как быстро добавить google каптчу на сайт. В данном примере используется язык программирования PHP, но инструкция легко воспроизводится и на других языках программирования, включая Javascript и Python.
Универсальный класс для установки reCaptcha на сайт. Простое использование: - Вывод капчи ReCaptcha::render() - Валидация каптчи ReCaptcha::validate()
Для создания reCaptcha нужно - создать проект в console.cloud.google.com - создать ключ капчи, выбрать параметры - v2, checkbox - создать секретный API ключ для запросов на сервер
Создание ключа доступа в console.cloud.google.com
Можно создать несколько ключей на проект. Для тестирования в процессе разработки, можно отключить проверку домена. Создание ключа reCAPTCHA
Ссылка в константе RECAPTCHA_APIURL содержит \<your-project>. При создании ключа, будет сгенерирована ссылка, в которую нужно подставить API ключ. Ключ подставлять не нужно, в это происходит автоматически.
После этапа регистрации, в инструкциях по установке ключа будут данные, которые необходимо добавить в статические константы класса ReCaptcha.
Фрагмент кода где произвести замену.
const RECAPTCHA_SITEKEY = '<RECAPTCHA_SITEKEY>'; // sitekey
const RECAPTCHA_ACTION = '<ACTION>'; // optional
const RECAPTCHA_APIKEY = '<APIKEY>'; // need create credentials in
const RECAPTCHA_APIURL = 'https://recaptchaenterprise.googleapis.com/v1/projects/<your-project>/assessments?key='; // # Key details Verify the reCAPTCHA token
<?php
class ReCaptcha {
const RECAPTCHA_SITEKEY = '<RECAPTCHA_SITEKEY>'; // sitekey
const RECAPTCHA_ACTION = '<ACTION>'; // optional
const RECAPTCHA_APIKEY = '<APIKEY>'; // need create credentials in
const RECAPTCHA_APIURL = 'https://recaptchaenterprise.googleapis.com/v1/projects/<your-project>/assessments?key='; // # Key details Verify the reCAPTCHA token
public static function validate() {
if (empty($_POST['g-recaptcha-response'])) {
return false;
}
$sitekey = self::RECAPTCHA_SITEKEY;
$apikey = self::RECAPTCHA_APIKEY;
$apiurl = self::RECAPTCHA_APIURL;
$url = $apiurl.$apikey;
$action = self::RECAPTCHA_ACTION;
$body = [
'event' => [
'token' => $_POST['g-recaptcha-response'],
'expectedAction' => $action,
'siteKey' => $sitekey
],
];
$oCurl = curl_init();
curl_setopt($oCurl, CURLOPT_URL, $url);
curl_setopt($oCurl, CURLOPT_POST, true);
curl_setopt($oCurl, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
]);
curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($oCurl, CURLOPT_POSTFIELDS, json_encode($body));
$result = curl_exec($oCurl);
curl_close($oCurl);
$result = json_decode($result); // object
if ($result->tokenProperties->valid) {
return true;
}
return false;
}
public static function render() {
echo "<style>.g-recaptcha {margin: 10px;}</style>";
echo '<script src="https://www.google.com/recaptcha/enterprise.js" async defer></script>';
echo "<div class='g-recaptcha'
data-sitekey=". self::RECAPTCHA_SITEKEY ."
data-action=". self::RECAPTCHA_ACTION .">
</div>";
}
}