Что такое webhook в WooCommerce и зачем он нужен
Webhook — это механизм, позволяющий WooCommerce автоматически отправлять уведомления на внешний URL при наступлении определённых событий (создание заказа, изменение статуса, обновление товара и другое). Это удобный способ интегрировать магазин с внешними сервисами, CRM, складскими системами или собственным скриптом без необходимости периодически опрашивать базу.
Диагностика: почему webhook не срабатывает?
Если webhook не работает, нужно проверить несколько моментов:
- Правильность и доступность URL для приёма POST-запросов.
- Статус webhook в админке WooCommerce — должен быть активным.
- Логи сервера и WooCommerce — не возникает ли ошибок 4xx или 5xx при отправке.
- Наличие SSL-сертификата на принимающем сервере (желательно HTTPS).
- Нет ли ограничений по IP или User-Agent на принимающем сервере.
Пошаговое создание webhook в WooCommerce
1. Создание webhook через админку
Перейдите в WooCommerce → Настройки → Дополнительно → Вебхуки и нажмите "Добавить webhook".
Заполните поля:
- Название: любое понятное имя, например "Заказы в CRM".
- Статус: активен.
- Тема: выберите событие, например
order.createdилиorder.updated. - URL доставки: URL вашего обработчика (например,
https://example.com/webhook-handler.php). - Метод доставки: POST (стандарт).
2. Создание простого обработчика webhook
Ниже пример PHP-скрипта, который принимает webhook и логирует данные в файл:
<?php
// webhook-handler.php
$payload = file_get_contents('php://input');
$logFile = __DIR__ . '/webhook.log';
file_put_contents($logFile, date('Y-m-d H:i:s') . " - " . $payload . "\n", FILE_APPEND);
http_response_code(200);
echo json_encode(['status' => 'ok']);
?>Разместите этот скрипт на вашем сервере по URL, указанному в webhook.
3. Тестирование webhook
В админке WooCommerce нажмите «Отправить тестовое уведомление» рядом с вашим webhook. Если всё настроено правильно, в файл webhook.log должны записаться данные.
Как проверить, что webhook работает корректно
- Проверьте, что в лог-файле (или в базе, если записываете туда) появляется новая запись после события.
- Проверьте HTTP-ответ от вашего обработчика — WooCommerce ожидает код 200.
- Проверьте логи WooCommerce в
wp-content/uploads/wc-logsна наличие ошибок по webhook. - Для сложных интеграций используйте сервисы типа RequestBin или webhook.site, чтобы отследить, что именно отправляет WooCommerce.
Частые ошибки при работе с webhook в WooCommerce и их исправление
- Ошибка 404 или 403 при доставке: URL обрабатывает сервер, но либо страница не найдена, либо доступ запрещён. Проверьте настройки .htaccess, файрволлы, права на файл.
- Отсутствие ответа 200: если скрипт не возвращает HTTP 200, WooCommerce считает доставку неудачной и пытается повторить.
- Неверный формат данных: WooCommerce отправляет JSON, убедитесь, что обработчик правильно его читает через
php://input. - Проблемы с SSL: если принимающий URL не использует HTTPS или сертификат недействителен, запросы могут блокироваться.
- Таймауты: длительная обработка на стороне приёма может привести к таймауту. Оптимизируйте скрипт, разделите логику.
Практические советы по безопасности и производительности
- Проверка подписи webhook: WooCommerce отправляет заголовок
X-WC-Webhook-Signatureдля проверки подлинности — реализуйте проверку HMAC SHA256 с вашим секретом. - Используйте HTTPS для URL вебхуков, чтобы защитить данные от перехвата.
- Асинхронная обработка: не выполняйте тяжелую логику в момент получения webhook, а ставьте задачи в очередь.
- Логи и мониторинг: ведите отдельные логи и настройте оповещения на ошибки webhook.
- Ограничение доступа: при возможности ограничьте IP адреса WooCommerce (их можно найти в документации) на сервере обработки.
Таблица сравнения способов обработки webhook
| Способ | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
| Прямой PHP-скрипт | Простота, быстрое развёртывание | Невозможность масштабирования, нет защиты | Маленькие проекты, тестирование |
| Обработка через очередь (RabbitMQ, Redis) | Высокая производительность, отказоустойчивость | Сложность настройки | Большие проекты с нагрузкой |
| Использование внешних сервисов (Zapier, Integromat) | Минимум кода, множество интеграций | Зависимость от сторонних сервисов, цена | Быстрые интеграции без разработчиков |