Что такое вебхуки в WooCommerce и зачем они нужны
Вебхуки — это механизм уведомления внешних систем о событиях на вашем сайте. В WooCommerce с их помощью можно отправлять данные о статусах заказов в CRM, ERP или другие сервисы автоматически без ручного вмешательства. Это особенно полезно для интеграций и автоматизации бизнес-процессов.
Диагностика проблемы: почему статусы заказов не отправляются
Если у вас уже настроены вебхуки, но уведомления не приходят, проверьте следующее:
- Активен ли вебхук в WooCommerce (в админке WooCommerce > Настройки > Вебхуки).
- Верный ли URL для приема данных указан.
- Поддерживает ли сервер прием POST-запросов.
- Ошибки в логах сервера или WooCommerce (wp-content/debug.log).
- Нет ли конфликтов с плагинами безопасности или брандмауэром.
Пошаговое решение: как настроить отправку статусов заказов через вебхуки
1. Создаем вебхук в админке WooCommerce
- Перейдите в WooCommerce > Настройки > Вебхуки.
- Нажмите "Добавить вебхук".
- Задайте имя, например, "Отправка статусов заказов".
- Статус: "Активен".
- Тема: выберите
order.updatedдля получения обновлений по заказам. - URL доставки — адрес вашего внешнего сервера, который принимает POST-запросы.
- Сохраните вебхук.
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 | Простота настройки, автоматизация, поддержка в ядре | Менее гибкие фильтры, ограниченный контроль | Быстрая интеграция с внешними сервисами |
| Кастомный код на хуках статуса заказа | Гибкость, точный контроль, можно отправлять любые данные | Требует программирования, поддержка и отладка на стороне разработчика | Сложные сценарии интеграции, кастомные форматы |