Огляд
Публічний webhook-контракт VPOS.am доставляє підписану подію payment.status_changed із підтвердженим сервером статусом платежу.
Контракт підпису
Перевірте HMAC з міткою часу за необробленим тілом запиту до розбору payload або зміни бізнес-стану.
X-VPOS-Event-Id: <event_id>
X-VPOS-Event-Type: payment.status_changed
X-VPOS-Webhook-Timestamp: <unix_timestamp>
X-VPOS-Signature: t=<unix_timestamp>,v1=<current_secret_hmac>[,v1=<grace_secret_hmac>]
signed_payload = <timestamp>.<raw_request_body>
signature = HMAC-SHA256(webhook_secret, signed_payload)
| Поле | Контракт |
|---|---|
| Заголовок | X-VPOS-Signature |
| Значення для підпису | <timestamp>.<raw_request_body> |
| Алгоритм | HMAC-SHA256 |
| Допуск timestamp | 5 хвилин |
| Таймаут доставки | 5 секунд |
| Максимум спроб за замовчуванням | 8 спроб |
| Графік повторів | Експоненційно від 30 секунд, максимум 1 година |
| Підтвердження | Швидко повернути відповідь 2xx |
| Ротація секрету | Заголовок може містити кілька значень v1. Приймайте подію, лише якщо хоча б одне збігається з поточним або чинним grace-секретом. |
| Обробка | Перевірити підпис, зберегти event id, а потім поставити побічні дії в чергу. |
Публічний контракт події
Зараз публічно документовано лише payment.status_changed. fiscalStatus входить до data.payment, але не означає наявність окремих публічних fiscal або reconciliation events.
Підпис і повторна доставка
Обчисліть HMAC-SHA256 для <timestamp>.<raw_request_body> з merchant webhook secret, відхиляйте застарілий timestamp і виконуйте downstream-дії через ідемпотентну queue.
Як використовувати сторінку
Webhooks допомагає узгодити платіжний сценарій між власником бізнесу, розробником та операційною командою. Перед запуском варто зафіксувати канал продажів, provider route, відповідальних за webhook, перевірку статусу та підтримку клієнта після оплати.