WooCommerce: автоматическое изменение статуса заказа при оплате через платежные системы

Диагностика проблемы: заказ не меняет статус после оплаты

В WooCommerce часто возникает ситуация, когда заказ после успешной оплаты через внешние платежные системы (например, Яндекс.Касса, PayPal, Robokassa) остаётся в статусе «Ожидает оплаты» или «В обработке», что мешает автоматизировать процесс дальнейшей обработки заказа и информирования клиента.

Чтобы проверить наличие проблемы, сделайте тестовый заказ через такую платежную систему. Если статус заказа не меняется на «Завершён» или «Оплачен» после подтверждения оплаты, значит, необходимо внедрять программное решение.

Как WooCommerce обрабатывает статусы заказов при оплате

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

Пошаговое решение: автоматическое изменение статуса заказа

1. Добавление хука для обработки успешной оплаты

В functions.php вашей темы или в кастомном плагине добавьте следующий код:

add_action('woocommerce_payment_complete', 'custom_woocommerce_payment_complete_status_change');
function custom_woocommerce_payment_complete_status_change($order_id) {
    if (!$order_id) return;

    $order = wc_get_order($order_id);
    // Проверяем текущий статус
    if ($order->get_status() === 'processing' || $order->get_status() === 'on-hold') {
        $order->update_status('completed', 'Автоматическое изменение статуса после успешной оплаты');
    }
}

Этот код автоматически меняет статус на completed при подтверждении оплаты, если текущий статус — processing или on-hold.

2. Проверка корректной работы webhook (при необходимости)

Если вы используете сторонний шлюз с webhook, убедитесь, что URL webhook указан правильно и что WooCommerce получает уведомление. Для отладки можно подключить плагин Clearfy для логирования запросов.

3. Обработка нестандартных платежных систем

Если платежная система не использует стандартный webhook, нужно вручную обрабатывать ответ и менять статус, например:

add_action('init', 'custom_check_payment_response');
function custom_check_payment_response() {
    if (isset($_GET['payment_status']) && $_GET['payment_status'] === 'success' && isset($_GET['order_id'])) {
        $order_id = intval($_GET['order_id']);
        $order = wc_get_order($order_id);
        if ($order && $order->get_status() !== 'completed') {
            $order->update_status('completed', 'Оплата подтверждена через callback');
        }
    }
}

Этот код проверяет GET-параметры и меняет статус, если оплата успешна.

Проверка результата после внедрения

  • Создайте тестовый заказ и оплатите его через подключённую платежную систему.
  • Проверьте в админке WooCommerce, что статус заказа изменился на «Завершён» или нужный вам.
  • Просмотрите логи сервера и WooCommerce, чтобы убедиться, что webhook или callback обработаны корректно.
  • Если используете ручную проверку GET-параметров, повторите тест с корректными параметрами.

Частые ошибки и как их исправить

  • Статус не меняется: Неправильный хук или точка вызова. Проверьте, что платежный шлюз действительно вызывает woocommerce_payment_complete или ваш кастомный код срабатывает.
  • Webhook не доходят: Проверьте URL webhook, права доступа и настройки сервера (firewall, SSL).
  • Статус меняется, но на неправильный: Убедитесь, что код обновления статуса использует правильный slug статуса (например, completed).
  • Проблемы с кешированием: Убедитесь, что кеши страниц и объектов не мешают обновлению статусов.

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

  • Подтверждайте вебхуки с помощью секретных ключей или подписи, чтобы избежать подделки запросов.
  • Используйте nonce и проверку прав пользователя при ручной обработке GET-параметров.
  • Ведите локальный лог успешных и неуспешных уведомлений от платежных систем для отладки.
  • Избегайте тяжёлых операций в хуках смены статуса — лучше запускать асинхронные задачи через WP-Cron или отдельные процессы.

Сравнение способов автоматизации изменения статуса заказа

МетодПреимуществаНедостатки
Хук woocommerce_payment_completeСтандартный, простой, работает с большинством шлюзовЗависит от корректной работы шлюза
Обработка webhook вручнуюГибкость, можно добавить кастомную логикуСложнее в настройке, требует безопасности
Проверка GET-параметровПростота реализации для нестандартных шлюзовМенее безопасно, требует тщательной валидации
WooCommerce: как автоматически удалять отменённые заказы
21.05.2026
Как автоматизировать удаление старого контента в WordPress
12.02.2026
Как избежать конфликтов между плагинами в WordPress: практические советы и примеры кода
09.03.2026
Как автоматизировать удаление старого контента в WordPress по дате
24.02.2026
WordPress: установка и настройка WPRemark для отзывов на сайте
01.01.2026

Обучение разработке на WordPress, как создавать темы, плагины. Подробнее об обучении.