WooCommerce зависает при оформлении заказа

Автор:vkuzyomko

WooCommerce зависает при оформлении заказа

Краткий ответ: если WooCommerce зависает при оформлении заказа, чаще всего проблема находится в checkout AJAX-запросе, JavaScript-ошибке, кеше, платёжном шлюзе, доставке, WAF/ModSecurity, PHP Fatal error, сессиях, cookies, admin-ajax.php, REST API, медленном внешнем API или конфликте плагинов. Начинать нужно с проверки Console, Network, запроса ?wc-ajax=checkout, WooCommerce logs и debug.log.

Обычно это выглядит так: покупатель заполняет checkout, нажимает “Оформить заказ”, появляется спиннер, но ничего не происходит. Иногда заказ не создаётся. Иногда заказ создаётся, но клиент не переходит к оплате. Иногда оплата проходит, но сайт не возвращает правильный результат.

Главная ошибка — сразу отключать все плагины на рабочем магазине. Если магазин принимает реальные заказы, сначала нужно зафиксировать симптом, сделать backup, проверить логи и понять, какой именно запрос зависает.

Причина

Checkout WooCommerce работает не как обычная статичная страница. При оформлении заказа браузер отправляет AJAX-запрос, WooCommerce проверяет корзину, поля, доставку, оплату, сессии, nonce, создаёт заказ и получает ответ от платёжного или shipping-плагина.

Если один из этих этапов ломается, frontend может просто зависнуть на спиннере без понятного сообщения.

Симптом Возможная причина Что проверить
Бесконечный спиннер после кнопки заказа wc-ajax checkout не получает нормальный ответ Network → ?wc-ajax=checkout
Кнопка не реагирует JavaScript-ошибка, конфликт темы или плагина Console, checkout.js, оптимизация JS
Checkout грузится 20–40 секунд медленный сервер, SQL, API оплаты или доставки Query Monitor, server logs, timing
После нажатия ничего не создаётся валидация полей, сессии, cookies, nonce checkout fields, cookies, response
Заказ создаётся, но клиент не переходит дальше ошибка платёжного шлюза или редиректа order notes, gateway logs
Зависает после выбора доставки shipping API, зоны доставки, wc-ajax update_order_review shipping logs, Network, адрес клиента
Ошибка 403 в Network WAF, ModSecurity, Cloudflare, security-плагин firewall logs, Wordfence, Cloudflare
Ошибка 500 в Network PHP Fatal error, конфликт плагина, тема debug.log, error_log

Если checkout не просто зависает, а показывает конкретную ошибку, сначала проверьте статью WooCommerce checkout выдаёт ошибку. Если страница работает, но оформление занимает слишком много времени, полезно сравнить симптомы со статьёй WooCommerce долго оформляет заказ.

Диагностика

Диагностику нужно начинать с браузера. Важно увидеть не общий симптом “зависает”, а конкретный запрос, который зависает или возвращает ошибку.

1. Повторите оформление как обычный покупатель

Откройте сайт в режиме инкогнито и сделайте тестовый заказ не под администратором.

  • добавьте товар в корзину;
  • перейдите на checkout;
  • заполните реальные данные;
  • выберите доставку;
  • выберите оплату;
  • нажмите “Оформить заказ”;
  • запишите, на каком шаге появляется зависание;
  • проверьте, появился ли заказ в WooCommerce.

2. Проверьте Console

Откройте DevTools → Console. Если там есть красная JavaScript-ошибка, checkout может не отправлять заказ вообще.

Частые ошибки:

  • jQuery is not defined — jQuery не подключён или отложен оптимизатором;
  • Uncaught TypeError — ошибка JS в теме, плагине или платёжном виджете;
  • ReferenceError — скрипт обращается к несуществующей переменной;
  • Mixed content — часть ресурсов грузится по HTTP на HTTPS-сайте;
  • ошибка reCAPTCHA;
  • ошибка платёжного виджета;
  • ошибка маски телефона;
  • ошибка checkout editor plugin.

3. Проверьте Network

Откройте DevTools → Network, повторите оформление заказа и найдите запрос:

?wc-ajax=checkout

Проверьте:

  • HTTP-статус;
  • время выполнения;
  • response;
  • payload;
  • cookies;
  • headers;
  • редиректы;
  • не возвращается ли HTML вместо JSON.

