Не работает оплата WooCommerce

Автор:vkuzyomko

Не работает оплата WooCommerce

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

Оплата WooCommerce может визуально “не работать” по-разному: кнопка не нажимается, способ оплаты не отображается, заказ не создаётся, клиент не переходит на платёжную страницу, банк списывает деньги, но заказ остаётся “В ожидании оплаты”, callback не приходит, webhook падает с ошибкой или checkout зависает на спиннере.

Главная ошибка — сразу менять платёжный плагин или отключать все плагины на рабочем магазине. Сначала нужно проверить checkout, логи WooCommerce, Network в браузере, настройки платёжной системы, callback/webhook URL, кеш, SSL, WAF и статус заказа. Если проблема связана с логикой магазина или платёжной интеграцией, чаще нужна точечная доработка WooCommerce, а не случайные правки.

Причина

Оплата в WooCommerce зависит сразу от нескольких частей: страницы checkout, корзины, сессий, JavaScript, платёжного шлюза, статусов заказа, email-уведомлений, callback/webhook, SSL, сервера и внешней платёжной системы.

Поэтому проблема может быть не в WooCommerce как таком, а в одном звене цепочки. Например, оплата проходит на стороне LiqPay, WayForPay, Stripe, PayPal или другого сервиса, но WooCommerce не получает подтверждение и оставляет заказ в статусе “Pending payment”.

Симптом Возможная причина Что проверить
Способ оплаты не отображается валюта, страна, доставка, настройки шлюза Payment methods, zones, currency, gateway settings
Кнопка оплаты не нажимается JavaScript-ошибка, тема, кеш, конфликт плагина Console, Network, checkout scripts
Checkout зависает wc-ajax, PHP-ошибка, slow server, WAF Network, debug.log, WooCommerce logs
Заказ не создаётся ошибка checkout, обязательные поля, сессии checkout fields, cookies, sessions
Деньги списались, заказ Pending payment не пришёл webhook/callback логи платёжной системы, callback URL
После оплаты клиент видит ошибку return URL, thank you page, редирект, кеш order-received, redirects, SSL
Оплата работает в тесте, но не в live неверные live-ключи, режим песочницы API keys, merchant ID, live/test mode
Оплата не работает после обновления конфликт версии плагина, PHP, WooCommerce changelog, debug.log, plugins

Если проблема начинается ещё до оплаты и заказ вообще не оформляется, сначала проверьте статью WooCommerce не оформляет заказ: причины и как исправить checkout. Если проблема именно в LiqPay или WayForPay, полезно отдельно проверить подключение LiqPay / WayForPay к WooCommerce.

Диагностика

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

1. Проверьте, создаётся ли заказ

Сделайте тестовый заказ и посмотрите, появляется ли он в WooCommerce → Заказы.

  • если заказ не создаётся — проблема на checkout;
  • если заказ создаётся, но не переходит к оплате — проблема в шлюзе или редиректе;
  • если оплата прошла, но статус не изменился — проблема в callback/webhook;
  • если заказ Failed — смотрите примечания заказа и логи шлюза;
  • если заказ Pending payment — WooCommerce не получил подтверждение оплаты.

2. Проверьте статус заказа и примечания

Откройте проблемный заказ и посмотрите блок примечаний. WooCommerce и платёжные плагины часто пишут туда важные сообщения.

Ищите такие признаки:

  • payment failed;
  • gateway error;
  • invalid signature;
  • callback received;
  • webhook failed;
  • order status changed;
  • payment pending;
  • transaction ID;
  • currency mismatch;
  • amount mismatch.

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

В админке откройте:

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

Выберите лог платёжного шлюза, например Stripe, PayPal, LiqPay, WayForWay, Fondy, Mono, Portmone или другой используемый модуль.

В логах могут быть:

  • ответ платёжной системы;
  • код ошибки;
  • проблема подписи;
  • неверный merchant ID;
  • ошибка API-ключа;
  • неверный callback URL;
  • timeout;
  • SSL error;
  • blocked webhook;
  • несовпадение суммы или валюты.

4. Проверьте Console и Network

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

Проверьте:

  • есть ли JavaScript-ошибки;
  • идёт ли запрос ?wc-ajax=checkout;
  • какой HTTP-статус у checkout-запроса;
  • нет ли 403, 500, 502 или 504;
  • что возвращает Response;
  • нет ли редиректа на неправильный URL;
  • не блокируется ли запрос security-плагином.

5. Проверьте настройки платёжного шлюза

