Как настроить отправку статусов заказов WooCommerce через вебхуки

Что такое вебхуки в WooCommerce и зачем они нужны

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

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

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

  • Активен ли вебхук в WooCommerce (в админке WooCommerce > Настройки > Вебхуки).
  • Верный ли URL для приема данных указан.
  • Поддерживает ли сервер прием POST-запросов.
  • Ошибки в логах сервера или WooCommerce (wp-content/debug.log).
  • Нет ли конфликтов с плагинами безопасности или брандмауэром.

Пошаговое решение: как настроить отправку статусов заказов через вебхуки

1. Создаем вебхук в админке WooCommerce

  1. Перейдите в WooCommerce > Настройки > Вебхуки.
  2. Нажмите "Добавить вебхук".
  3. Задайте имя, например, "Отправка статусов заказов".
  4. Статус: "Активен".
  5. Тема: выберите order.updated для получения обновлений по заказам.
  6. URL доставки — адрес вашего внешнего сервера, который принимает POST-запросы.
  7. Сохраните вебхук.

2. Фильтруем события по статусу заказа программно

Вебхук order.updated срабатывает при любом обновлении заказа. Чтобы отправлять данные только при смене определенного статуса, добавим фильтр через хук woocommerce_webhook_payload. Пример кода в functions.php:

add_filter('woocommerce_webhook_payload', 'filter_order_status_webhook', 10, 4);
function filter_order_status_webhook($payload, $resource, $resource_id, $webhook_id) {
    if ($resource !== 'order') {
        return $payload;
    }

    $order = wc_get_order($resource_id);
    if (!$order) {
        return $payload;
    }

    // Отправлять только при переходе в статус 'completed'
    $statuses_to_send = array('completed', 'processing');
    if (!in_array($order->get_status(), $statuses_to_send, true)) {
        // Прекратить отправку вебхука
        return false;
    }

    return $payload;
}

Этот код предотвратит отправку вебхука, если статус заказа не входит в список.

3. Логируем отправку для отладки

Чтобы проверить, что вебхук реально срабатывает, добавьте простой лог:

add_action('woocommerce_webhook_delivery', function($webhook, $response) {
    if ($webhook->get_topic() === 'order.updated') {
        error_log('Вебхук отправлен: ID ' . $webhook->get_id() . ', Response: ' . wp_json_encode($response));
    }
}, 10, 2);

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

1. Создайте или измените заказ, переведите его в статус, указанный в фильтре (например, "completed").

2. Убедитесь, что на сервере-получателе пришел POST-запрос с данными заказа.

3. Проверьте wp-content/debug.log на наличие записей из логирования.

4. В админке WooCommerce в разделе вебхуков можно увидеть статус последней доставки (успешно/ошибка).

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

  • Вебхук не активен или отключен. Проверьте статус в настройках WooCommerce.
  • Неверный URL получателя. Убедитесь, что URL правильный и сервер принимает POST-запросы.
  • Сервер получателя возвращает ошибку 4xx или 5xx. Проверьте логи сервера и исправьте проблемы на принимающей стороне.
  • Вебхук отправляется слишком часто. Используйте фильтрацию по статусу заказа, чтобы ограничить события.
  • Проблемы с SSL. Если URL HTTPS, проверьте сертификат и его валидность.

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

  • Используйте HTTPS для URL вебхуков, чтобы защитить данные при передаче.
  • Добавьте проверку подписи вебхука на принимающей стороне, чтобы убедиться, что данные пришли от вашего сайта (WooCommerce передает заголовок X-WC-Webhook-Signature).
  • Ограничьте количество отправляемых вебхуков фильтрами, чтобы не перегружать внешний сервис.
  • Используйте асинхронную отправку вебхуков, чтобы не замедлять работу сайта.

Сравнение методов настройки отправки статусов заказов

МетодПлюсыМинусыКогда использовать
Встроенные вебхуки WooCommerceПростота настройки, автоматизация, поддержка в ядреМенее гибкие фильтры, ограниченный контрольБыстрая интеграция с внешними сервисами
Кастомный код на хуках статуса заказаГибкость, точный контроль, можно отправлять любые данныеТребует программирования, поддержка и отладка на стороне разработчикаСложные сценарии интеграции, кастомные форматы

Скачать WP с оф. сайта Магазин проверенных платных тем