Страницы

Поиск по вопросам

вторник, 11 июня 2019 г.

Постоянно возвращается http_response_code(200). Recaptcha, Ajax, PHP

Делаю обработку рекапчи средствами PHP, AJAX. Независимо от условий, возвращается код 200. Хотя условие с ошибкой, которое должно вернуть код 400 срабатывает. В связи с этим не работает корректная проверка формы. Пробовал дебажить, работает корректно, заходит в те места, в которые нужно, но по итогу все равно 200. Звонил в поддержку хостинга, думал нужно устанавливать какие-то PHP модули. PHP особо не знаю, впервые столкнулся в таком режиме. Отправка данных происходит только при выполненных условиях (заполнены все поля и капча чекнута, почему возвращается 200 - понять не могу)
HTML











AJAX:

PHP
if ($_SERVER["REQUEST_METHOD"] == "POST") {
var_dump($_REQUEST);
$name = trim($_POST["Name"]); $email = trim($_POST["E-mail"]); $phone = trim($_POST["Phone"]);
$captcha = '';
if (isset($_POST['g-recaptcha-response'])) { $captcha = $_POST['g-recaptcha-response']; }
$captcha = isset($_POST['g-recaptcha-response']) ? $_POST['g-recaptcha-response'] : "";
if (empty ($captcha) ) {
echo "check captcha"; http_response_code(400); exit;
} $recipient = "vladknure@gmail.com"; $subject = "Пользователь c Biotech.org.ua.";
$email_content = "Name: $name E-mail: $email Phone: $phone";
$email_headers = "From: website";
$response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=6LdxczcUAAAAAMeDD8JwV8JkjAGKDhghdyjGK2vK&response=" . $captcha . "&remoteip=" . $_SERVER['REMOTE_ADDR']); $decoded_response = json_decode($response); if ($decoded_response->success) { if (mail($recipient, $subject, $email_content, $email_headers)) { http_response_code(200); echo "all is okay"; } else { http_response_code(500); echo "you are spammer"; } } }
jQuery, recaptcha api - все подключено, сюда просто не копировал. Возвращается постоянно "success", то есть попадает только в done. Прикрепляю скриншоты


Ответ

При помощи Visman проблема была решена:
необходимо вместо http_response_code() вызывать header('HTTP/1.0 200 OK'); или header('HTTP/1.0 400 Bad Request'); или header('HTTP/1.0 500 Internal Server Error'); в таком случае будет возвращаться то, что нужно

Комментариев нет:

Отправить комментарий