WooCommerce: автоматическая обработка возвратов через хуки

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

В стандартном WooCommerce возвраты чаще всего обрабатываются вручную через админку или сторонние плагины. При большом количестве заказов и возвратов это занимает много времени и увеличивает риск ошибок. Автоматизация процесса по заданным условиям (например, возврат по истечении срока, возврат при отмене оплаты) позволяет снизить нагрузку и ускорить обработку.

Как работает обработка возвратов в WooCommerce: ключевые хуки и функции

Возвраты в WooCommerce связаны с объектом WC_Order_Refund. Для создания возврата программно используется функция wc_create_refund(). Основные хуки для обработки статусов заказов:

  • woocommerce_order_status_changed — срабатывает при изменении статуса заказа;
  • woocommerce_order_refunded — после создания возврата;
  • woocommerce_refund_created — после сохранения возврата.

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

Рассмотрим пример, когда при смене статуса заказа на cancelled и условии, что оплата была проведена, автоматически создаётся возврат на полную сумму.

1. Подключение к хуку изменения статуса заказа

add_action('woocommerce_order_status_changed', 'auto_refund_on_cancelled', 10, 4);

2. Функция автоматического создания возврата

function auto_refund_on_cancelled($order_id, $old_status, $new_status, $order) {
    if ($new_status !== 'cancelled') {
        return;
    }

    // Проверяем, был ли заказ оплачен
    if (!$order->is_paid()) {
        return;
    }

    // Проверяем, есть ли уже возврат для этого заказа
    $refunds = $order->get_refunds();
    if (!empty($refunds)) {
        return; // Возврат уже создан
    }

    $amount = $order->get_total();
    if ($amount <= 0) {
        return; // Нет суммы для возврата
    }

    $refund_data = array(
        'amount'         => $amount,
        'reason'         => 'Автоматический возврат при отмене заказа',
        'order_id'       => $order_id,
        'refund_payment' => true,
    );

    $refund = wc_create_refund($refund_data);
    if (is_wp_error($refund)) {
        error_log('Ошибка создания возврата: ' . $refund->get_error_message());
    }
}

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

1. Создайте тестовый заказ и оплатите его (например, через режим песочницы платежного шлюза).
2. В админке WooCommerce измените статус заказа на cancelled.
3. Проверьте журнал заказов — должен появиться возврат на полную сумму.
4. В разделе возвратов убедитесь, что возврат создан и статус платежа обновлён.
5. Проверьте логи ошибок (если включено логирование), чтобы убедиться в отсутствии ошибок.

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

  • Возврат не создаётся, хотя статус изменён: проверьте, что заказ действительно оплачен. Метод $order->is_paid() возвращает false для неоплаченных заказов.
  • Дублирование возвратов: добавьте проверку на существующие возвраты с помощью $order->get_refunds().
  • Ошибка «Refund failed»: проверьте, поддерживает ли платежный шлюз автоматические возвраты через API и корректно ли настроены ключи и разрешения.
  • Возврат создаётся, но деньги не возвращаются: в WooCommerce возврат создаётся локально, но реальный возврат средств зависит от шлюза. Убедитесь, что он поддерживает автоматические возвраты.

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

  • Используйте is_admin() и проверяйте права пользователя, если добавляете обработку возвратов в пользовательских местах.
  • Логируйте ошибки возвратов для быстрого выявления проблем.
  • Не создавайте возвраты в хуках, которые вызываются слишком часто, чтобы избежать нагрузок.
  • При большом количестве заказов используйте асинхронные задачи (например, WP-Cron) для создания возвратов во внепиковое время.

Сравнение подходов автоматизации возвратов в WooCommerce

МетодПлагинКодКомпромисс
Простая автоматизация возвратовWooCommerce Smart RefundХук woocommerce_order_status_changed + wc_create_refund()Плагин проще, но менее гибкий, код — требует поддержки
Продвинутая логика возвратовРасширенные плагины обработки платежейКастомные функции с проверкой API платежных системПлагины дороже, код сложнее в поддержке
Как автоматизировать управление изображениями в WordPress
27.01.2026
WooCommerce: автоматическое возврат средств и смена статуса заказа через код
29.06.2026
WooCommerce: автоматическое удаление заказов с отсрочкой платежа
28.05.2026
Как отключить emoji в WordPress и улучшить производительность сайта
01.04.2026
WooCommerce: автоматическое удаление отменённых заказов с отсрочкой
04.06.2026