Skip to content

Instantly share code, notes, and snippets.

@Yalme
Last active August 19, 2022 20:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Yalme/eb28d42007e0d5b8f89b6e143308c24e to your computer and use it in GitHub Desktop.
Save Yalme/eb28d42007e0d5b8f89b6e143308c24e to your computer and use it in GitHub Desktop.
Multiple Invisible Google Recaptcha
//// multiple invisible recaptca, dont forget tot set $g_recaptcha_secret and data-sitekey
//// FORM / add to any form you want to check attribute like this
<form data-recaptcha="1"></form>
//// HTML / add this one time in any place, before body tag for example -->
<script>
var yal_grecaptcha_form;
var yal_grecaptcha_form_executed = false;
$(function() {
$('form').on('submit', function (e) {
console.log('fired submit');
if ($(this).data('recaptcha')) {
if (yal_grecaptcha_form_executed == false) {
console.log('execute recaptcha');
e.preventDefault();
yal_grecaptcha_form = $(this);
yal_grecaptcha_form.find('[type=submit]').prop('disabled', true);
grecaptcha.execute();
}
} else {
console.log('no need recaptcha');
}
});
});
function yal_grecaptcha_on_submit (token) {
console.log('fired yal_grecaptcha_on_submit');
yal_grecaptcha_form.append('<input type="hidden" name="g-recaptcha-response" value="'+token+'" />');
yal_grecaptcha_form_executed = true;
yal_grecaptcha_form.submit();
};
</script>
<script src="https://www.google.com/recaptcha/api.js" async defer ></script>
<div class="g-recaptcha" data-sitekey="6LcgkiccAAdrAALtiOjbOrN3ronJ_LHQOaZZmQ5i" data-callback="yal_grecaptcha_on_submit" data-size="invisible"></div>
<style>.grecaptcha-badge { visibility: hidden; }</style>
//// this is how you handle form in php
<?
if (!empty($_POST)) {
$r = g_recaptcha_check();
if (!empty($r['error'])) {
$m = 'Ошибка! Ваше сообщение распознано автоматическим фильтром как спам. Пожалуйста, свяжитесь с нами любым другим способом, чтобы мы могли предотвратить подобные проблемы в будущем. Ошибка: '.$r['error'].'.';
// mail('yalme@ya.ru');
exit($m);
}
}
function g_recaptcha_check () {
$g_recaptcha_secret = ''; // like 6Lc6wmYaA12AAKgh8GKLpINo7_xiNJHd6slQvXsQ
$g_recaptcha_error = '';
$g_recaptcha_result = false;
if (!empty($_GET['g-recaptcha-response'])) $form_resp = $_GET['g-recaptcha-response'];
if (!empty($_POST['g-recaptcha-response'])) $form_resp = $_POST['g-recaptcha-response'];
if (empty($form_resp)) {
$g_recaptcha_error = 'Не обнаружен код рекапчи из формы.';
// $g_recaptcha_error = __('Не обнаружен код рекапчи из формы.');
// return false;
} else {
$data = array(
'secret' => $g_recaptcha_secret,
'response' => $form_resp,
'remoteip' => $_SERVER['REMOTE_ADDR'],
);
$verify = load(array(
'url' => 'https://www.google.com/recaptcha/api/siteverify',
'post' => http_build_query($data)
));
$response = json_decode($verify, true);
// debug($response); exit('j89fd43wj98f9pjg9wn');
if (empty($response)) {
$g_recaptcha_error = 'Не удалось получить ответ от серверов Google.';
// $g_recaptcha_error = __('Не удалось получить ответ от серверов Google.');
}
if (!empty($response['error-codes'])) {
$g_recaptcha_error = $response['error-codes'][0];
}
}
if (!empty($g_recaptcha_error)) {
mail('yalme@ya.ru', 'Ошибка на '.$_SERVER['SERVER_NAME'].'', 'Не сработала капча, ошибка: '.$g_recaptcha_error);
exit('Проверка формы на спам не удалась. Ошибка: '.$g_recaptcha_error);
// message(__('Проверка формы на спам не удалась. Ошибка: ').$g_recaptcha_error, 'error');
// message(__('Проверка формы на спам не удалась. Ошибка: ').$g_recaptcha_error, 'error');
}
if (empty($g_recaptcha_error)) $g_recaptcha_result = true;
return array(
'result' => $g_recaptcha_result,
'error' => $g_recaptcha_error,
);
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment