Webhook WooCommerce отправляет HTTP-уведомление внешней системе при определённом событии: например, когда создаётся или обновляется заказ. Это удобный способ связать интернет-магазин с CRM или интеграционным сервером без постоянного опроса заказов.
Что подготовить
До включения вебхука нужен HTTPS-адрес принимающего сервиса. Он должен обрабатывать POST-запросы и возвращать корректный HTTP-статус. Для внешних отправок нужен секрет подписи, который знают только WooCommerce и сервер-получатель.
Создание вебхука в WooCommerce
- Откройте WooCommerce → Настройки → Дополнительно → Webhooks (пункты меню могут немного отличаться в локализации).
- Создайте webhook с понятным названием, например
Order updated → CRM. - Выберите событие, связанное с заказом или товаром. Не отправляйте все события без необходимости.
- Укажите HTTPS-адрес получателя (Delivery URL).
- Задайте уникальный секрет (Secret), известный только двум сторонам.
- Сохраните webhook, выполните тестовое действие и откройте журнал доставки.
Проверка безопасности получателя
Сервер должен сверять подпись по исходному телу запроса до доверенной обработки данных. Для стандартных webhook WooCommerce описан механизм подписи HMAC-SHA256 с секретом и HTTP-заголовком подписи. Нельзя считать запрос подлинным только потому, что в JSON есть правильный номер заказа.
Также нужно защититься от повторов: один и тот же webhook может быть доставлен повторно после сетевого сбоя. Используйте идентификатор события/заказа и идемпотентную бизнес-операцию, а не создавайте новую сделку при каждом POST.
Пример обработчика: что должна делать система
1. Получить сырое тело запроса и заголовок подписи.
2. Проверить HMAC с сохранённым секретом.
3. Проверить тип события и нужные поля заказа.
4. Проверить, не обрабатывалось ли событие ранее.
5. Записать задачу в очередь и быстро вернуть 2xx.
6. Выполнить обновление CRM отдельно с ретраями и журналом.
Это алгоритм, не готовый исполняемый код: детали подписи и заголовков сверяйте с используемой версией WooCommerce и официальной документацией.
Почему webhook не доставляется
- Неверен или недоступен URL получателя.
- SSL/TLS настроен некорректно.
- Сервер возвращает 401, 403 или 500.
- Проверка подписи работает по изменённому телу, а не по исходным байтам.
- Запрос попадает под правила WAF/антибот-защиты.
- Обработчик работает слишком долго и истекает по тайм-ауту.
Откройте WooCommerce → Статус → Журналы и найдите записи доставки вебхуков. WooCommerce может приостанавливать или отключать webhook после ряда неудачных попыток; не игнорируйте состояние webhook в админке.
Когда вместо webhook нужен REST API
Webhook подходит для оповещения об изменении. REST API нужен, когда внешняя система сама запрашивает текущее состояние товара или заказа, делает выборки и управляет данными. Часто интеграция использует оба подхода.
Связанные материалы: REST API WordPress, интеграция с 1С, WooCommerce.
Документация: WooCommerce Webhooks.
Источник: https://woocommerce.com/document/webhooks/
Материал был полезен?
Помогите нам сделать материалы точнее и понятнее.