Ваша проблема заключается в том, что вы неправильно обрабатываете ответ от Google reCAPTCHA, поэтому возникает ошибка "Ошибка обработки. Ответ не JSON". Давайте пройдемся по основным шагам для корректной интеграции reCAPTCHA с PHPMailer и убедимся, что все работает хорошо.
### Основные шаги для интеграции
1. **Убедитесь, что вы получили правильные ключи от Google reCAPTCHA**: Вам нужно следить за тем, чтобы вы использовали правильные ключи в своем коде. В вашем случае замените `***` в `$secretKey` на ваш секретный ключ.
2. **Проверка на стороне клиента**: Перед отправкой формы с помощью JavaScript убедитесь, что вы правильно настроили reCAPTCHA, и форма не отправляется без успешной проверки.
Пример JavaScript для инициализации reCAPTCHA v3:
```html
<script src="https://www.google.com/recaptcha/api.js?render=YOUR_SITE_KEY"></script>
<script>
grecaptcha.ready(function() {
grecaptcha.execute('YOUR_SITE_KEY', {action: 'submit'}).then(function(token) {
document.getElementById('token').value = token;
});
});
</script>
```
3. **Обработка ответа в PHP**: Убедитесь, что вы корректно обрабатываете ответ от reCAPTCHA на сервере.
### Обновленный код
Вот обновленный код с учетом указанных выше рекомендаций:
```php
<?php
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 = isset($_POST['token']) ? $_POST['token'] : '';
$secretKey = 'YOUR_SECRET_KEY'; // Замените на ваш секретный ключ.
$ip = $_SERVER['REMOTE_ADDR'];
$url = 'https://www.google.com/recaptcha/api/siteverify?secret=' . $secretKey . '&response=' . $captcha;
// Получение ответа от reCAPTCHA
$response = file_get_contents($url);
$responseKeys = json_decode($response, true);
// Проверка успешности и наличия нужного балла
if ($responseKeys['success'] && (isset($responseKeys['score']) && $responseKeys['score'] >= 0.5)) {
// Здесь вы можете отправить почту, так как проверка прошла успешно
// Пример:
// $mail = new PHPMailer();
// Настройка PHPMailer...
// $mail->send();
echo json_encode(array('success' => 'true', 'om_score' => $responseKeys["score"], 'token' => $captcha));
} else {
echo json_encode(array('success' => 'false', 'om_score' => isset($responseKeys['score']) ? $responseKeys['score'] : 'N/A', 'token' => $captcha));
}
}
?>
```
### Примечания
1. Замените `YOUR_SECRET_KEY` на ваш фактический секретный ключ от reCAPTCHA.
2. Убедитесь, что вы правильно добавляете `token` в вашу форму HTML:
```html
<input type="hidden" name="token" id="token">
```
3. Проверяйте наличие поля `score` в ответе от reCAPTCHA, поскольку в более ранних версиях может быть возвращено лишь поле `success`.
Теперь протестируйте свой код, и если будут ошибки, проверьте, какая именно информация возвращается от Google. Это поможет в диагностике возможных проблем.