WooCommerce: установка и настройка автоматического возврата денег по заказам

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

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

Типичная задача — автоматически создавать возврат на основе определённых условий, например, по истечении срока ожидания или при отмене заказов с определённым статусом.

Как реализовать автоматический возврат денег в WooCommerce через код

Пошаговое решение

Рассмотрим пример, как автоматически создавать возврат 100% суммы для заказов, отменённых более 3 дней назад.

  1. Подключаем функцию к WP-Cron, чтобы проверять заказы периодически.
  2. Получаем заказы со статусом "cancelled" старше 3 дней.
  3. Создаём возврат средствами WooCommerce API.

Пример кода для functions.php или отдельного плагина

add_action('wp', 'wpassist_setup_refund_cron');
function wpassist_setup_refund_cron() {
    if (!wp_next_scheduled('wpassist_refund_cron_hook')) {
        wp_schedule_event(time(), 'daily', 'wpassist_refund_cron_hook');
    }
}

add_action('wpassist_refund_cron_hook', 'wpassist_process_auto_refund');
function wpassist_process_auto_refund() {
    $args = array(
        'status' => 'cancelled',
        'date_created' => '<' . (time() - 3 * DAY_IN_SECONDS),
        'limit' => -1
    );
    $orders = wc_get_orders($args);

    foreach ($orders as $order) {
        if (wpassist_order_already_refunded($order)) {
            continue; // Пропускаем если возврат уже есть
        }
        wpassist_create_refund($order);
    }
}

function wpassist_order_already_refunded($order) {
    foreach ($order->get_refunds() as $refund) {
        if ($refund->get_amount() > 0) {
            return true;
        }
    }
    return false;
}

function wpassist_create_refund($order) {
    $refund_amount = $order->get_total();
    $refund = wc_create_refund(array(
        'amount' => $refund_amount,
        'reason' => 'Автоматический возврат по истечении 3 дней',
        'order_id' => $order->get_id(),
        'refund_payment' => true,
    ));

    if (is_wp_error($refund)) {
        error_log('Ошибка возврата для заказа ' . $order->get_id() . ': ' . $refund->get_error_message());
    }
}

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

  • Проверьте, что в wp_cron зарегистрировано событие wpassist_refund_cron_hook (через плагин WP Crontrol).
  • Создайте заказ, отмените его, и установите дату создания на 4+ дня назад (через базу или отладчик).
  • Запустите вручную крон-событие или дождитесь ежедневного запуска.
  • Проверьте, что в разделе заказов появился возврат с нужной суммой.
  • Проверьте логи ошибок (wp-content/debug.log), если возврат не создаётся.

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

  • Возврат не создаётся, ошибка "Refund amount is zero": проверьте, что сумма возврата берётся из $order->get_total(), а не из пустых или неподдерживаемых полей.
  • Крон не запускается: убедитесь, что WP-Cron работает (нет проблем с вызовами wp-cron.php), или настройте системный cron.
  • Повторные возвраты: добавлена проверка наличия возвратов для заказа, но если она не срабатывает, проверьте правильность условий и формат возвратов.
  • Ошибка авторизации при возврате платежа: убедитесь, что платежный шлюз поддерживает автоматические возвраты и настроен правильно.

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

  • Используйте wp_schedule_event с осторожностью, не создавайте дубли событий.
  • Обрабатывайте возвраты партиями, чтобы не перегружать сервер.
  • Логируйте ошибки для отладки, но не раскрывайте чувствительные данные.
  • Проверяйте, поддерживает ли ваш платежный шлюз автоматические возвраты через WooCommerce API.

Сравнение способов настройки автоматического возврата

СпособПлюсыМинусыКомпромисс
Плагин возвратов (например, WooCommerce Smart Refunder)Готовое решение, часто с UIПлатные, могут быть избыточныХорошо для непрофильных задач с бюджетом
Код на WP-Cron (как в статье)Полный контроль, бесплатно, кастомизацияТребует знаний PHP, настройкаЛучше для разработчиков и кастомных сценариев
Ручной возврат через админкуПростота, нет дополнительного кодаТрудозатратно при большом объёмеПодходит для малого количества возвратов

Итог

Автоматизация возвратов в WooCommerce с помощью WP-Cron и функций WooCommerce API — эффективный способ ускорить обработку заказов и снизить риски человеческих ошибок. Предложенный в статье пример позволяет реализовать базовый сценарий, который можно расширять под конкретные бизнес-процессы.

Для расширенного SEO, оптимизации и чистки сайта советуем посмотреть плагин Clearfy Pro, который поможет поддерживать WooCommerce-сайт в порядке.

Как использовать WP-Cron для автоматизации задач в WordPress
03.05.2026
Как изменить вывод количества товаров в корзине WooCommerce
23.11.2025
Как отключить AJAX загрузку товаров в WooCommerce
06.12.2025
Как создать собственный тип пользователя в WordPress с применением хуков
13.01.2026
WooCommerce: автоматическое удаление неактивных заказов по времени
21.05.2026