WooCommerce checkout выдаёт ошибку

Автор:vkuzyomko

WooCommerce checkout выдаёт ошибку

Краткий ответ: если WooCommerce checkout выдаёт ошибку, сначала нужно понять, где именно ломается оформление заказа: при загрузке страницы, вводе данных, выборе доставки, выборе оплаты, нажатии “Оформить заказ” или после возврата с платёжной системы. Чаще всего причина в JavaScript-ошибке, wc-ajax, кеше checkout, плагине оплаты, доставке, обязательных полях, WAF/ModSecurity, PHP Fatal error, сессиях, cookies, теме или конфликте плагинов.

Checkout в WooCommerce зависит сразу от нескольких частей: корзины, сессий, AJAX-запросов, полей оформления заказа, доставки, оплаты, PHP-обработчиков, JavaScript, темы, кеша и внешних сервисов. Поэтому ошибка checkout не всегда означает, что сломан сам WooCommerce.

Если ошибка появилась на рабочем магазине, не отключайте все плагины сразу на живом сайте. Сначала сделайте backup, повторите ошибку как обычный покупатель, откройте Console и Network в браузере, проверьте WooCommerce logs, debug.log, кеш, доставку и оплату.

Причина

WooCommerce checkout может выдавать ошибку по разным причинам. Иногда проблема видна прямо на странице: сообщение об обязательном поле, недоступной доставке или ошибке оплаты. Иногда ошибка скрыта: кнопка “Оформить заказ” крутится бесконечно, checkout не реагирует, а реальная причина видна только в Network или debug.log.

Симптом Возможная причина Что проверить
Checkout не загружается ошибка страницы, shortcode, блок checkout, тема страница checkout, WooCommerce settings, debug.log
Кнопка “Оформить заказ” не работает JavaScript-ошибка, конфликт темы, кеш JS Console, Network, checkout.js
Бесконечный спиннер wc-ajax зависает, PHP Fatal error, WAF, timeout ?wc-ajax=checkout, debug.log, server logs
Ошибка 403 WAF, ModSecurity, security-плагин, nonce firewall logs, Cloudflare, security plugin
Ошибка 500 PHP-ошибка в плагине, теме или сниппете debug.log, error_log, последний обновлённый плагин
Нет доставки не найдена зона доставки, нет метода, нет веса shipping zones, товар, адрес клиента
Нет оплаты отключён шлюз, неверная валюта, SSL, настройки WooCommerce → Настройки → Платежи
Заказ создан, но статус не меняется не пришёл webhook/callback от оплаты order notes, gateway logs, callback URL

Если ошибка связана именно с доставкой, проверьте материал Не работает доставка WooCommerce. Если ошибка появляется после оплаты или заказ зависает в неправильном статусе, полезно посмотреть статью WooCommerce заказ не меняет статус после оплаты.

Диагностика

Диагностику checkout нужно делать не “на глаз”, а по конкретному запросу, который ломается. Самый быстрый путь — повторить ошибку и посмотреть Console, Network, WooCommerce logs и debug.log.

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

Проверяйте checkout не только под администратором. Откройте сайт в режиме инкогнито и сделайте тестовый заказ как обычный клиент.

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

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

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

Частые признаки:

  • Uncaught TypeError;
  • ReferenceError;
  • jQuery is not defined;
  • ошибка reCAPTCHA;
  • ошибка платёжного виджета;
  • ошибка темы или конструктора;
  • ошибка после минификации JS;
  • блокировка mixed content.

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

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

?wc-ajax=checkout

или похожие WooCommerce AJAX-запросы.

Проверьте:

  • HTTP-статус: 200, 400, 403, 404, 500, 502, 504;
  • response;
  • payload;
  • cookies;
  • headers;
  • длительность запроса;
  • редирект после успешного заказа;
  • не возвращается ли HTML вместо JSON.

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

Откройте:

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

Проверьте логи WooCommerce, платёжного шлюза, доставки и ошибок.

Ищите:

  • payment failed;
  • checkout error;
  • invalid payment method;
  • invalid shipping method;
  • gateway error;
  • callback failed;
  • webhook failed;
  • API error;
  • PHP warning или fatal error;
  • ошибки платёжного плагина.

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

Если checkout выдаёт 500, белый экран, пустой ответ или зависает, включите debug.log и повторите тест.

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

  • PHP Fatal error;
  • Uncaught Error;
  • Call to undefined function;
  • Class not found;
  • Cannot redeclare;
  • Allowed memory size exhausted;
  • Maximum execution time exceeded;
  • ошибки в functions.php;
  • ошибки платёжного или shipping-плагина.

