Добрый день. Помогите, пожалуйста, разобраться с добавление капчи от google в форму обратной связи. Сайт сделан на umicms, но формы, на сколько я понимаю, самописные. Я не программист, просто админ, которому достался сайт. Перечитал много статей по данной теме. Сама капча выводится, но не работает проверка, поставили "галочку" или не поставили. Т.е. добавляю код, но кнопка "отправить" срабатывает даже когда мы ставим "галочку" я не робот. Нашёл 2 файла, в которых прописана работа формы. Один файл называется callback.php С 4 по 19 строки - это я добавил, нашёл в похожих темах. Код (Text): <?php //session_start(); require_once "recaptchalib.php"; $secret = "сюда вставляем ключ"; // пустой ответ $response = null; // проверка секретного ключа $reCaptcha = new ReCaptcha($secret); if ($_POST["g-recaptcha-response"]) { $response = $reCaptcha->verifyResponse( $_SERVER["REMOTE_ADDR"], $_POST["g-recaptcha-response"] ); if ($response != null && $response->success) echo "Hi " . $_POST["name"] . " (" . $_POST["email"] . "), thanks for submitting the form!"; } else { echo 'Упс,вы не ввели капчу'; } error_reporting(E_ALL); ini_set('display_errors',0); if (isset( $_POST['phone'])) { //if($_POST['bot'] != '')die('BIT'); $mail_to='support@.........ru'; $phone = htmlspecialchars(stripslashes($_POST['phone'])); $fio = htmlspecialchars(stripslashes($_POST['fio'])); $city = htmlspecialchars(stripslashes($_POST['city'])); $accept = htmlspecialchars(stripslashes($_POST['accept'])); if(!$city)die(); $body .= "\nФИО:".$fio."\r\n\r\n"; $body .= "\nГород:".$city."\r\n\r\n"; $body .= "\nСогласен на обработку данных:".$accept."\r\n\r\n"; $body .= "\nТелефон:".$phone."\r\n\r\n"; $picture = ""; $thm = 'Новая заявка обратного звонка'; $msg = $body; // Отправляем почтовое сообщение if (empty($picture)) send_mail($mail_to, $thm, $msg, ''); else send_mail($mail_to, $thm, $msg, $picture); } // Вспомогательная функция для отправки почтового сообщения с вложением function send_mail($to, $thm, $html, $path='') { if($path){ $fp = fopen($path,"r"); if (!$fp) { print "Файл $path не может быть прочитан"; exit(); } $file = fread($fp, filesize($path)); fclose($fp); } $boundary = "--".md5(uniqid(time())); // генерируем разделитель $headers .= "MIME-Version: 1.0\n"; $headers .="Content-Type: multipart/mixed; boundary=\"$boundary\"\n"; if($path){ $multipart .= "--$boundary\n"; $kod = 'utf-8'; // или $kod = 'windows-1251'; $multipart .= "Content-Type: text/html; charset=$kod\n"; $multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n"; $multipart .= "$html\n\n"; $message_part = "--$boundary\n"; $message_part .= "Content-Type: application/octet-stream\n"; $message_part .= "Content-Transfer-Encoding: base64\n"; $message_part .= "Content-Disposition: attachment; filename = \"".$path."\"\n\n"; $message_part .= chunk_split(base64_encode($file))."\n"; $multipart .= $message_part."--$boundary--\n"; }else{ $multipart .= "--$boundary\n"; $kod = 'utf-8'; // или $kod = 'windows-1251'; $multipart .= "Content-Type: text/plain; charset=$kod\n"; $multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n"; $multipart .= "$html\n\n"; } if(!mail($to, $thm, $multipart, $headers)) { die('К сожалению, письмо не отправлено'); //echo "К сожалению, письмо не отправлено"; header('Location: '.$_SERVER['HTTP_REFERER'].'?error=1'); }else { mail('info@...........ru', $thm, $multipart, $headers); die('ok'); header('Location: /company/partnership/sent1/'); } } Второй файл header.phtml, здесь только добавил код Код (Text): <div class="g-recaptcha" data-sitekey="google ключ"></div> в том месте где капча появляется. Есть еще скрипт, в котором выводится сообщение об успешной отправке письма Фрагмент этого скрипта Код (Text): $('#callback_form').submit(function(){ /*alert($(".modalka__check").attr("checked")); if($(".modalka__check").attr("checked") != 'checked') { alert('Вы не согласились согласие на обработку своих персональных данных в соответствии с ФЗ №152-ФЗ "О персональных данных".'); return false; }*/ var msg = $(this).serialize(); $.ajax({ type: 'POST', url: '/callback.php', data: msg, success: function(data) { //console.log(data); if(data == 'ok'){ $('#callback_form').remove(); $('.modalka__content').find('h3').html('Заявка успешно отправлена'); } }, error: function(xhr, str){ alert('Возникла ошибка: ' + xhr.responseCode); } }); return false; }); Заранее благодарен всем, кто поможет.
Добавлена переменная для проверки каптчи. $recaptcha_check PHP: <?php //session_start(); require_once "recaptchalib.php"; $secret = "сюда вставляем ключ"; // пустой ответ $response = null; // проверка секретного ключа $reCaptcha = new ReCaptcha($secret); if ($_POST["g-recaptcha-response"]) { $response = $reCaptcha->verifyResponse( $_SERVER["REMOTE_ADDR"], $_POST["g-recaptcha-response"] ); if ($response != null && $response->success) echo "Hi " . $_POST["name"] . " (" . $_POST["email"] . "), thanks for submitting the form!"; $recaptcha_check = true; } else { echo 'Упс,вы не ввели капчу'; // $recaptcha_check = false; } error_reporting(E_ALL); ini_set('display_errors',0); if (isset( $_POST['phone']) && $recaptcha_check) { //if($_POST['bot'] != '')die('BIT'); $mail_to='support@.........ru'; $phone = htmlspecialchars(stripslashes($_POST['phone'])); $fio = htmlspecialchars(stripslashes($_POST['fio'])); $city = htmlspecialchars(stripslashes($_POST['city'])); $accept = htmlspecialchars(stripslashes($_POST['accept'])); if(!$city)die(); $body .= "\nФИО:".$fio."\r\n\r\n"; $body .= "\nГород:".$city."\r\n\r\n"; $body .= "\nСогласен на обработку данных:".$accept."\r\n\r\n"; $body .= "\nТелефон:".$phone."\r\n\r\n"; $picture = ""; $thm = 'Новая заявка обратного звонка'; $msg = $body; // Отправляем почтовое сообщение if (empty($picture)) send_mail($mail_to, $thm, $msg, ''); else send_mail($mail_to, $thm, $msg, $picture); } // Вспомогательная функция для отправки почтового сообщения с вложением function send_mail($to, $thm, $html, $path='') { if($path){ $fp = fopen($path,"r"); if (!$fp) { print "Файл $path не может быть прочитан"; exit(); } $file = fread($fp, filesize($path)); fclose($fp); } $boundary = "--".md5(uniqid(time())); // генерируем разделитель $headers .= "MIME-Version: 1.0\n"; $headers .="Content-Type: multipart/mixed; boundary=\"$boundary\"\n"; if($path){ $multipart .= "--$boundary\n"; $kod = 'utf-8'; // или $kod = 'windows-1251'; $multipart .= "Content-Type: text/html; charset=$kod\n"; $multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n"; $multipart .= "$html\n\n"; $message_part = "--$boundary\n"; $message_part .= "Content-Type: application/octet-stream\n"; $message_part .= "Content-Transfer-Encoding: base64\n"; $message_part .= "Content-Disposition: attachment; filename = \"".$path."\"\n\n"; $message_part .= chunk_split(base64_encode($file))."\n"; $multipart .= $message_part."--$boundary--\n"; }else{ $multipart .= "--$boundary\n"; $kod = 'utf-8'; // или $kod = 'windows-1251'; $multipart .= "Content-Type: text/plain; charset=$kod\n"; $multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n"; $multipart .= "$html\n\n"; } if(!mail($to, $thm, $multipart, $headers)) { die('К сожалению, письмо не отправлено'); //echo "К сожалению, письмо не отправлено"; header('Location: '.$_SERVER['HTTP_REFERER'].'?error=1'); }else { mail('info@...........ru', $thm, $multipart, $headers); die('ok'); header('Location: /company/partnership/sent1/'); } }