Пытаюсь разобраться как прикручивать reCAPTCHA v3 к простой форме обратной связи. На текущий момент вот что получилось реализовать на пару с Интернетом.
1) Страница непосредственно с формой
<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallbackRecap&render=6LfufSsqAAAAAO2YPDSvJYyIMkn******-m2pqw" async defer></script>
<div class="my_form">
<input type="text" name="user" id="user">
<input type="text" name="email" id="email">
<input type="text" name="reviews" id="reviews">
<input type="hidden" name="recaptcha_response" id="recaptchaResponse">
<button class="add-reviews">Отправить</button>
</div>
$(document).ready(function(){
$(".add-reviews").on("click", function(){
var $user= $('#user').val();
var $email = $('#email').val();
var $reviews = $('#reviews').val();
var $arr = [$user, $email, $reviews];
$.ajax({
url: '/about/reviews/send-reviews.php',
type: 'POST',
cache: false,
data: {arr: $arr},
}).done(function(data){
$('#result').val('result');
});
});
var onloadCallbackRecap = function() {
grecaptcha.ready(function () {
grecaptcha.execute('6LfufSsqAAAAAO2YPDSvJYyIMkn******-m2pqw', { action: 'contact_callback' }).then(function (token) {
var recaptchaResponse = document.getElementById('recaptchaResponse');
recaptchaResponse.value = token;
});
});
};
});
2. Страница проверки и отправки сообщения
if (isset($_SERVER["HTTP_X_REQUESTED_WITH"]) && $_SERVER["REQUEST_METHOD"] == "POST" && is_array($_POST["CALLBACK"]) && isset($_POST['recaptcha_response'])) {
header("Cache-Control: no-store, no-cache, must-revalidate");
$recaptcha_key = '6LfufS****AAAPonK6L66LF1PTgQ6OaVY*******';
$recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify';
$recaptcha_params = [
'secret' => $recaptcha_key,
'response' => $_POST['recaptcha_response'],
'remoteip' => $_SERVER['REMOTE_ADDR'],
];
$ch = curl_init($recaptcha_url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $recaptcha_params);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
if (!empty($response)) {
$decoded_response = json_decode($response);
}
$recaptcha_success = false;
//dbg2f($decoded_response, 'responce');
if ($decoded_response && $decoded_response->score > 0) {
$recaptcha_success = $decoded_response->score;
$NAME = $_POST['arr'][0];
$EMAIL = $_POST['arr'][1];
$REVIEWS = $_POST['arr'][2];
$arEventFeilds = array(
"NAME"=>$NAME,
"EMAIL"=>$EMAIL,
"REVIEWS" => $REVIEWS
);
} else {
print_r('Привет БОТ');
// прописываем действие, если пользователь оказался ботом
}
if($recaptcha_success > 0.5) CEvent::Send("NEW-TEMPLATES", "s1", $arEventFeilds, "N", "18");
echo json_encode($arr);
return;
}
В результате сообщение не отправляется . И ошибок в консоли нет после клика по кнопке "Отправить"