6. Проверьте страницу checkout

Иногда ошибка не в оплате и не в доставке, а в самой странице checkout.

Проверьте:

  • выбрана ли страница checkout в WooCommerce → Настройки → Дополнительно;
  • есть ли на странице shortcode или checkout block;
  • не удалён ли shortcode;
  • не стоит ли страница в черновике;
  • не закрыта ли страница паролем;
  • не редиректит ли checkout на другую страницу;
  • не конфликтует ли page builder;
  • не кешируется ли checkout.

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

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

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

Решение

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

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

Корзина, checkout и страницы оплаты динамические. Их нельзя кешировать как обычные страницы.

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

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

После этого очистите кеш плагина, серверный кеш, OPcache и Cloudflare/CDN, если используется.

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

Если кнопка “Оформить заказ” не работает или checkout зависает, часто виноваты defer, delay, combine или minify JavaScript.

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

  • объединение JS;
  • минификацию JS;
  • delay JS;
  • defer JS;
  • отложенную загрузку reCAPTCHA;
  • отложенную загрузку платёжных скриптов;
  • оптимизацию jQuery;
  • агрессивную оптимизацию WooCommerce scripts.

3. Проверьте обязательные поля checkout

Если WooCommerce пишет, что заказ не может быть оформлен, проблема может быть в полях.

Проверьте:

  • не удалено ли обязательное поле;
  • нет ли поля, которое скрыто CSS, но осталось required;
  • не требует ли плагин checkout editor лишнее поле;
  • правильно ли работает поле телефона;
  • не ломает ли валидацию маска телефона;
  • корректны ли billing и shipping поля;
  • не конфликтуют ли языковые версии полей.

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

Checkout может выдавать ошибку, если WooCommerce не может подобрать доставку для адреса клиента.

  • проверьте зоны доставки;
  • проверьте методы внутри зоны;
  • проверьте адрес клиента;
  • проверьте страну, область, город и индекс;
  • проверьте вес и габариты товара;
  • проверьте классы доставки;
  • проверьте API службы доставки;
  • проверьте, не скрыт ли метод доставки плагином.

5. Проверьте оплату

Если заказ создаётся, но ошибка появляется при оплате, проверяйте платёжный шлюз.

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

Если проблема именно в оплате, смотрите статью Не работает оплата WooCommerce.

6. Проверьте WAF, ModSecurity и security-плагины

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

Проверьте:

  • Cloudflare Firewall Events;
  • ModSecurity logs;
  • Imunify360;
  • Wordfence или другой security-плагин;
  • блокировку POST-запросов;
  • блокировку по стране или IP;
  • reCAPTCHA;
  • rate limiting;
  • защиту от ботов на checkout.

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

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

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

Код

Важно: код ниже предназначен для диагностики. Он может повлиять на 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_after_checkout_validation', function ($data, $errors) {
    if (!function_exists('wc_get_logger')) {
        return;
    }

    if (empty($errors) || !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-debug')
    );
}, 10, 2);

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

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

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

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-order-debug')
    );
}, 10, 3);

Проверить активные payment gateways

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-checkout-payment-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-checkout-shipping-debug')
        );
    }

    return $rates;
}, 20, 2);

Проверить wc-ajax checkout через Network

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

?wc-ajax=checkout

Если там 403 — проверяйте WAF и security-плагины. Если 500 — проверяйте debug.log. Если 504 — проверяйте timeout, сервер и медленные обработчики.

Проверить логи WooCommerce на сервере

Часто логи находятся здесь:

/wp-content/uploads/wc-logs/

Смотреть их можно через админку WooCommerce, FTP, файловый менеджер хостинга или SSH.

Результат

После исправления checkout должен проходить полный путь без ошибки: товар остаётся в корзине, доставка считается, оплата выбирается, заказ создаётся, клиент попадает на страницу благодарности, а статус заказа меняется по логике платёжного метода.

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

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

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

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

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

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

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

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

Если корзина очищается при переходе на checkout или заказ не создаётся, проверьте cookies, домен, HTTPS, кеш, CDN и настройки безопасности браузера.

Проверить reCAPTCHA

reCAPTCHA может блокировать checkout, если скрипт не загружается, ключи неверные, домен не добавлен или оптимизация JS откладывает нужный скрипт.

Проверить mixed content

