Как принять данные с формы 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

    1. Зайдите в раздел «Формы» на Tilda.
    2. Выберите нужную форму и откройте её настройки.
    3. В поле «URL для отправки» укажите полный адрес вашего скрипта (например, https://вашсайт.ру/handler.php).
    4. Убедитесь, что метод отправки - POST.
    5. Сохраните изменения и протестируйте отправку.

    Дополнительные советы

    • Проверьте, не блокирует ли ваш хостинг POST-запросы с внешних доменов (обратитесь в поддержку).
    • Используйте логи сервера (access.log) - в них видно, каким методом пришёл запрос.
    • Если используете Nginx, проверьте конфигурацию на наличие директив, изменяющих метод.

    Таким образом, основная причина пустого $_POST - редирект или неправильная обработка на сервере. Следуя нашим рекомендациям, вы сможете настроить корректный приём данных с формы Tilda на внешний скрипт.

    Часто задаваемые вопросы