Как отменить заказ в WooCommerce после оплаты

Диагностика проблемы: зачем отменять заказ после оплаты

Иногда в WooCommerce возникает необходимость отменить заказ, который уже был оплачен. Причины могут быть разными: ошибка в заказе, недоступность товара, подозрение на мошенничество или запрос клиента. Стандартными средствами WooCommerce отменить оплаченный заказ без дополнительных действий нельзя, поэтому важно понимать, как правильно это сделать, чтобы не нарушить учёт и не потерять деньги.

Как отменить заказ после оплаты: пошаговое решение

1. Проверяем статус заказа

Для начала убедитесь, что заказ действительно оплачен. Статусы, которые указывают на успешную оплату: processing, completed или пользовательские статусы после оплаты.

$order = wc_get_order( $order_id );
if ( ! $order ) {
    wp_die( 'Заказ не найден' );
}
$status = $order->get_status();
if ( ! in_array( $status, array( 'processing', 'completed' ), true ) ) {
    wp_die( 'Заказ не оплачен или уже отменен' );
}

2. Возврат средств (рефанд) через WooCommerce

Перед отменой нужно оформить возврат. WooCommerce поддерживает возвраты через админку, но для автоматизации можно использовать код:

// Создаем возврат
$refund = wc_create_refund(array(
    'amount'         => $order->get_total(),
    'reason'         => 'Отмена заказа по запросу',
    'order_id'       => $order_id,
    'refund_payment' => true, // Возврат на платежный шлюз
));

if ( is_wp_error( $refund ) ) {
    wp_die( 'Ошибка возврата: ' . $refund->get_error_message() );
}

3. Меняем статус заказа на отменён

После успешного возврата меняем статус заказа на cancelled:

$order->update_status( 'cancelled', 'Заказ отменён после возврата средств' );

4. Уведомление клиента и админа

Для информирования клиента и администратора можно вручную отправить email:

do_action( 'woocommerce_order_status_cancelled_notification', $order_id );

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

  • В админке WooCommerce заказ должен иметь статус cancelled.
  • В транзакциях платежного шлюза должен появиться возврат на сумму заказа.
  • Клиент и администратор получили уведомление об отмене.
  • Если используется интеграция со складом, количество товара вернулось в доступ.

Частые ошибки при отмене оплаченного заказа

  • Неправильный статус заказа: попытка отменить заказ в статусе pending или failed — возврат невозможен.
  • Отсутствие возврата средств: просто смена статуса без оформления рефанда приведёт к несоответствию данных и претензиям клиентов.
  • Отсутствие проверки ошибок при возврате: если возврат не прошёл, заказ не должен менять статус.
  • Игнорирование уведомлений: клиент не узнает об отмене, что ухудшит опыт обслуживания.

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

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

Пример функции для автоматической отмены оплаченного заказа с возвратом

function wp_cancel_paid_order( $order_id ) {
    $order = wc_get_order( $order_id );
    if ( ! $order ) {
        return new WP_Error( 'no_order', 'Заказ не найден' );
    }

    if ( ! in_array( $order->get_status(), array( 'processing', 'completed' ), true ) ) {
        return new WP_Error( 'invalid_status', 'Заказ не оплачен или уже отменен' );
    }

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

    if ( is_wp_error( $refund ) ) {
        return $refund;
    }

    $order->update_status( 'cancelled', 'Заказ отменён после возврата средств' );
    do_action( 'woocommerce_order_status_cancelled_notification', $order_id );

    return true;
}

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

МетодПреимуществаНедостатки
Ручной возврат через админкуПростота, не требует кодаТребует времени, риск забыть сменить статус
Автоматизация через код (wc_create_refund)Быстро, исключает ошибки, можно интегрировать в процессыТребует навыков, возможны ошибки при неправильной реализации
Использование плагинов для возвратовРасширенный функционал, интеграции с платёжными системамиЗависимость от стороннего кода, возможны конфликты
Как избежать проблем с пересчётом налогов в WooCommerce при использовании купонов
17.05.2026
Как отменить заказ в WooCommerce после оплаты: практическое руководство
07.05.2026
Как автоматически удалять заказы WooCommerce после отмены или возврата оплаты
28.04.2026
Как создать многоуровневую навигацию в WordPress без плагинов
01.01.2026
Как сделать автоматический откат обновлений WordPress при ошибках
30.01.2026