Если checkout работает по HTTPS, но часть скриптов или API-запросов идёт по HTTP, браузер может блокировать их. Проверьте Console и настройки siteurl/home.

Проверить Action Scheduler

Если оформление заказа связано с фоновыми задачами, проверьте:

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

Зависшие или failed actions могут ломать оплату, письма, интеграции и обновление статусов.

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

Кешировать checkout

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

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

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

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

На checkout точная причина часто видна именно там: 403, 500, JS-ошибка, HTML вместо JSON или timeout.

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

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

Делать обязательное поле скрытым

Если поле скрыто визуально, но осталось required, checkout может не оформлять заказ.

Не проверять доставку

Иногда ошибка checkout на самом деле связана с тем, что WooCommerce не может подобрать способ доставки.

Не проверять оплату

Если заказ создаётся, но дальше ошибка, часто причина в gateway, API-ключах, SSL, webhook или платёжном виджете.

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

Проблема: checkout выдаёт ошибку 403

Возможная причина: WAF, ModSecurity, Cloudflare, security-плагин, nonce или блокировка POST-запроса.

Что делать: проверить Firewall Events, server logs, security logs, исключить checkout из защиты только точечно.

Проблема: checkout выдаёт ошибку 500

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

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

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

Возможная причина: wc-ajax timeout, JS-ошибка, медленный сервер, WAF, внешний API оплаты или доставки.

Что делать: проверить Network Timing, Console, WooCommerce logs, debug.log и внешние API.

Проблема: WooCommerce пишет, что нет доступных способов доставки

Возможная причина: адрес клиента не попадает в зону доставки или метод доставки не активен.

Что делать: проверить зоны доставки, методы, адрес, вес товара и условия бесплатной доставки.

Проблема: способ оплаты не отображается

Возможная причина: отключён шлюз, неверная валюта, SSL, ограничения метода, страна клиента или ошибка плагина оплаты.

Что делать: проверить WooCommerce → Настройки → Платежи, логи шлюза, SSL, валюту и test/live режим.

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

Возможная причина: ошибка платёжного шлюза, редирект, JS, gateway response или блокировка внешнего скрипта.

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

Проблема: checkout работает у админа, но не у клиента

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

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

Проблема: ошибка появилась после обновления

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

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

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

Почему WooCommerce checkout выдаёт ошибку?

Чаще всего из-за JS-ошибки, wc-ajax, кеша checkout, проблемы оплаты, доставки, обязательных полей, WAF, PHP Fatal error, сессий, cookies, темы или конфликта плагинов.

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

Повторите ошибку в инкогнито, откройте Console и Network, найдите ?wc-ajax=checkout, проверьте HTTP-статус, WooCommerce logs, debug.log, кеш, доставку и оплату.

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

Обычно зависает AJAX-запрос checkout: его блокирует WAF, ломает PHP-ошибка, внешний API, JS-конфликт, кеш или медленный сервер.

Почему checkout выдаёт 403?

Обычно POST-запрос блокирует WAF, ModSecurity, Cloudflare, security-плагин, nonce-проверка или защита от ботов.

FAQ

Почему WooCommerce checkout не оформляет заказ?

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

Где смотреть ошибку checkout?

В Console, Network, WooCommerce → Статус → Журналы, примечаниях заказа, debug.log и error_log хостинга.

Что значит ошибка 403 на checkout?

Это значит, что запрос оформления заказа запрещён. Часто его блокирует WAF, ModSecurity, Cloudflare, security-плагин или nonce-проверка.

Что значит ошибка 500 на checkout?

Это внутренняя ошибка сервера. Обычно её вызывает PHP Fatal error в теме, плагине, платёжном модуле, доставке или кастомном коде.

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

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

Почему пропали поля checkout?

Возможен конфликт темы, checkout editor plugin, блоков WooCommerce, кеша, JavaScript или устаревших шаблонов WooCommerce.

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

Часто из-за JavaScript-ошибки, отложенной загрузки скриптов, reCAPTCHA, минификации JS, конфликта темы или ошибки в платёжном виджете.

Почему checkout работает только иногда?

Такое бывает из-за кеша, CDN, WAF, сессий, cookies, нестабильного API оплаты/доставки, нагрузки сервера или ошибки, которая зависит от конкретного товара.

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

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

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

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

Вывод

Если WooCommerce checkout выдаёт ошибку, сначала нужно определить точку сбоя: страница checkout, поля, доставка, оплата, wc-ajax, JavaScript, WAF, PHP, кеш или внешний API.

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

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

Об авторе

vkuzyomko administrator