Если ?wc-ajax=checkout зависает, проблема может быть на сервере, в PHP, в оплате, доставке, внешнем API или WAF. Если запрос даже не отправляется, чаще виноват JavaScript.

4. Проверьте статус ответа

Статус Что значит Куда смотреть
200, но checkout висит ответ неверный, HTML вместо JSON, ошибка JS после ответа Response, Console
400 неверные данные, nonce, сессия, поля Payload, cookies, checkout fields
403 запрос заблокирован WAF, Cloudflare, security-плагин
404 сломанный endpoint или правила сервера permalinks, .htaccess, Nginx
500 PHP Fatal error debug.log, error_log
502/504 timeout, перегрузка PHP/MySQL/API server logs, hosting, slow queries

5. Проверьте WooCommerce logs

Откройте:

WooCommerce → Статус → Журналы

Проверьте логи оплаты, доставки, WooCommerce и системные ошибки.

Ищите:

  • checkout error;
  • payment gateway error;
  • shipping API error;
  • timeout;
  • invalid nonce;
  • invalid payment method;
  • invalid shipping method;
  • PHP warning;
  • fatal error;
  • ошибки callback или webhook.

6. Проверьте debug.log

Если в Network виден 500, 502, 504 или пустой ответ, включите debug.log и повторите тестовый заказ.

В логах ищите:

  • PHP Fatal error;
  • Allowed memory size exhausted;
  • Maximum execution time exceeded;
  • Call to undefined function;
  • Class not found;
  • Cannot redeclare;
  • ошибки в functions.php;
  • ошибки payment gateway plugin;
  • ошибки shipping plugin.

Нужно быстро решить проблему на сайте?

Если не хотите рисковать сайтом и тратить время на эксперименты, можно оставить заявку. Я посмотрю задачу и предложу аккуратное решение.

Оставить заявку

Решение

Исправление зависит от того, почему зависает checkout. Ниже безопасный порядок проверки.

1. Исключите checkout из кеша

Кеш checkout — одна из частых причин зависания. Корзина, оформление заказа и платёжные URL должны быть динамическими.

