Верификация и идемпотентность подписи Webhook

Проверьте 6MM Agent webhooks с помощью исходного тела запроса и обрабатывайте повторные процессы, тайм-ауты и повторяющиеся события без дублирования бизнес-действий.

Просмотр в формате Markdown

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

Заголовки Webhook

ЗаголовокОписание
X-Agent-TimestampТайммет Unix за секунды.
X-Agent-NonceЗащита от повтора.
X-Агент-ПодписьHMAC-SHA256 подпись.
timestamp + nonce + rawBody

При восстановлении знакового значения используйте точное исходное тело запроса, полученное HTTP . Сначала парсинг и повторная сериализация JSON могут изменить пробелы или ордер поля и получить другую подпись.

Поток верификации

  1. Прочитайте временную метку, nonce и заголовки подписи.
  2. Захватить немодифицированное исходное тело запроса.
  3. Постройте timestamp + nonce + rawBody.
  4. Вычислите HMAC-SHA256 с партнёром API секрет.
  5. Сравните рассчитанные и полученные подписи с помощью сравнения с постоянным временем.
  6. Примените утверждённые проверки на актуальность и неповторное использование.
  7. Проанализировать и обработать событие только после успешной проверки.

Когда доступен официальный Agent SDK -верификатор, используйте его вместо самостоятельного кода подписи.

Орденная идемпотентность

СлучайУправление
Первоначальный запрос на переводСоздайте уникальный agentOrderNoв мире.
HTTP тайм-аутЗапросите исходный agentOrderNo перед созданием нового.
PROCESSING ответЖдите статуса вебхука или заказа запроса.
Повторяющийся вебхукДедупликация по ключу идемпотентности и конечному статусу.

Сохраняйте достаточно информации, чтобы распознать повторную доставку и безопасно восстановить:

ПолеНазначение
Ключ для события или бизнесаУникально идентифицирует уведомление или операцию.
Номер заказа партнёраСвязывает событие с исходным запросом.
Хэш полезной нагрузкиПомогает выявлять противоречивые повторяющиеся полезные нагрузки.
Текущее состояние обработкиРазличает полученные, обработанные, успешные и неудачные работы.
Окончательный статус бизнесаПредотвращает дваждное применение клемного действия.
Обработанная метка времениПоддерживает политику расследования и удержания.

Фиксируйте запись бизнес-изменения и идемпотентности в одной и той же транзакции, где это возможно. Повторяющееся событие должно возвращать уже известный результат вместо повторного применения баланса, ордера или пользовательского изменения.

Правило тайм-аута и повторных попыток

Тайм-аут HTTP не доказывает, что первоначальный запрос не был выполнен. Запросите операцию с помощью исходного agentOrderNoили дождитесь его вебхука, прежде чем решать, требуется ли другое действие. Создание нового номера бизнес-заказа после каждого тайм-аута может привести к дублирующимся перемещениям средств.

Чек-лист производства

  • Проверять подпись перед JSON парсингом или бизнес-обработкой.
  • Сохранять исходное тело независимо от парсированной полезной нагрузки.
  • Отклонять устаревшие или повторные запросы в соответствии с утверждённой политикой интеграции.
  • Сделать обработку событий безопасной для повторной и вне ордера доставки.
  • Идентификаторы событий журнала, номера заказов партнёров, результаты обработки и время запроса.
  • Скрыть секреты и значения подписей из логов и поддерживающих вложений.