Перейти к основному содержанию

Обзор

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

Доступные события

Структура полезной нагрузки

Все вебхуки следуют одной базовой структуре:

Субсчета

Если событие относится к субсчёту, поле subAccount содержит его reference:
Если у субсчёта нет собственного эндпоинта для вебхуков, его события доставляются на эндпоинты основного аккаунта. Именно поэтому поле subAccount критично: только оно показывает, какому кошельку принадлежит событие.Всегда используйте это поле, чтобы зачислить событие в нужный кошелёк, и не считайте, что каждое событие, пришедшее на эндпоинт основного аккаунта, относится к самому основному аккаунту.

Отправляемые заголовки

Каждый запрос вебхука включает следующие заголовки:

Проверка подписи

Каждый вебхук подписан с использованием HMAC-SHA256 и secret вашего эндпоинта (отображается только один раз при создании). Для проверки выполните следующие шаги:
  1. Вычислите HMAC-SHA256 от сырого тела запроса, используя ваш secret в качестве ключа
  2. Добавьте к результату в hex префикс sha256=
  3. Сравните с заголовком X-BrazilPix-Signature, используя сравнение за константное время
Node.js (crypto)
Всегда используйте сравнение за константное время (timingSafeEqual), чтобы избежать атак по времени (timing attacks). Никогда не сравнивайте подписи через ===.

Примеры полезной нагрузки

payment_completed

Отправляется, когда платёж PIX подтверждён.
split в вебхуке — это то, что было фактически распределено, а не то, что вы запросили при создании платежа. Значения расходятся, когда комиссия аккаунта меняется между созданием платежа и оплатой: чистая сумма уменьшается, и части урезаются в том порядке, в котором были отправлены, вместо того чтобы зачисление сорвалось.Для сверки с выпиской кошелька всегда используйте значение из вебхука, а не то, что вы отправили в запросе. Поле появляется только при наличии разделения; у платежа без него этого ключа нет.

Прямое зачисление на ключ

Если для вашего аккаунта включён ключ PIX для прямого зачисления, перевод PIX на этот ключ без созданного платежа также вызывает payment_completed. Поскольку платёж не создавался, в событии нет externalReference и metadata, а поле pixKey указывает, на какой ключ пришли средства:
Сумма зачисляется на баланс как любой подтверждённый платёж, с комиссией PIX вашего аккаунта. Для сверки используйте e2eId (уникален для каждого PIX) и pixKey; сравнивайте ключ без учёта регистра. Ключ для прямого зачисления включает наша команда — обратитесь в поддержку.

payment_expired

Отправляется, когда платёж PIX истекает без подтверждения.

payment_failed

Отправляется, когда платёж PIX получен, но не мог быть зачислен — сейчас это случай, когда счёт блокирует депозиты от плательщиков-юрлиц (CNPJ). Сумма не поступает на ваш баланс, комиссия не взимается, деньги автоматически возвращаются плательщику. blockedDeposit.refund показывает ход возврата.
Возврат выполняет платёжное учреждение сразу после блокировки. refund.status в вебхуке — состояние на момент отправки; E2E возврата (refund.e2eId) обычно приходит через несколько секунд — запросите GET /transactions/{id} для итоговых данных и ответа плательщику.

refund_completed

Отправляется, когда возврат обработан.
Соглашение о netAmount в возвратах: это то, что фактически получает адресат события (конечный клиент) — то есть полная сумма возврата. Комиссия за возврат списывается отдельно с баланса продавца. Общая стоимость возврата для продавца составляет amount + feeAmount.

withdrawal_completed

Отправляется, когда вывод средств успешно обработан.

withdrawal_failed

Отправляется, когда вывод средств отклонён или завершился сбоем.

withdrawal_reversed

Отправляется, когда вывод средств отменён (реверсирован) со стороны PSP.

balance_block_created

Отправляется, когда создаётся блокировка баланса (MED, судебная или административная).

balance_block_approved

Отправляется, когда блокировка баланса одобрена и сумма возвращена исходному плательщику.

balance_block_rejected

Отправляется, когда блокировка баланса отклонена и сумма возвращается в доступный баланс продавца.

Лучшие практики

Возвращайте статус 200 OK как можно быстрее. При необходимости обрабатывайте вебхук асинхронно.
Используйте eventId, чтобы не обрабатывать одно и то же событие дважды. Вебхуки могут отправляться повторно в случае сбоя.
Настраивайте ваш эндпоинт только с HTTPS, чтобы обеспечить безопасность данных.

Повторные попытки

Если ваш эндпоинт не отвечает статусом 2xx, мы попытаемся отправить вебхук повторно:
  • 5 попыток с экспоненциальным backoff
  • Начальный интервал: 2 секунды
  • Максимальный интервал: ~30 секунд между попытками
После 5 неуспешных попыток вебхук помечается как неуспешный.