В WooCommerce откройте:

WooCommerce → Настройки → Платежи

Проверьте каждый включённый способ оплаты:

  • включён ли метод оплаты;
  • правильный ли режим: test или live;
  • верные ли merchant ID, public key, private key, secret key;
  • совпадает ли валюта магазина с валютой шлюза;
  • поддерживает ли шлюз страну клиента;
  • не ограничен ли метод доставки или зоной;
  • правильно ли указан callback/webhook URL;
  • нет ли устаревшей версии платёжного плагина.

6. Проверьте callback и webhook

Если клиент оплатил, но заказ не меняет статус, почти всегда нужно смотреть webhook/callback. Платёжная система должна отправить серверу магазина подтверждение оплаты.

Проверьте:

  • какой callback URL указан в платёжной системе;
  • доступен ли этот URL извне;
  • не блокирует ли его WAF, Cloudflare или security-плагин;
  • не кешируется ли callback;
  • не отдаёт ли callback 301, 403, 404, 500 или HTML вместо 200;
  • есть ли событие в логах платёжной системы;
  • есть ли запись в WooCommerce logs;
  • меняется ли статус заказа после callback.

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

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

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

Решение

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

1. Проверьте базовые настройки WooCommerce

Начните с простого. Часто оплата не работает из-за выключенного метода, неверной валюты или тестового режима.

  • включите нужный способ оплаты;
  • проверьте валюту магазина;
  • проверьте страну и адрес магазина;
  • проверьте зоны доставки;
  • проверьте страницу Checkout;
  • проверьте страницу Cart;
  • проверьте страницу My Account;
  • проверьте, что shortcode или блок checkout не удалён;
  • проверьте тестовый/live режим платёжного шлюза.

2. Очистите кеш checkout и исключите динамические страницы

Checkout, корзина, кабинет, wc-ajax и callback/webhook нельзя кешировать как обычные страницы. Агрессивный кеш может ломать сессии, nonce, корзину, оплату и обновление статусов.

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

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

3. Исправьте JavaScript-ошибки на checkout

Если кнопка оплаты не работает или checkout зависает, проверьте Console. Одна JS-ошибка темы, конструктора, аналитики или плагина может остановить checkout.

  • отключите объединение JS для теста;
  • отключите defer/delay JS для checkout;
  • проверьте конфликт с темой;
  • проверьте кастомные скрипты;
  • проверьте ошибки reCAPTCHA;
  • проверьте ошибки платёжного виджета;
  • очистите кеш после изменений.

4. Проверьте webhook/callback в платёжной системе

Если деньги списались, но заказ не обновился, откройте кабинет платёжной системы и найдите журнал webhook/callback.

Нужно понять:

  • был ли отправлен callback;
  • какой HTTP-код получил платёжный сервис;
  • был ли timeout;
  • не было ли SSL-ошибки;
  • совпала ли подпись;
  • совпали ли сумма и валюта;
  • видит ли WooCommerce transaction ID;
  • есть ли order note в заказе.

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

Платёжные callback-запросы часто приходят как POST-запросы с JSON, подписью, токеном или нестандартными параметрами. WAF может принять их за подозрительные.

  • проверьте Cloudflare Firewall Events;
  • проверьте ModSecurity logs;
  • проверьте Imunify360;
  • проверьте security-плагин WordPress;
  • попросите хостинг найти блокировку по времени оплаты;
  • добавьте исключение только для конкретного callback URL;
  • не отключайте весь WAF без необходимости.

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

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

  • сделайте backup;
  • создайте staging-копию;
  • временно переключитесь на стандартную тему;
  • отключите плагины оптимизации для checkout;
  • отключите последний установленный плагин;
  • проверьте платёжный плагин;
  • проверьте debug.log;
  • сравните версии WooCommerce и платёжного модуля.

Код

Важно: код и команды ниже могут повлиять на checkout, оплату, заказы, статусы, callback, сессии, безопасность и работу магазина. Перед изменениями сделайте 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 AJAX

Откройте DevTools → Network и проверьте запрос:

?wc-ajax=checkout

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

Проверить список активных платёжных методов

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

add_filter('woocommerce_available_payment_gateways', function ($gateways) {
    if (function_exists('wc_get_logger')) {
        $logger = wc_get_logger();

        $logger->info(
            'Available payment gateways: ' . implode(', ', array_keys($gateways)),
            array('source' => 'sc-payment-debug')
        );
    }

    return $gateways;
});

