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

В чем проблема: отсутствие заказа в WooCommerce после оплаты во внешней системе

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

Диагностика проблемы

  • Проверьте, поступают ли уведомления о платеже (webhook, IPN) от платежной системы на ваш сайт.
  • Проверьте, есть ли в логах ошибок WordPress или WooCommerce записи, связанные с обработкой платежей.
  • Убедитесь, что не используется штатный шлюз WooCommerce для этой платежной системы, либо он корректно настроен.
  • Проверьте, существует ли пользователь и корзина, связанная с платежом — без них создать заказ невозможно.

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

Для автоматического создания заказа при получении уведомления от внешней платежной системы необходимо написать обработчик webhook, который:

  1. Получит данные оплаты, включая идентификатор пользователя, список товаров, суммы.
  2. Создаст новый заказ в WooCommerce через API.
  3. Отметит заказ как оплаченный и изменит статус.

Пример кода обработчика webhook

add_action('rest_api_init', function () {
    register_rest_route('custom/v1', '/payment-webhook', array(
        'methods' => 'POST',
        'callback' => 'handle_external_payment',
        'permission_callback' => '__return_true',
    ));
});

function handle_external_payment(WP_REST_Request $request) {
    $data = $request->get_json_params();

    // Пример данных: user_id, products [{id, qty}], total
    if (empty($data['user_id']) || empty($data['products']) || empty($data['total'])) {
        return new WP_REST_Response(array('error' => 'Incomplete data'), 400);
    }

    $user_id = intval($data['user_id']);
    $products = $data['products'];
    $total = floatval($data['total']);

    // Создаем заказ
    $order = wc_create_order(array('customer_id' => $user_id));

    foreach ($products as $item) {
        $product = wc_get_product($item['id']);
        if ($product) {
            $order->add_product($product, intval($item['qty']));
        }
    }

    $order->set_total($total);

    // Устанавливаем статус заказа "оплачен"
    $order->update_status('processing', 'Оплата получена через внешний шлюз');

    $order->save();

    return new WP_REST_Response(array('success' => true, 'order_id' => $order->get_id()), 200);
}

Этот код регистрирует REST API маршрут /wp-json/custom/v1/payment-webhook, который принимает POST запрос с данными платежа и создает заказ.

Как проверить, что решение работает

  • Отправьте тестовый POST запрос на endpoint с корректными данными (например, через Postman или curl).
  • Проверьте, что новый заказ появился в WooCommerce с правильными товарами и статусом.
  • Проверьте логи ошибок WordPress - их не должно быть.
  • Проверьте, что пользователь, указанный в данных, существует и заказ закреплен за ним.

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

  • Неправильный формат данных в webhook — убедитесь, что данные приходят в JSON и содержат все необходимые поля (user_id, products, total).
  • Пользователь с указанным ID не существует — либо создайте пользователя заранее, либо расширьте код для создания гостевого заказа.
  • Ошибки при добавлении товаров в заказ — проверьте, что ID товаров корректны и продукты опубликованы.
  • Отсутствие прав на REST API — в примере установлен permission_callback в __return_true для тестов, в продакшене лучше добавить проверку ключа безопасности.

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

  • Добавьте проверку подписи или токена в webhook для предотвращения несанкционированных запросов.
  • Кэшируйте результаты запросов к продуктам в случае большого объема.
  • Логируйте все запросы webhook с ошибками для последующего анализа.
  • При большом количестве заказов используйте асинхронную обработку через очереди или отложенные задачи.

Сравнение подходов для интеграции внешних платежей с WooCommerce

МетодПреимуществаНедостатки
Плагин шлюза WooCommerceПолная интеграция, автоматическая обработкаТребует поддержки и обновления, не всегда доступен для всех систем
Webhook + пользовательский код (как в статье)Гибкость, подходит для любых системТребует разработки и тестирования, возможны ошибки при некорректных данных
Ручной импорт заказовПростота реализацииРучная работа, риск ошибок, задержки в учете
Удаление всех записей определённой таксономии в WordPress
29.12.2025
WooCommerce: автоматическое удаление товаров по сроку с помощью кода
26.05.2026
Как использовать WooCommerce REST API для управления заказами
18.04.2026
Как создать динамические виджеты в WordPress с использованием REST API
11.01.2026
Автоматизация создания копий безопасности WordPress: практические решения от WP-Team
29.11.2025