ворд-пресс.рф
Решение

Вебхуки WooCommerce: настройка и проверка

Настройка webhook в WooCommerce: события заказа, адрес получателя, секрет подписи и диагностика повторных отправок.

Webhook WooCommerce отправляет HTTP-уведомление внешней системе при определённом событии: например, когда создаётся или обновляется заказ. Это удобный способ связать интернет-магазин с CRM или интеграционным сервером без постоянного опроса заказов.

Что подготовить

До включения вебхука нужен HTTPS-адрес принимающего сервиса. Он должен обрабатывать POST-запросы и возвращать корректный HTTP-статус. Для внешних отправок нужен секрет подписи, который знают только WooCommerce и сервер-получатель.

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

  1. Откройте WooCommerce → Настройки → Дополнительно → Webhooks (пункты меню могут немного отличаться в локализации).
  2. Создайте webhook с понятным названием, например Order updated → CRM.
  3. Выберите событие, связанное с заказом или товаром. Не отправляйте все события без необходимости.
  4. Укажите HTTPS-адрес получателя (Delivery URL).
  5. Задайте уникальный секрет (Secret), известный только двум сторонам.
  6. Сохраните 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/

Материал был полезен?

Помогите нам сделать материалы точнее и понятнее.