Помогите пожалуйста добавить reCaptha на сайт
При отправки формы появляется ошибка "Ошибка обработки. Ответ не JSON"
Я понимаю, что дело в троках
if($responseKeys["success"] && $responseKeys["score"] >= 0.5) {
echo json_encode(array('success' => 'true', 'om_score' => $responseKeys["score"], 'token' => $_POST['token']));
} else {
echo json_encode(array('success' => 'false', 'om_score' => $responseKeys["score"], 'token' => $_POST['token']));
}
Потому что убрав их, форма отправляется, но я так понимаю, капча не работает...
Ниже код:
<?php
// Файлы phpmailer
require 'phpmailer/PHPMailer.php';
require 'phpmailer/SMTP.php';
require 'phpmailer/Exception.php';
# проверка, что ошибки нет
if (!error_get_last()) {
// Переменные, которые отправляет пользователь
$name = $_POST['name'];
$tel = $_POST['tel'];
$email = $_POST['email'];
$number = $_POST['number'];
$text = $_POST['text'];
$captcha;
if(isset($_POST['token'])){
$captcha=$_POST['token'];
}
$secretKey = '***';
$ip = $_SERVER['REMOTE_ADDR'];
$url = 'https://www.google.com/recaptcha/api/siteverify?secret=' . $secretKey . '&response=' . $_POST['token'];
$response = file_get_contents($url);
$responseKeys = json_decode($response,true);
if($responseKeys["success"] && $responseKeys["score"] >= 0.5) {
echo json_encode(array('success' => 'true', 'om_score' => $responseKeys["score"], 'token' => $_POST['token']));
} else {
echo json_encode(array('success' => 'false', 'om_score' => $responseKeys["score"], 'token' => $_POST['token']));
}
// Формирование самого письма
$title = "Заявка с сайта";
$body = "
<h2>Заявка с сайта</h2>
<b>Имя:</b> $name<br>
<b>Телефон:</b> $tel<br>
<b>Почта:</b> $email<br>
<b>Количество изделий:</b> $number<br>
<b>Сообщение:</b><br>$text
";
// Настройки PHPMailer
$mail = new PHPMailer\PHPMailer\PHPMailer();
$mail->isSMTP();
$mail->CharSet = "UTF-8";
$mail->SMTPAuth = true;
//$mail->SMTPDebug = 2;
$mail->Debugoutput = function($str, $level) {$GLOBALS['data']['debug'][] = $str;};
// Настройки вашей почты
$mail->Host = 'smtp.yandex.com'; // SMTP сервера вашей почты
$mail->Username = '***'; // Логин на почте
$mail->Password = '***'; // Пароль на почте
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;
$mail->setFrom('***', 'Заявка с сайта'); // Адрес самой почты и имя отправителя
// Получатель письма
$mail->addAddress('***');
// Прикрипление файлов к письму
if (!empty($file['name'][0])) {
for ($i = 0; $i < count($file['tmp_name']); $i++) {
if ($file['error'][$i] === 0)
$mail->addAttachment($file['tmp_name'][$i], $file['name'][$i]);
}
}
// Отправка сообщения
$mail->isHTML(true);
$mail->Subject = $title;
$mail->Body = $body;
// Проверяем отправленность сообщения
if ($mail->send()) {
$data['result'] = "success";
$data['info'] = "Сообщение успешно отправлено!";
} else {
$data['result'] = "error";
$data['info'] = "Сообщение не было отправлено. Ошибка при отправке письма";
$data['desc'] = "Причина ошибки: {$mail->ErrorInfo}";
}
} else {
$data['result'] = "error";
$data['info'] = "В коде присутствует ошибка";
$data['desc'] = error_get_last();
}
// Отправка результата
header('Content-Type: application/json');
echo json_encode($data);
?>
document.querySelector('form').addEventListener('submit', (e) => {
e.preventDefault();
let tk = '';
grecaptcha.ready(function() {
grecaptcha.execute('', {action: 'homepage'}).then(function(token) {
tk = token;
document.getElementById('token').value = token;
const data = new URLSearchParams();
for (const pair of new FormData(document.querySelector('form'))) {
data.append(pair[0], pair[1]);
}
fetch('mail.php', {
method: 'post',
body: data,
})
.then(response => response.json())
.then(result => {
if (result['om_score'] >= 0.5) {
console.log('Человек')
// отправка данных на почту
} else {
console.log('Бот')
}
});
});
});
});