DOCS

Прослушивайте события с вебхуками

Получайте уведомления о событиях в реальном времени для вашей интеграции Zonos.

Вебхуки предоставляют способ для Zonos активно уведомлять ваши внешние системы всякий раз, когда происходят определенные события. Когда происходит событие, на которое подписан вебхук, Zonos отправит HTTP POST запрос на указанный вами URL вебхука. Тело запроса будет содержать детали события, что позволит вашей системе обработать событие программно.

Вебхуки полезны для интеграции Zonos с другими платформами, запуска автоматизированных рабочих процессов и синхронизации данных между системами в реальном времени. Например, вы можете использовать вебхуки для:

  • Обновления системы управления заказами при создании заказа в Zonos
  • Уведомления фулфилмент-провайдера при отмене отправки
  • Логирования изменений статуса международных заказов в целях аудита

Типы вебхуков 

Все доступные типы вебхуков включены в перечисление WebhookType. Примеры полезных данных для каждого можно найти в нашем руководстве Типы событий.

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

Для создания вебхука через API:

1mutation WebhookCreate($input: WebhookCreateInput!) {
2 webhookCreate(input: $input) {
3 id
4 url
5 type
6 status
7 secret
8 headers {
9 key
10 }
11 }
12}

Важно: Сохраните значение secret при создании вебхука — оно возвращается только здесь, и оно понадобится вам для проверки подписей вебхуков. См. Проверка подписей вебхуков ниже.

Редактирование деталей вебхука 

Для редактирования существующего вебхука через API:

1mutation WebhookUpdate($input: WebhookUpdateInput!) {
2 webhookUpdate(input: $input) {
3 id
4 url
5 type
6 status
7 }
8}

Проверка подписей вебхуков 

Каждый запрос вебхука, отправляемый Zonos, включает заголовок zonos-signature, чтобы вы могли подтвердить, что запрос действительно пришел от Zonos и что содержимое не было изменено при передаче.

Значение заголовка имеет формат:

timestamp=<unix-timestamp-ms>,hmac=<base64-encoded-signature>
  • timestamp — время в миллисекундах Unix-эпохи, когда запрос был подписан.
  • hmac — подпись HMAC-SHA256 необработанного тела JSON-запроса, вычисленная с использованием секрета вашего вебхука в качестве ключа и закодированная в Base64.

Чтобы проверить запрос:

  1. Извлеките значения timestamp и hmac из заголовка zonos-signature.
  2. Вычислите собственную подпись HMAC-SHA256 по необработанному, неразобранному телу запроса, используя секрет, полученный при создании вебхука.
  3. Сравните вычисленную подпись со значением hmac, используя сравнение за постоянное время, и отклоните запрос, если они не совпадают.
  4. При необходимости отклоняйте запросы, в которых timestamp старше нескольких минут, чтобы защититься от повторного воспроизведения перехваченного запроса. Zonos не применяет собственное окно доставки, поэтому эта проверка остается на ваше усмотрение.
1const crypto = require('crypto');
2 
3function verifyZonosWebhook(rawBody, signatureHeader, secret) {
4 const [timestampPart, hmacPart] = signatureHeader.split(',');
5 const receivedHmac = hmacPart.split('=')[1];
6 
7 const expectedHmac = crypto
8 .createHmac('sha256', secret)
9 .update(rawBody)
10 .digest('base64');
11 
12 const receivedBuffer = Buffer.from(receivedHmac);
13 const expectedBuffer = Buffer.from(expectedHmac);
14 
15 if (receivedBuffer.length !== expectedBuffer.length) {
16 return false;
17 }
18 
19 return crypto.timingSafeEqual(receivedBuffer, expectedBuffer);
20}

Примечание: Если вы настроили пользовательские заголовки для своего вебхука, они также включаются без изменений в каждый запрос вместе с zonos-signature.

Просмотр логов вебхука 

Для просмотра логов вебхука через API:

1query WebhookLogs(
2$first: Int
3$after: String
4$filter: WebhookLogsFilterInput
5) {
6 webhookLogs(first: $first, after: $after, filter: $filter) {
7 edges {
8 node {
9 id
10 type
11 url
12 createdAt
13 responseStatus
14 }
15 }
16 }
17}
GraphQL API ReferenceTypes, inputs, and operations used in this guide

Была ли эта страница полезной?


На этой странице: