WooCommerce: автоматическая синхронизация заказов с внешними системами через Webhook

Диагностика задачи: зачем нужна автоматическая синхронизация заказов

В интернет-магазинах на WooCommerce часто возникает необходимость автоматически передавать информацию о заказах в внешние системы: CRM, складские программы, ERP. Ручной экспорт или ввод данных приводит к ошибкам и задержкам, поэтому оптимальное решение — настроить Webhook, который будет отправлять данные сразу после создания или обновления заказа.

Настройка Webhook для передачи данных о заказах

1. Создание Webhook в WooCommerce

WooCommerce имеет встроенный функционал для создания Webhook. Чтобы его настроить:

  1. Перейдите в WooCommerce - Настройки - Расширенные - Вебхуки.
  2. Нажмите кнопку Добавить вебхук.
  3. Заполните поля:
  • Имя — произвольное описание, например, "Синхронизация заказов CRM".
  • Статус — установите на "Активен".
  • Триггер — выберите "order.created" или "order.updated" в зависимости от задачи.
  • URL доставки — адрес внешнего сервиса, принимающего данные.
  • Секрет — (опционально) для проверки подписи webhook.

Сохраните вебхук.

2. Обработка данных на стороне внешней системы

При срабатывании webhook WooCommerce отправит POST-запрос с информацией о заказе в формате JSON. Пример полезных полей:

{
  "id": 1234,
  "status": "processing",
  "total": "1500.00",
  "billing": {
    "first_name": "Иван",
    "email": "ivan@example.com"
  },
  "line_items": [
    {
      "product_id": 456,
      "quantity": 2
    }
  ]
}

Обработчик на стороне сервера должен распарсить JSON и сохранить данные в нужном формате или триггерить дальнейшие бизнес-процессы.

Пошаговое решение с примером кода для расширенной обработки

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

add_action('woocommerce_order_status_changed', 'custom_send_order_to_crm', 10, 4);
function custom_send_order_to_crm($order_id, $old_status, $new_status, $order) {
    if ($new_status === 'processing') { // Отправляем только при смене на processing
        $data = [
            'id' => $order_id,
            'total' => $order->get_total(),
            'customer' => [
                'name' => $order->get_billing_first_name(),
                'email' => $order->get_billing_email(),
            ],
            'items' => []
        ];
        foreach ($order->get_items() as $item) {
            $product = $item->get_product();
            $data['items'][] = [
                'product_id' => $product->get_id(),
                'quantity' => $item->get_quantity(),
            ];
        }
        $response = wp_remote_post('https://crm.example.com/api/orders', [
            'headers' => ['Content-Type' => 'application/json'],
            'body' => json_encode($data),
            'timeout' => 10,
        ]);
        if (is_wp_error($response)) {
            error_log('Ошибка отправки заказа в CRM: ' . $response->get_error_message());
        }
    }
}

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

  1. Создайте тестовый заказ в WooCommerce и переведите его в статус, на который настроен webhook или хук.
  2. Проверьте логи сервера внешней системы: должен быть получен POST-запрос с корректными данными.
  3. В WooCommerce можно посмотреть раздел Вебхуки и убедиться, что статус последней доставки "Успешно".
  4. Если используется кастомный код, проверьте логи PHP на наличие ошибок.

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

  • Webhook не срабатывает: Проверьте, что вебхук активен и выбран правильный триггер (например, order.created, а не order.deleted).
  • Внешняя система не получает данные: Убедитесь, что URL доставки верный и доступен из интернета. Проверьте настройки брандмауэра и SSL-сертификат.
  • Ошибка формата данных: Проверьте, что JSON валиден и соответствует ожидаемой структуре. Используйте json_last_error() для отладки.
  • Сбой в кастомном PHP-скрипте: Включите WP_DEBUG и error_log для отлова ошибок.

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

  • Используйте секрет для подписи webhook, чтобы внешняя система могла проверять подлинность запросов.
  • Ограничьте количество данных, которые отправляете, чтобы не перегружать сеть.
  • Настраивайте повторную отправку при ошибках, чтобы не потерять важные данные.
  • Для сложных интеграций используйте очередь задач (например, через Action Scheduler) для асинхронной отправки, чтобы не замедлять оформление заказа.

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

МетодПлюсыМинусы
Встроенный Webhook WooCommerceПростота настройки, нет доп. кодаОграниченная кастомизация, сложности при сложной логике
Кастомный PHP-хук (woocommerce_order_status_changed)Максимальная гибкость, можно доработать данные перед отправкойТребует навыков программирования, возможны ошибки при реализации
Плагины интеграции (например, WP Webhooks)Готовые решения с UI, поддержка разных сервисовЧасто платные, дополнительная нагрузка на сайт
Автоматическое отключение неиспользуемых регистраций в WooCommerce
30.05.2026
Как использовать REST API в WordPress для автоматизации задач
25.11.2025
WooCommerce: автоматическое отключение неактивных заказов
30.06.2026
Автоматическое отправление сообщений в Telegram из WordPress
22.12.2025
Как создать собственный шорткод в WordPress: подробное руководство
10.11.2025