Last active
August 19, 2022 20:15
-
-
Save Yalme/eb28d42007e0d5b8f89b6e143308c24e to your computer and use it in GitHub Desktop.
Multiple Invisible Google Recaptcha
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//// 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('[email protected]'); | |
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('[email protected]', 'Ошибка на '.$_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