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

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

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

Чтобы убедиться, что возврат не происходит автоматически, проверьте следующие моменты:

  • Открытая админка WooCommerce → «Заказы» → статус отменённого заказа.
  • В платежных транзакциях заказа нет записи о возврате.
  • Платёжный шлюз поддерживает возвраты через API (Stripe, PayPal и др.).
  • Отсутствие кастомных скриптов или плагинов, которые могут блокировать возврат.

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

1. Проверка поддержки возвратов API платежного шлюза

Убедитесь, что используемый шлюз (например, Stripe или PayPal) поддерживает автоматическую обработку возвратов через API. Если нет — автоматизация невозможна.

2. Установка и настройка плагина для автоматизации возвратов

Для примера возьмём бесплатный плагин Woo Refund and Return Manager или любой аналог с поддержкой API возвратов.

Настройте плагин, привязав его к вашему платежному шлюзу и активируйте опцию автоматического возврата при смене статуса заказа на «Отменён».

3. Добавление кастомного кода для автоматизации возврата через Stripe API

Если плагин отсутствует или нужна кастомизация, можно добавить код в functions.php темы или в отдельный плагин.

add_action('woocommerce_order_status_cancelled', 'auto_refund_on_order_cancelled');
function auto_refund_on_order_cancelled($order_id) {
    if (!$order_id) return;
    $order = wc_get_order($order_id);
    if (!$order) return;

    // Проверяем, что оплата была через Stripe
    $payment_method = $order->get_payment_method();
    if ($payment_method !== 'stripe') return;

    // Получаем ID платежа Stripe
    $charge_id = $order->get_transaction_id();
    if (!$charge_id) return;

    // Подключаем Stripe SDK (установите через Composer или вручную)
    if (!class_exists('\Stripe\StripeClient')) return;

    $stripe_secret_key = 'sk_test_ваш_ключ';
    $stripe = new \Stripe\StripeClient($stripe_secret_key);

    try {
        $refund = $stripe->refunds->create([
            'charge' => $charge_id,
        ]);
        // Логируем успешный возврат
        error_log('Refund created for order ' . $order_id . ': ' . $refund->id);
    } catch (Exception $e) {
        error_log('Refund error for order ' . $order_id . ': ' . $e->getMessage());
    }
}

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

Для тестирования:

  1. Создайте заказ с оплатой через Stripe в тестовом режиме.
  2. Перейдите в админку WooCommerce и измените статус заказа на «Отменён».
  3. Проверьте логи ошибок PHP (error_log), чтобы увидеть запись о возврате.
  4. Зайдите в панель Stripe и убедитесь, что возврат создан.

Если возврат появился, автоматизация работает.

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

  • Ошибка: отсутствует charge_id. Проверьте, что транзакция прошла и ID платежа записан в заказе. Иначе возврат невозможен.
  • Ошибка: класс StripeClient не найден. Установите PHP-библиотеку Stripe через Composer: composer require stripe/stripe-php и подключите автозагрузчик.
  • Отсутствие прав на создание возврата в Stripe. Проверьте API-ключ и настройки аккаунта Stripe.
  • Платёжный метод не Stripe. Для других шлюзов нужен свой API и логика возврата.
  • Отмена заказа не меняет статус. Убедитесь, что отмена происходит через WooCommerce, а не вручную в базе.

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

  • Храните API-ключи Stripe в wp-config.php или через переменные окружения, не в коде напрямую.
  • Используйте локальный лог для отладки (error_log), но убирайте из продакшена или используйте системный лог.
  • Избегайте запуска возврата при каждом обновлении статуса — только при переходе в «Отменён».
  • Тестируйте на staging-среде с тестовыми API-ключами Stripe.
  • Используйте пулы соединений и кэширование, если интеграция с API масштабируется.

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

МетодПлюсыМинусыПример
Плагин (например, Woo Refund and Return Manager)Простая установка, готовый функционал, поддержка популярных шлюзовОграничена гибкость, возможны конфликты с другими плагинамиСсылка
Кастомный код с Stripe APIПолный контроль, интеграция под свои задачиТребует знаний PHP и Stripe API, возможны ошибки безопасностиПример кода выше
Ручной возврат через админку WooCommerceНе требует программированияЗатратно по времени, риск ошибокСтандартный функционал WooCommerce
WooCommerce: автоматическое изменение цен по акции с помощью кода
16.05.2026
Как успешно использовать AJAX в WordPress для объявлений и обновления контента
11.04.2026
Как использовать WP-Cron для решения проблем с задержкой запусков задач в WordPress
18.04.2026
Как создать автоматические ответы в WordPress
14.11.2025
Как установить ограничение доступа к контенту в WordPress
30.03.2026