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

В чём проблема с изменением статуса заказа в WooCommerce после оплаты

В стандартной логике WooCommerce статус заказа автоматически меняется на "обработка" или "завершено" после успешного платежа. Однако при использовании сторонних платежных шлюзов или кастомных интеграций статус может оставаться на "ожидании оплаты" или "в обработке" без автоматического перехода в нужный статус. Это создаёт проблемы для автоматизации дальнейших процессов, таких как отгрузка или уведомления покупателям.

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

Для начала проверьте следующие моменты:

  • Какой платежный шлюз используется и как он обрабатывает вебхуки или ответы от платежной системы.
  • Настроен ли правильный переход статусов в настройках WooCommerce (WooCommerce > Настройки > Платежи).
  • Отсутствуют ли ошибки в логах WooCommerce (WooCommerce > Статус > Логи) по платежным шлюзам.
  • Используются ли кастомные хуки или фильтры, которые могут блокировать смену статуса.

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

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

1. Подключение хука для обработки подтверждения платежа

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

add_action('woocommerce_order_status_pending_to_processing', 'custom_confirm_payment_status_change', 10, 1);
add_action('woocommerce_order_status_on-hold_to_processing', 'custom_confirm_payment_status_change', 10, 1);

function custom_confirm_payment_status_change($order) {
    // Дополнительная логика или логирование
}

Этот хук срабатывает при переходе заказа из статуса «ожидание» или «на удержании» в «обработка».

2. Принудительное изменение статуса при подтверждении платежа через вебхук

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

add_action('init', 'handle_payment_webhook');
function handle_payment_webhook() {
    if ($_SERVER['REQUEST_METHOD'] !== 'POST' || !isset($_GET['payment_webhook'])) {
        return;
    }

    $payload = file_get_contents('php://input');
    $data = json_decode($payload, true);

    if (empty($data['order_id']) || empty($data['payment_status'])) {
        status_header(400);
        exit('Invalid data');
    }

    $order_id = intval($data['order_id']);
    $order = wc_get_order($order_id);
    if (!$order) {
        status_header(404);
        exit('Order not found');
    }

    if ($data['payment_status'] === 'confirmed' && $order->has_status('pending')) {
        $order->update_status('processing', 'Платёж подтверждён через вебхук');
    }

    status_header(200);
    exit('OK');
}

Для вызова обработчика используйте URL вида https://ваш-сайт.ru/?payment_webhook=1. Этот код проверяет статус платежа и меняет статус заказа на «обработка».

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

  • Создайте тестовый заказ со статусом «ожидание оплаты».
  • Отправьте POST-запрос с корректными данными вебхука на URL /?payment_webhook=1 (можно через curl или Postman).
  • Проверьте, что статус заказа изменился на «обработка».
  • Просмотрите логи WooCommerce на наличие ошибок.

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

  • Не срабатывает смена статуса: Проверьте, правильно ли задан идентификатор заказа и статус в данных вебхука.
  • Несрабатывает обработчик вебхука: Убедитесь, что URL корректен и запрос приходит методом POST.
  • Конфликт с другими плагинами: Отключите плагины, которые могут влиять на статусы заказов, и протестируйте заново.
  • Проблемы с правами доступа: Проверьте, что сервер и WordPress имеют права на обновление заказа.

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

  • Добавьте проверку подписи вебхука от платежной системы, чтобы избежать подделки запросов.
  • Используйте nonce или секретный ключ в URL для вызова обработчика.
  • Логируйте все обращения вебхуков в отдельный файл для отладки.
  • Минимизируйте нагрузку, обрабатывая только необходимые статусы заказа.

Сравнение вариантов реализации

МетодПреимуществаНедостатки
Использование стандартных хуков WooCommerceПростота, интеграция с системойНе всегда срабатывает с кастомными шлюзами
Обработка вебхуков вручнуюПолный контроль, подходит для любых шлюзовТребует настройки безопасности и дополнительного кода
Плагины для автоматизацииБыстрая настройка, готовые функцииМогут быть тяжёлыми, не всегда бесплатны
Как использовать Redis для кэширования платежных запросов в WordPress
27.03.2026
Как отладить проблемы с подключением платежных систем в WordPress
02.02.2026
Как установить лимит покупок для пользователей в WordPress
25.02.2026
Как создать автоматическую проверку платежей в WordPress
04.04.2026
Как создать автоплатёж в WordPress для увеличения конверсии
15.12.2025