После открытия checkout проверьте:

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

Проверить статус заказа через WP-CLI

Куда выполнять: SSH в корне сайта. Замените 123 на ID заказа.

wp post get 123 --field=post_status

Проверить мета-данные заказа

Куда выполнять: SSH в корне сайта.

wp post meta list 123

Ищите payment method, transaction ID, gateway response и похожие поля. Не меняйте мета-данные вручную без понимания логики платёжного шлюза.

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

На некоторых сайтах логи находятся в папке:

/wp-content/uploads/wc-logs/

Если папка закрыта от чтения снаружи — это нормально. Смотреть её нужно через хостинг, FTP или админку WooCommerce.

Проверить callback через curl

Куда выполнять: терминал или SSH. Проверяйте только доступность URL, не имитируйте реальный платёж без документации шлюза.

curl -I https://example.com/wc-api/payment-callback/

Для webhook/callback платёжный сервис обычно ждёт быстрый корректный HTTP-ответ. Если URL отдаёт 403, 404, 500, редирект или timeout, статус заказа может не обновиться.

Результат

После правильного исправления оплата WooCommerce должна проходить весь путь: клиент оформляет заказ, выбирает способ оплаты, переходит к оплате, платёжная система принимает деньги, callback/webhook возвращается на сайт, WooCommerce обновляет статус заказа и создаёт понятные примечания.

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

  • способ оплаты отображается на checkout;
  • кнопка оформления заказа работает;
  • заказ создаётся в WooCommerce;
  • клиент переходит на платёжную страницу;
  • после оплаты клиент возвращается на thank you page;
  • заказ получает правильный статус;
  • transaction ID сохраняется;
  • webhook/callback виден в логах;
  • письма WooCommerce отправляются;
  • в debug.log нет fatal errors;
  • checkout, cart и webhook URL исключены из агрессивного кеша.

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

Проверить тестовый и боевой режим

Многие платёжные плагины имеют test mode и live mode. Ошибка возникает, когда магазин работает в live, а ключи вставлены тестовые, или наоборот.

Проверить валюту

Некоторые шлюзы не поддерживают определённую валюту или требуют, чтобы валюта магазина совпадала с настройками merchant-аккаунта.

Проверить SSL

Для оплаты сайт должен работать по HTTPS. Если SSL настроен неправильно, платёжный шлюз может отклонять callback или браузер может блокировать часть checkout.

Проверить редиректы

Платёжные URL чувствительны к редиректам. Проверьте цепочки http → https, www → без www, языковые версии, trailing slash, редиректы SEO-плагинов и Cloudflare.

Проверить email отдельно

Иногда оплата работает, но владелец думает, что она сломалась, потому что письма WooCommerce не приходят. В таком случае нужно проверять SMTP и email-логи отдельно.

Проверить cron и Action Scheduler

Некоторые платёжные плагины используют отложенные задачи. Если Action Scheduler застрял, статусы и уведомления могут обновляться с задержкой.

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

Кешировать checkout

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

Не смотреть логи платёжной системы

В WooCommerce может быть мало информации. Часто точная причина видна именно в кабинете платёжного сервиса: failed webhook, invalid signature, timeout, SSL error.

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

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

Путать успешную оплату и статус Completed

Для физических товаров WooCommerce часто ставит Processing после успешной оплаты. Completed обычно означает, что заказ выполнен, а не просто оплачен.

Игнорировать JavaScript-ошибки

Если checkout JS сломан, запрос к оплате может вообще не отправляться. Console и Network нужно проверять обязательно.

Не проверять callback/webhook

Если деньги списаны, но заказ Pending payment, почти всегда нужно смотреть подтверждение от платёжной системы.

Исправлять файлы платёжного плагина напрямую

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

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

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

Возможная причина: метод отключён, не подходит валюта, страна, зона доставки, сумма заказа или настройки шлюза.

Что делать: проверить WooCommerce → Настройки → Платежи, валюту, зоны доставки, ограничения шлюза и доступные payment gateways.

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

Возможная причина: JavaScript-ошибка, кеш, тема, конфликт плагина, reCAPTCHA или checkout validation.

Что делать: открыть Console и Network, проверить wc-ajax checkout, отключить оптимизацию JS для checkout.

Проблема: заказ остаётся Pending payment

Возможная причина: WooCommerce не получил webhook/callback от платёжной системы.

Что делать: проверить логи платёжного сервиса, callback URL, WooCommerce logs, WAF, SSL и кеш.

