Shopify App

Webhooks

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

Создание и настройка конечных точек вебхука

Перейдите в раздел Webhooks в личном кабинете, добавьте конечную точку, вписав ее URL и выбрав необходимые события, которые будут на нее отправлены в дальнейшем. Максимальное количество добавляемых конечных точек - 5.

Обработка событий

Запросы вебхука отправляются на ваш сервер методом POST, тело запроса приходит в формате JSON.

Пример объекта события вебхука:

        
{
    "id": "f4383e6e-2af1-4992-ba19-afe53c07b3db",
    "type": "package.info_received",
    "timestamp": 1633609499,
    "payload": {
        "created_at": "2021-07-06T13:46:25+03:00",
        "updated_at": "2021-07-06T13:46:25+03:00",
        "started_tracking_at": "2021-07-06T13:46:25+03:00",
        "track_number": "UA937578848US",
        "origin": null,
        "destination": null,
        "last_status": "Получение статуса...",
        "status": -1,
        "checkpoints": [
            {
                "id": "",
                "date": "2021-07-06T13:46:25+03:00",
                "title": "Начато отслеживание",
                "location": "Скорее всего, посылка еще не отправлена",
                "latitude": null,
                "longitude": null,
                "courier_id": null
            }
        ],
        "last_status_date": "2021-07-06T13:46:25+03:00",
        "est_delivery_date_from": null,
        "est_delivery_date_to": null,
        "extra_track_numbers": [],
        "hash": "f25370e9",
        "consolidated_track_number": null,
        "consolidation_date": null,
        "destination_country_code": "ru",
        "updating": false,
        "last_tracking_date": null,
        "days_on_way": 1,
        "weight": null,
        "extra_info": [],
        "couriers_ids": [
            1,
            4,
            10,
            366
        ],
        "courier_id": null,
        "info": []
    }
}
        
    

Описание объекта:

Свойство Тип Описание
id String Уникальный идентификатор отправленного события
type String Тип отправленного события. Полный список событий смотрите в разделе «Типы событий»
timestamp Int Время отправки события (UNIX timestamp)
payload Object Объект с подробной информацией о событии. Например, актуальный на момент отправки уведомления объект Package. Подробности смотрите в разделе «Типы событий»

Проверка подлинности запроса

Во всех запросах событий вебхуков, отправляемых на вашу конечную точку, присутствует заголовок с подписью запроса:

Pkge-Webhook-Signature

В этом заголовке передается кодированный в Base64 хэш (SHA256 HMAC) тела отправленного запроса, в качестве секретного ключа используется ваш Webhook secret для конечной точки.

Т.к. ваша конечная точка открыта для всего интернета, единственным способом убедиться в том, что запрос действительно пришел от нас, является проверка подписи запроса.

Вы можете сделать это либо вручную...

Пример метода для проверки подписи на языке PHP:

        function isRequestSignatureValid($requestBody, $requestSignature, $webhookSecret) {
    $hash = hash_hmac('SHA256', $requestBody, $webhookSecret, true)

    return base64_decode($requestSignature) === $hash;
}
    

...либо используя наш SDK

Пример использования PHP SDK для проверки подписи:

        $webhookSecret = 'YOUR_WEBHOOK_SECRET';

$webhook = new \Pkge\Webhook($webhookSecret);

try {
    $event = $webhook->handleEvent(
        file_get_contents("php://input"),
        $_SERVER['HTTP_PKGE_WEBHOOK_SIGNATURE']
    );
} catch (\Pkge\Exceptions\WebhookSignatureException $e) {
    die ($e->getMessage());
}
        
    

Повторные попытки отправки уведомлений

В том случае, если после отправки уведомления о событии ваш сервер вернет ответ с HTTP-кодом состояния >= 400, уведомление будет отправлено повторно с экспоненциальной задержкой, максимум до 10 раз.

Номер попытки отправки Задержка перед отправкой (сек.) Общая задержка после первой попытки (сек.)
1 0 0
2 30 30
3 120 150
4 270 420
5 480 900
6 750 1650
7 1080 2730
8 1470 4200
9 1920 6120
10 2430 8550

Типы событий

События обновления статуса посылки, полный список статусов посылки смотрите здесь. Ниже в последней колонке в таблице приведены идентификаторы статусов, которые относятся к событию.

Идентификатор Описание Статусы посылки
package.info_received Информация о посылке получена 8
package.in_transit Посылка в пути 3
package.delivered Посылка ожидает вручения 4
package.handed Посылка доставлена 5
package.delivery_failed Ошибка при доставке посылки 6, 7