Что такое webhook в WooCommerce и зачем он нужен
Webhook — это механизм уведомления внешних сервисов о событиях в WooCommerce (например, создание заказа, смена статуса заказа, обновление товара). Вместо постоянного опроса API внешний сервис получает данные сразу после события. Это экономит ресурсы и обеспечивает мгновенную реакцию.
Диагностика: как понять, что webhook не работает
Если интеграция с внешним сервисом не срабатывает после событий в WooCommerce, нужно проверить:
- Создан ли webhook в админке WooCommerce и активен ли он.
- Правильный ли URL указан для приема webhook.
- Доступен ли сервер для приема POST-запросов (нет ли блокировок, например, по IP или firewall).
- Логи ошибок в WooCommerce и на сервере вебхуков.
- Отправляются ли вообще запросы — можно использовать расширения браузера или tcpdump.
Пошаговое решение: настройка webhook в WooCommerce
1. Создание webhook через админку WooCommerce
Перейдите в WooCommerce > Настройки > Продвинутые > Вебхуки и нажмите «Добавить вебхук».
- Название: например,
Order Created Hook - Статус:
Активен - Событие: выберите нужное, например,
Создание заказа (Order created) - Адрес доставки: URL вашего внешнего сервиса, который принимает POST-запрос
- Секрет: установите секретный ключ, который поможет подтвердить подлинность запроса
2. Проверка отправки webhook
Используйте сервисы типа webhook.site, чтобы временно указать URL и посмотреть, что именно WooCommerce отправляет при событии. Это поможет убедиться, что webhook срабатывает.
3. Обработка webhook на стороне сервиса
Пример простого PHP-скрипта для приема webhook и проверки подписи:
<?php
$input = file_get_contents('php://input');
$secret = 'ваш_секретный_ключ';
$signature = $_SERVER['HTTP_X_WC_WEBHOOK_SIGNATURE'] ?? '';
$calculated_signature = base64_encode(hash_hmac('sha256', $input, $secret, true));
if (!hash_equals($calculated_signature, $signature)) {
http_response_code(401);
echo 'Unauthorized';
exit;
}
$data = json_decode($input, true);
// Логика обработки данных
http_response_code(200);
echo 'OK';
?>Проверка результата после внедрения
- Создайте или обновите заказ в WooCommerce, которое должно вызвать webhook.
- Проверьте логи входящих запросов на сервисе-получателе (или на webhook.site).
- Убедитесь, что в WooCommerce в разделе вебхуков нет ошибок отправки (статус 200).
- Если используется кастомный обработчик, проверьте, что данные корректно обработаны (например, запись в базу, отправка письма).
Частые ошибки и как их исправить
- Неверный URL в webhook: Убедитесь, что URL начинается с
https://и доступен извне. - Проблемы с секретом: Если подпись не совпадает, проверьте, что секрет совпадает в WooCommerce и на сервере.
- Блокировка запросов сервером: Проверьте настройки firewall и доступность порта.
- Отсутствие ответа 200: Вебхук считается неуспешным, если сервер не возвращает HTTP 200. Проверьте код ответа.
- Ошибки сериализации данных: Проверьте, что данные корректно декодируются в JSON на стороне получателя.
Практические советы по безопасности и производительности
- Используйте HTTPS: Всегда указывайте HTTPS URL для webhook, чтобы данные передавались по защищённому каналу.
- Проверяйте подпись: Настройте секрет и проверяйте подпись на сервере, чтобы исключить подделку запросов.
- Обрабатывайте webhook асинхронно: Чтобы не замедлять работу WooCommerce, обработку данных на сервисе делайте вне основного запроса, например, через очередь задач.
- Логируйте ошибки: Реализуйте системный лог ошибок обработки webhook, чтобы быстро находить и исправлять проблемы.
- Ограничьте IP: При возможности разрешайте запросы только с IP WooCommerce (можно узнать из документации или логов).
Сравнение вариантов настройки webhook
| Метод | Преимущества | Недостатки | Когда использовать |
|---|---|---|---|
| Встроенный WooCommerce webhook | Простота настройки, интеграция с событиями | Ограниченная кастомизация, нет ретраев | Стандартные интеграции, базовые уведомления |
| Плагин типа WP Webhooks | Больше возможностей, ретраи, расширенные триггеры | Дополнительная нагрузка, зависит от плагина | Сложные интеграции, многократные события |
| Кастомное решение через hooks и REST API | Максимальная гибкость и контроль | Требует разработки и поддержки | Уникальные бизнес-процессы и интеграции |