Как сделать автоматический возврат платежей в WordPress

Автоматизация возврата платежей — важная задача для любого интернет-магазина или сайта с платным доступом на WordPress. Это позволяет быстро и без ошибок вернуть деньги клиенту в случае отмены заказа, отказа от услуги или рекламации. В этой статье подробно рассмотрим, как реализовать автоматический возврат платежей в WordPress с помощью плагинов и собственного кода.

Почему важен автоматический возврат платежей в WordPress

Ручное управление возвратами не только занимает время, но и увеличивает риск ошибок. Автоматизация позволяет:

  • Обрабатывать возвраты быстрее и без участия оператора.
  • Снижать вероятность ошибок при формировании возвратной транзакции.
  • Повысить доверие клиентов за счет прозрачных и своевременных возвратов.
  • Интегрировать возвраты с бухгалтерией и CRM системами.

Для WordPress есть множество платежных плагинов, которые поддерживают частичный и полный возврат средств, но не всегда они предлагают удобную автоматизацию. Давайте рассмотрим, как это можно сделать на примере плагина WooCommerce и кастомного кода.

Использование плагина WooCommerce для автоматических возвратов

Настройка возвратов в WooCommerce

WooCommerce поддерживает возвраты через админку, но чтобы сделать их автоматическими, нужен дополнительный функционал. Для этого можно использовать плагин WooCommerce Advanced Refunds, который расширяет стандартные возможности возврата.

После установки и активации плагина можно настроить:

  • Автоматическую генерацию возвратов при отмене заказа.
  • Интеграцию с платежными шлюзами для мгновенного возврата средств.
  • Уведомления клиентов о статусе возврата.

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

Для автоматизации возврата можно использовать хук woocommerce_order_status_changed, который срабатывает при смене статуса заказа. Добавим следующий код в файл functions.php вашей темы или в кастомный плагин:

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

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

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

        if ( is_wp_error( $refund ) ) {
            error_log( 'Ошибка возврата: ' . $refund->get_error_message() );
        }
    }
}
add_action( 'woocommerce_order_status_changed', 'wppay_woocommerce_auto_refund', 10, 3 );

Этот код автоматически создает полный возврат средств при смене статуса заказа на "cancelled". Функция wc_create_refund интегрирована с платежными шлюзами WooCommerce, и если они поддерживают возвраты через API, деньги вернутся клиенту автоматически.

Автоматизация возвратов с использованием вебхуков платежных систем

Многие платежные сервисы (например, Яндекс.Касса, Робокасса, Stripe) поддерживают вебхуки — уведомления о событиях платежа. Их можно использовать для автоматического запуска возврата при определенных условиях.

Для примера рассмотрим, как получить уведомление о возврате из Stripe через вебхук и обновить статус заказа в WordPress.

Пример обработки вебхука Stripe в WordPress

Создаем endpoint для приема вебхуков, например, в файле wp-content/plugins/wppay-webhook-handler/wppay-webhook-handler.php:

add_action( 'rest_api_init', function () {
    register_rest_route( 'wppay/v1', '/stripe-webhook', array(
        'methods' => 'POST',
        'callback' => 'wppay_handle_stripe_webhook',
        'permission_callback' => '__return_true',
    ) );
} );

function wppay_handle_stripe_webhook( WP_REST_Request $request ) {
    $payload = $request->get_body();
    $sig_header = $_SERVER['HTTP_STRIPE_SIGNATURE'] ?? '';

    // Проверка подписи вебхука (используйте библиотеку Stripe для PHP)
    // ...

    $event = json_decode( $payload );
    if ( ! $event ) {
        return new WP_REST_Response( 'Invalid payload', 400 );
    }

    if ( $event->type === 'charge.refunded' ) {
        $charge = $event->data->object;
        $order_id = wppay_get_order_id_by_payment_intent( $charge->payment_intent );
        if ( $order_id ) {
            $order = wc_get_order( $order_id );
            if ( $order ) {
                $order->update_status( 'refunded', 'Автоматический возврат через Stripe' );
            }
        }
    }

    return new WP_REST_Response( 'Webhook handled', 200 );
}

function wppay_get_order_id_by_payment_intent( $payment_intent_id ) {
    $args = array(
        'limit' => 1,
        'meta_key' => '_stripe_payment_intent_id',
        'meta_value' => $payment_intent_id,
        'return' => 'ids'
    );
    $orders = wc_get_orders( $args );
    return !empty($orders) ? $orders[0] : false;
}

В этом примере вебхук получает информацию о возврате платежа в Stripe и автоматически меняет статус заказа в WooCommerce на "refunded".

Другие полезные плагины для автоматизации возвратов в WordPress

Если вы используете не WooCommerce, а другую платежную систему, можно обратить внимание на следующие плагины:

  • Easy Digital Downloads с расширением Refunds — поддержка возвратов для цифровых товаров.
  • WP Simple Pay — плагин для Stripe с возможностью настройки автоматических возвратов через API.
  • Clearfy Pro — содержит инструменты для оптимизации и безопасности, в том числе для управления транзакциями, с возможностью добавления кастомных функций.

Как настроить уведомления и логи для отслеживания возвратов

Автоматизация возвратов требует контроля. Рекомендуется настроить уведомления на почту или в админку, а также вести логи ошибок и успешных возвратов.

Пример добавления логирования в функцию возврата WooCommerce:

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

        if ( ! $order->is_paid() ) return;

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

        if ( is_wp_error( $refund ) ) {
            error_log( '[wppay] Ошибка возврата: ' . $refund->get_error_message() );
        } else {
            error_log( '[wppay] Успешный возврат заказа #' . $order_id );
        }
    }
}

Можно также использовать плагины логирования, например, Clearfy Pro для расширенного управления логами и уведомлениями.

WooCommerce: использование хука woocommerce_order_status_completed для автоматизации действий после оплаты
18.05.2026
WooCommerce: автоматическая отмена незавершённых платежей
05.06.2026
Как использовать Redis для кэширования платежных запросов в WordPress
27.03.2026
Как создать автоматическую проверку платежей в WordPress
04.04.2026
Как отладить проблемы с платежными API в WordPress
04.03.2026