Как принять данные с формы Tilda на внешний скрипт
При интеграции формы с Tilda на сторонний сервер разработчики часто сталкиваются с ситуацией, когда данные уходят методом GET вместо ожидаемого POST. В результате массив $_POST на принимающем скрипте оказывается пустым. Разберём причины и дадим пошаговое руководство по настройке.
Почему форма Tilda отправляет GET, а не POST
Согласно документации Tilda, данные формы должны отправляться методом POST. Однако в некоторых случаях сервер, на который вы отправляете запрос, перенаправляет (редиректит) POST-запрос в GET. Это может происходить по нескольким причинам:
- Некорректный HTTP-статус ответа - если ваш скрипт возвращает редирект (301, 302, 307) без сохранения метода, браузер или система Tilda может изменить метод на GET.
- Отсутствие обработки CORS - хотя Tilda не требует CORS для отправки, некоторые серверы блокируют POST-запросы с чужих доменов, преобразуя их в GET.
- Проблемы с HTTPS - вы указали, что HTTPS включён, но проверьте, нет ли смешанного контента (mixed content) или неверного SSL-сертификата.
Как проверить и исправить проблему
1. Используйте сервисы-отладчики
Как вы уже делали, применяйте requestcatcher.com или webhook.site. Если на них запрос приходит как POST, значит, форма Tilda работает корректно. Проблема - на стороне вашего скрипта или сервера.
2. Настройте сервер для приёма POST
Убедитесь, что ваш скрипт явно обрабатывает POST-запросы. Пример на PHP:
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$data = $_POST;
// ваша логика
} else {
header('HTTP/1.1 405 Method Not Allowed');
exit('Только POST');
}3. Устраните редиректы
Проверьте, не настроен ли на сервере редирект с HTTP на HTTPS или с одного URL на другой. Если редирект есть, убедитесь, что он использует статус 307 (Temporary Redirect) или 308 (Permanent Redirect), которые сохраняют метод POST. Избегайте 301 и 302.
Альтернативный способ: приём данных через GET
Если решить проблему с POST не удаётся, вы можете настроить скрипт на приём данных через GET. Для этого в форме Tilda укажите метод GET в настройках (хотя документация рекомендует POST). В скрипте используйте $_GET вместо $_POST. Однако учтите, что данные будут видны в URL, что небезопасно для паролей или личной информации.
Пошаговая инструкция для Tilda
- Зайдите в раздел «Формы» на Tilda.
- Выберите нужную форму и откройте её настройки.
- В поле «URL для отправки» укажите полный адрес вашего скрипта (например, https://вашсайт.ру/handler.php).
- Убедитесь, что метод отправки - POST.
- Сохраните изменения и протестируйте отправку.
Дополнительные советы
- Проверьте, не блокирует ли ваш хостинг POST-запросы с внешних доменов (обратитесь в поддержку).
- Используйте логи сервера (access.log) - в них видно, каким методом пришёл запрос.
- Если используете Nginx, проверьте конфигурацию на наличие директив, изменяющих метод.
Таким образом, основная причина пустого $_POST - редирект или неправильная обработка на сервере. Следуя нашим рекомендациям, вы сможете настроить корректный приём данных с формы Tilda на внешний скрипт.