Skip to content

Вебхуки ​

Владелец задаёт HTTPS-адрес в кабинете (Настройки → Вебхук) и получает секрет подписи. Секрет показывается один раз при сохранении: тот, кто получил доступ к кабинету на минуту, иначе унёс бы возможность подделывать чеки бессрочно.

8.1. События ​

СобытиеКогда приходит
sale.registeredЧек проведён. В теле — суммы, списанные баллы, что взять деньгами
sale.refundedЧек возвращён целиком или частью. В теле — снятый кешбек, возвращённые баллы и деньги, а также partial (после события в чеке осталось что возвращать), refundedAmount (сколько возвращено этим событием), remainingAmount (сколько ещё можно вернуть) и refundNumber (номер возврата по чеку; у возврата целиком старым путём может отсутствовать)
pingПроверка адреса кнопкой из кабинета. Тело пустое

События приходят на все продажи мерчанта, а не только на пробитые вашим API: на кассе uget, в мобильном приложении, по QR. Это и есть их смысл — иначе ваша учётная система видела бы лишь часть оборота.

8.2. Что приходит ​

POST /uget/events
X-Uget-Event: sale.registered
X-Uget-Timestamp: 1788623531
X-Uget-Signature: 9f2b…c41

{
  "saleId": 90210,
  "pointId": 7,
  "consumerId": 1024,
  "goodsAmount": "50000.00",
  "discount": "5000.00",
  "redeemedPoints": "5000.00",
  "cashPaid": "40000.00",
  "occurredAt": "2026-09-05T14:22:11Z"
}

8.3. Проверка подписи — обязательна ​

signature = hmac_sha256(secret, timestamp + "." + raw_body)   # hex
if signature != header["X-Uget-Signature"]: reject()
if now - timestamp > 300: reject()

Без проверки любой, кто узнал адрес, смог бы прислать выдуманный чек. Тело сверяйте в исходном виде, до разбора JSON: пересобранный объект даст другую строку и другую подпись. Сравнивайте подписи за постоянное время (hmac.compare_digest и аналоги), а не обычным ==.

Таймстемп входит в подписываемую строку, поэтому перехваченный запрос нельзя переиграть позже — но проверять его возраст должны вы сами.

8.4. Повторы и порядок ​

Ответ 2xx — событие принято. Любой другой ответ или таймаут (10 секунд) — uget повторит: до пяти попыток с задержкой 1, 2, 4, 8 и 16 минут, потом событие помечается DEAD и больше не приходит.

Из-за повторов одно событие может прийти дважды — считайте ключом saleId вместе с типом события. Порядок доставки не гарантирован: возврат может прийти раньше продажи, если первая попытка не прошла.