Вебхуки, що справді доходять до вас: HMAC, повторні спроби та ідемпотентність

Три речі, які кожна інтеграція платіжних вебхуків робить неправильно. Ось контракт, який постачає Baynoy, і чому саме так.

Розробники·2026-04-01·6 хв читання
Вебхуки, що справді доходять до вас: HMAC, повторні спроби та ідемпотентність

Кожному платіжному вебхуку потрібні три гарантії: автентичність (запит справді надійшов від нас), доставка щонайменше один раз (жодних подій, тихо втрачених) та ідемпотентність (повторні доставки не списують двічі у вашій БД).

Автентичність: кожен вебхук Baynoy постачає заголовок X-Baynoy-Signature — sha256(timestamp + '.' + body) із секретом вашого ендпоінту. Відхиляйте, якщо мітка часу старіша за 5 хвилин (захист від повторного відтворення) або підпис не збігається при порівнянні за сталий час. Ми дотримуємося стандартного формату підпису HMAC-SHA256, тож middleware перевірки підпису, яке ви вже використовуєте, підключається без змін.

Щонайменше один раз: ми повторюємо спроби з експоненційною витримкою через 1хв, 5хв, 30хв, 2год, 12год, 24год — максимум шість спроб. Кожна спроба записує рядок у baynoy_webhook_deliveries зі статусом відповіді. Ваша кнопка повторної доставки з UI в панелі керування використовує той самий конвеєр доставки; жодного окремого шляху.

Ідемпотентність: кожна подія несе event.id (UUIDv7 — сортований, монотонно зростаючий). Збережіть його при першому отриманні й відхиляйте дублікати на рівні БД за допомогою унікального обмеження. Ми повторимо доставку. Це обмеження — ваша страхувальна сітка.

Три рядки middleware — і ви маєте обробник вебхуків, що переживе 6-годинний збій, не втративши жодного сповіщення про платіж.

Хочете отримати глибокий огляд, щойно він вийде? Підпишіться нижче.