Проблема: заказ Failed после оплаты

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

Что делать: открыть order notes, WooCommerce logs и журнал транзакций в платёжной системе.

Проблема: деньги списались, но письма нет

Возможная причина: оплата прошла, но email WooCommerce не отправился или попал в спам.

Что делать: проверить статус заказа, SMTP, WooCommerce email settings и логи отправки.

Проблема: оплата работает только у администратора

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

Что делать: тестировать в режиме инкогнито, проверить кеш, сессии, wc-ajax и доступность payment gateway для гостей.

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

Возможная причина: WAF, ModSecurity, Cloudflare, security-плагин, IP-блокировка или защита wp-admin/wc-api.

Что делать: проверить firewall logs, время события, IP платёжной системы и сделать точечное исключение для callback.

Проблема: checkout долго грузится

Возможная причина: медленный payment API, тяжёлый плагин доставки, внешний HTTP-запрос, admin-ajax, wc-ajax или перегруженный сервер.

Что делать: проверить Network Timing, WooCommerce logs, Query Monitor, server logs и внешние API.

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

Почему не работает оплата WooCommerce?

Чаще всего из-за настроек платёжного шлюза, checkout-ошибки, webhook/callback, кеша, SSL, WAF, JavaScript, PHP Fatal error, валюты, статусов заказов или конфликта плагинов.

Что делать первым, если WooCommerce не принимает оплату?

Сделайте тестовый заказ, проверьте статус заказа, order notes, WooCommerce logs, Console, Network, настройки платежей, callback/webhook и кеш checkout.

Почему заказ остаётся Pending payment?

Обычно платёжная система не смогла передать подтверждение оплаты в WooCommerce через webhook/callback, либо запрос был заблокирован кешем, WAF, SSL, сервером или плагином.

Почему способ оплаты не отображается?

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

FAQ

Почему не работает оплата WooCommerce после обновления?

Возможен конфликт новой версии WooCommerce, платёжного плагина, темы, PHP, кеша или JavaScript. Нужно проверить debug.log, WooCommerce logs, Console и временно протестировать на staging-копии.

Что делать, если деньги списались, а заказ не оплачен?

Проверьте логи платёжной системы, webhook/callback, order notes, статус заказа, transaction ID и WooCommerce logs. Чаще всего WooCommerce не получил подтверждение оплаты.

Что значит Pending payment в WooCommerce?

Это значит, что заказ создан, но WooCommerce ещё не получил подтверждение оплаты. Причина может быть в webhook, callback, ошибке платёжного шлюза или незавершённой оплате.

Почему заказ не становится Completed?

Не все оплаченные заказы автоматически становятся Completed. Для физических товаров WooCommerce часто ставит Processing, а Completed используется после выполнения заказа.

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

Обычно из-за JavaScript-ошибки, wc-ajax checkout, PHP Fatal error, WAF, медленного сервера, конфликта плагина или внешнего платёжного API.

Можно ли отключить кеш для checkout?

Да, checkout, cart, my-account, wc-ajax и callback URL нужно исключать из кеша. Эти страницы и запросы динамические.

Почему callback платёжной системы не доходит?

Его может блокировать WAF, Cloudflare, security-плагин, SSL-ошибка, редирект, кеш, firewall или неверный URL в настройках платёжной системы.

Как проверить, виноват ли платёжный плагин?

Проверьте его логи, версию, совместимость с WooCommerce и PHP, настройки live/test, ключи API, callback URL и ошибки в debug.log.

Почему оплата работает в тестовом режиме, но не в боевом?

Часто причина в неверных live-ключах, merchant ID, домене, callback URL, валюте, неподтверждённом аккаунте платёжной системы или SSL.

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

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

Вывод

Если не работает оплата WooCommerce, нужно сначала определить точку сбоя: checkout, создание заказа, переход к платёжной системе, списание денег, callback/webhook, обновление статуса или отправка писем.

Чаще всего проблема находится в настройках платёжного шлюза, webhook/callback, кешировании checkout, SSL, WAF/ModSecurity, JavaScript, PHP-ошибке, конфликте плагинов, валюте, статусах заказов или серверных ограничениях.

Самый безопасный порядок: backup, тестовый заказ, order notes, WooCommerce logs, Console, Network, проверка gateway settings, callback/webhook, кеша, WAF, SSL и debug.log. Так можно восстановить оплату без лишнего риска для заказов, клиентов и денег.

Об авторе

vkuzyomko administrator