Исключите из кеша:

  • /cart/;
  • /checkout/;
  • /my-account/;
  • ?wc-ajax=*;
  • /wc-api/*;
  • order-received;
  • callback/webhook URL платёжных систем;
  • страницы возврата после оплаты.

После этого очистите кеш WordPress-плагина, серверный кеш, OPcache и CDN.

2. Отключите оптимизацию JavaScript для checkout

Оптимизация JS может ломать checkout, если откладывает jQuery, WooCommerce scripts, платёжный виджет или reCAPTCHA.

Для checkout отключите:

  • delay JS;
  • defer JS;
  • combine JS;
  • minify JS;
  • отложенную загрузку jQuery;
  • отложенную загрузку WooCommerce scripts;
  • отложенную загрузку payment gateway scripts;
  • отложенную загрузку reCAPTCHA.

3. Проверьте платёжный шлюз

Checkout может зависать, если платёжный плагин долго ждёт ответ API или возвращает неверный ответ.

Проверьте:

  • включён ли способ оплаты;
  • правильный ли test/live режим;
  • верные ли API-ключи;
  • работает ли SSL;
  • нет ли timeout в логах;
  • не блокируется ли внешний скрипт оплаты;
  • нет ли ошибок в order notes;
  • не зависает ли callback или webhook.

Если зависание связано с LiqPay, WayForPay или статусом после оплаты, проверьте статью WooCommerce не получает callback от LiqPay / WayForPay.

4. Проверьте доставку

Checkout может зависать при пересчёте доставки, особенно если доставка работает через API.

Проверьте:

  • зоны доставки;
  • методы доставки;
  • адрес клиента;
  • вес и габариты товара;
  • вариации товара;
  • API службы доставки;
  • логи плагина доставки;
  • запрос ?wc-ajax=update_order_review.

5. Проверьте WAF, ModSecurity и Cloudflare

Если Network показывает 403, 418, 406 или похожую блокировку, причина часто не в WooCommerce, а в защите сервера.

Проверьте:

  • Cloudflare Firewall Events;
  • ModSecurity logs;
  • Imunify360;
  • Wordfence или другой security-плагин;
  • блокировку POST-запросов;
  • защиту от ботов на checkout;
  • rate limiting;
  • country blocking;
  • блокировку ?wc-ajax=checkout.

Лучше не отключать защиту полностью. Правильнее найти конкретное правило и сделать исключение для checkout-запроса.

6. Проверьте сессии и cookies

WooCommerce использует сессии и cookies для корзины. Если они ломаются, checkout может зависнуть или возвращать неправильный ответ.

Проверьте:

  • не блокируются ли cookies;
  • не меняется ли домен с www на без www;
  • нет ли конфликта http/https;
  • правильные ли siteurl и home;
  • не чистит ли кеш cookies WooCommerce;
  • не блокирует ли браузер third-party scripts;
  • не ломает ли CDN заголовки.

7. Проверьте конфликт темы и плагинов

Если зависание появилось после обновления, установки плагина или смены темы, тестируйте на staging-копии.

  • переключитесь на стандартную тему на копии;
  • отключите плагины оптимизации;
  • отключите checkout editor plugins;
  • отключите последний обновлённый плагин;
  • проверьте платёжный плагин;
  • проверьте плагин доставки;
  • проверьте устаревшие WooCommerce templates;
  • сравните debug.log до и после.

Код

Важно: код ниже предназначен для диагностики. Он может повлиять на checkout, заказы, оплату, доставку, сессии, письма, CRM и безопасность. Перед изменениями сделайте backup. На рабочем магазине лучше сначала тестировать на staging-копии.

Включить debug.log в wp-config.php

Куда вставлять: файл wp-config.php, выше строки “That’s all, stop editing”.

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );

После повторения зависания проверьте:

/wp-content/debug.log

Логировать начало обработки checkout

Куда вставлять: functions.php дочерней темы или отдельный мини-плагин.

add_action('woocommerce_before_checkout_process', function () {
    if (!function_exists('wc_get_logger')) {
        return;
    }

    wc_get_logger()->info(
        'Checkout process started.',
        array('source' => 'sc-checkout-freeze-debug')
    );
});

Логировать ошибки валидации checkout

add_action('woocommerce_after_checkout_validation', function ($data, $errors) {
    if (!function_exists('wc_get_logger')) {
        return;
    }

    if (!method_exists($errors, 'get_error_messages')) {
        return;
    }

    $messages = $errors->get_error_messages();

    if (empty($messages)) {
        return;
    }

    wc_get_logger()->error(
        'Checkout validation errors: ' . implode(' | ', $messages),
        array('source' => 'sc-checkout-freeze-debug')
    );
}, 10, 2);

Логировать создание заказа

add_action('woocommerce_checkout_order_processed', function ($order_id, $posted_data, $order) {
    if (!function_exists('wc_get_logger')) {
        return;
    }

    wc_get_logger()->info(
        'Checkout order processed. Order ID: ' . $order_id . '. Status: ' . $order->get_status(),
        array('source' => 'sc-checkout-freeze-debug')
    );
}, 10, 3);

После теста проверьте:

WooCommerce → Статус → Журналы → sc-checkout-freeze-debug

Проверить активные способы оплаты

add_filter('woocommerce_available_payment_gateways', function ($gateways) {
    if (function_exists('wc_get_logger')) {
        wc_get_logger()->info(
            'Available payment gateways: ' . implode(', ', array_keys($gateways)),
            array('source' => 'sc-payment-gateways-debug')
        );
    }

    return $gateways;
});

Проверить доступные методы доставки

add_filter('woocommerce_package_rates', function ($rates, $package) {
    if (function_exists('wc_get_logger')) {
        wc_get_logger()->info(
            'Available shipping rates: ' . implode(', ', array_keys($rates)),
            array('source' => 'sc-shipping-rates-debug')
        );
    }

    return $rates;
}, 20, 2);

Проверить checkout AJAX в браузере

Откройте DevTools → Network и найдите:

?wc-ajax=checkout

Если запрос висит дольше обычного, смотрите Timing. Если он возвращает 403, 500, 502 или 504, переходите к логам сервера и WooCommerce.

Проверить зависшие задачи Action Scheduler

Куда смотреть в админке:

WooCommerce → Статус → Запланированные действия

Если доступен WP-CLI:

wp action-scheduler list --status=failed
wp action-scheduler list --status=pending

Проверить активные плагины через WP-CLI

wp plugin list --status=active

Результат

После правильного исправления checkout должен перестать зависать: запрос ?wc-ajax=checkout должен получать корректный ответ, заказ должен создаваться, клиент должен переходить на оплату или страницу благодарности, а WooCommerce должен записывать понятные логи.

Хороший результат:

  • checkout открывается быстро;
  • кнопка “Оформить заказ” реагирует;
  • спиннер не крутится бесконечно;
  • ?wc-ajax=checkout не возвращает 403/500/504;
  • заказ создаётся в WooCommerce;
  • оплата запускается корректно;
  • доставка пересчитывается без зависания;
  • debug.log не содержит fatal errors;
  • checkout исключён из кеша;
  • платёжные и shipping API отвечают без timeout.

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

Проверить Checkout Block и Classic Checkout

Некоторые плагины оплаты и доставки лучше работают с классическим checkout, чем с Checkout Block. Если зависание появилось после перехода на блоки WooCommerce, проверьте совместимость.

Проверить устаревшие шаблоны WooCommerce

Тема может переопределять шаблоны WooCommerce. Если шаблоны устарели, checkout может зависать после обновления WooCommerce.

Проверить внешние API

Платёжные системы, службы доставки, CRM, Telegram, email API и аналитика могут замедлять checkout, если вызываются синхронно во время оформления заказа.

Проверить серверные лимиты

Если checkout зависает при высокой нагрузке, проверьте PHP memory_limit, max_execution_time, CPU, RAM, MySQL, slow query log и лимиты хостинга.

Проверить Heartbeat и фоновые задачи

Если сайт одновременно выполняет много фоновых задач, checkout может тормозить. Проверьте WP-Cron, Action Scheduler, импорты, синхронизации и очереди email/CRM.

Проверить ботов

Если checkout-запросы идут волнами, проверьте access logs. Иногда боты или сканеры создают нагрузку на cart/checkout и мешают реальным покупателям.

Частые ошибки

Кешировать checkout

Checkout нельзя кешировать как обычную страницу. Это ломает сессии, nonce, корзину, доставку и оплату.

Отключать все плагины на рабочем магазине

Это может сломать оплату, доставку, CRM, письма и реальные заказы. Диагностику лучше делать на staging-копии.

Игнорировать Network

Без Network невозможно понять, зависает ли JavaScript, wc-ajax, платёжный API, доставка или сервер.

Считать, что проблема только в платёжном шлюзе

Иногда оплата ни при чём. Checkout может зависать из-за доставки, кеша, сессий, темы, WAF или PHP-ошибки.

Оставлять delay JS на checkout

Отложенная загрузка JS может ломать WooCommerce scripts, jQuery, reCAPTCHA и платёжные виджеты.

Не проверять логи сервера

Если браузер показывает только спиннер, реальная причина может быть в error_log, slow log, PHP-FPM или MySQL.

Править файлы WooCommerce напрямую

После обновления WooCommerce такие правки пропадут. Лучше использовать hooks, дочернюю тему или отдельный мини-плагин.

Диагностика проблем

Проблема: WooCommerce зависает после нажатия “Оформить заказ”

Возможная причина: зависает ?wc-ajax=checkout, PHP-обработчик, платёжный шлюз, доставка или WAF.

Что делать: проверить Network, Response, debug.log, WooCommerce logs, оплату, доставку и firewall.

Проблема: крутится спиннер, но заказ не создаётся

Возможная причина: ошибка валидации, nonce, сессии, JS, checkout fields или блокировка запроса.

Что делать: проверить Console, Payload, cookies, checkout fields и логи валидации.

Проблема: заказ создаётся, но клиент не переходит на оплату

Возможная причина: платёжный шлюз возвращает ошибку, неправильный redirect URL, API timeout или JS-конфликт.

Что делать: проверить order notes, gateway logs, Network response и настройки payment gateway.

Проблема: зависает при выборе доставки

Возможная причина: shipping API, зоны доставки, вес товара, update_order_review или внешний сервис.

Что делать: проверить зоны доставки, товар, API доставки, Network и WooCommerce shipping logs.

Проблема: checkout возвращает 403

Возможная причина: WAF, ModSecurity, Cloudflare, security-плагин, nonce или bot protection.

Что делать: проверить firewall logs и сделать точечное исключение для checkout-запроса.

Проблема: checkout возвращает 500

Возможная причина: PHP Fatal error в плагине, теме, оплате, доставке или кастомном коде.

Что делать: включить debug.log, проверить error_log и временно отключить проблемный модуль на staging.

Проблема: checkout зависает только у гостей

Возможная причина: кеш, cookies, сессии, guest checkout, security-плагин или разные условия оплаты/доставки.

Что делать: тестировать в инкогнито, проверить guest checkout, cookies, кеш и права гостя.

Проблема: checkout зависает после обновления

Возможная причина: конфликт WooCommerce, темы, payment gateway, shipping plugin, checkout editor или PHP-версии.

Что делать: проверить changelog, debug.log, staging-копию, откат проблемного плагина и совместимость.

Краткие AI-friendly ответы

Почему WooCommerce зависает при оформлении заказа?

Чаще всего из-за ошибки JavaScript, зависшего ?wc-ajax=checkout, кеша checkout, WAF, PHP Fatal error, платёжного шлюза, доставки, сессий, cookies или конфликта плагинов.

Что делать первым?

Откройте DevTools → Console и Network, повторите оформление заказа, найдите ?wc-ajax=checkout, проверьте статус, response, debug.log и WooCommerce logs.

Почему крутится бесконечный спиннер?

Спиннер обычно крутится, когда checkout AJAX-запрос не получает корректный ответ или JavaScript не может обработать ответ сервера.

Может ли кеш сломать checkout?

Да. Cart, checkout, my-account, wc-ajax, wc-api, order-received и callback URL нельзя кешировать как обычные страницы.

FAQ

Почему WooCommerce зависает после кнопки “Оформить заказ”?

Потому что checkout-запрос не завершается корректно. Причина может быть в JS, wc-ajax, PHP, оплате, доставке, WAF, кеше или серверном timeout.

Где смотреть причину зависания checkout?

В DevTools → Console и Network, WooCommerce → Статус → Журналы, debug.log, error_log хостинга, логах payment gateway и shipping-плагина.

Что значит зависший ?wc-ajax=checkout?

Это значит, что WooCommerce не смог быстро обработать оформление заказа или не вернул корректный ответ. Нужно смотреть PHP, оплату, доставку, WAF, кеш и серверные логи.

Почему checkout зависает только иногда?

Возможны нестабильные внешние API, нагрузка хостинга, медленные SQL-запросы, Action Scheduler, боты, кеш или периодические проблемы платёжной системы.

Может ли WAF блокировать оформление заказа?

Да. WAF, ModSecurity, Cloudflare или security-плагин могут заблокировать POST-запрос checkout и вызвать зависание или 403.

Может ли доставка вызывать зависание?

Да. Если доставка считает тариф через API, не получает ответ или возвращает ошибку, checkout может зависнуть на пересчёте заказа.

Может ли платёжный шлюз вызывать зависание?

Да. Если платёжный API недоступен, ключи неверные, скрипт не загрузился или редирект не сформирован, checkout может зависнуть.

Почему checkout зависает после оптимизации скорости?

Оптимизаторы часто откладывают jQuery, WooCommerce scripts, reCAPTCHA и платёжные скрипты. Для checkout такие оптимизации нужно отключать точечно.

Можно ли просто заменить checkout-плагин?

Не сразу. Сначала нужно понять причину. Если проблема в кеше, WAF, оплате, доставке, сервере или JS, замена checkout-плагина может не помочь.

Когда обращаться к специалисту?

Если магазин теряет реальные заказы, checkout зависает без ошибки, есть 403/500/504, подключены оплаты, доставка, CRM или нет staging-копии, лучше не чинить наугад.

Вывод

Если WooCommerce зависает при оформлении заказа, нужно сначала определить, где именно зависает процесс: JavaScript, ?wc-ajax=checkout, доставка, оплата, WAF, PHP, кеш, сессии или внешний API.

Самый безопасный порядок: backup, тест в инкогнито, Console, Network, проверка ?wc-ajax=checkout, WooCommerce logs, debug.log, кеша, JS-оптимизации, доставки, оплаты, WAF и серверных логов.

Главное — не исправлять checkout вслепую. Бесконечный спиннер почти всегда имеет конкретную техническую причину. Когда найден точный запрос, статус ответа и лог ошибки, проблему можно исправить точечно и не сломать оплату, доставку, заказы и уведомления.

Об авторе

vkuzyomko administrator