Qut Pay Сайт Кабинет База знаний Инструкции Документация API ҚАЗРУС
ГлавнаяБаза знаний → Справочник

Срок жизни счёта — сколько он действует и что делать дальше

Обновлено: 2026-09-14 · Версия в Markdown

Коротко

У каждого счёта есть свой срок, он приходит в поле expiresAt. Интеграция должна читать именно это поле — не зашивайте константу: срок задаёт Kaspi, и он может измениться.

Общее правило: окно сканирования QR-счёта короткое, а счёт, отправленный в приложение покупателя, живёт заметно дольше. По истечении срока счёт переходит в статус expired, «оживить» его нельзя — создаётся новый.

И главное: на уже закрытый счёт деньги могут прийти с опозданием. Тогда событие invoice.paid приходит с пометкой late: true, и ваш обработчик должен быть к этому готов.

Окно QR-счёта

Когда создаётся QR-счёт, Kaspi отводит на его сканирование короткое время — это сделано намеренно, чтобы картинка QR не жила долго. Конкретное значение задаёт Kaspi, а мы возвращаем его в поле expiresAt.

Что из этого следует на практике:

Срок счёта в приложении

Счёт kind: "phone" приходит покупателю уведомлением в приложение Kaspi и живёт значительно дольше — человек может открыть и оплатить его не сразу.

Точное значение берите там же, в поле expiresAt.

QR-счётСчёт по телефону
ОкноКороткое, под сканированиеДлинное, покупатель откроет позже
Где виденНа экране, на распечатке, на странице оплатыВ приложении Kaspi покупателя
Можно создать заранееНетДа
Нужен телефон покупателяНетДа

Полное сравнение: QR-счёт или счёт по телефону.

Как правильно использовать expiresAt

В ответе на создание счёта (201) expiresAt приходит временем в формате ISO. Правильный порядок работы:

  1. Возьмите expiresAt из ответа и сохраните у себя.
  2. Обратный отсчёт на странице стройте по этому значению.
  3. Когда время вышло, покажите кнопку «Срок QR истёк, создать новый».
  4. По нажатию создайте новый счёт — старый не переиспользуется.

Не зашивайте в код никакую константу срока: срок на стороне провайдера может измениться, и ваш таймер начнёт врать.

Статус expired

Просроченный счёт переходит в expired, и приходит событие invoice.expired. Это нормальное завершение, а не ошибка: покупатель просто не оплатил.

expired — финальный статус. Такой счёт:

При этом счёт никуда не исчезает: он остаётся в списке, попадает в отчёты, история сохраняется. Жизненный цикл счёта.

Если счёт непривычно долго висит в pending — это отдельный случай: Счёт завис в статусе pending.

Поздняя оплата: деньги на закрытый счёт

Самая важная часть. На просроченный (expired) или отменённый (cancelled) счёт деньги всё ещё могут прийти — покупатель подтвердил оплату на последних секундах, а информация дошла до нас позже.

В этом случае:

Что делать:

  1. Обработчик вебхука должен принимать invoice.paid после expired или cancelled. Не отбрасывайте его по логике «счёт закрыт, игнорирую».
  2. Либо окажите услугу, либо верните деньги — одно из двух.
  3. Не предлагайте покупателю оплатить повторно: деньги уже пришли один раз.
  4. Сделайте обработку идемпотентной по паре «идентификатор счёта + статус»: Идемпотентность.

Полный разбор сценария: Поздняя оплата.

Поэтому не считайте, что «окно закрылось — больше ничего не произойдёт»: какое-то время после закрытия статус счёта ещё может измениться. В системах, где товар выдаётся сразу, этот случай стоит продумать отдельно.

Вопросы и ответы

Можно ли продлить срок? Нет. Окно задаёт Kaspi, мы на него не влияем. Если покупателю нужно время — отправьте счёт в приложение.

Если я отменю счёт сам, деньги могут прийти? Да, на cancelled поздняя оплата тоже возможна — раздел выше действует полностью.

Просроченные счета считаются в лимите? Месячный лимит считается по созданным счетам, а не по оплаченным. Поэтому не создавайте лишних: Тарифы и лимиты.

Как это работает в песочнице? В песочнице статусы вы задаёте сами, включая expired: Симуляция оплаты в песочнице.

Можете назвать число минут для QR? Называть его константой неправильно — Kaspi может его изменить. Всегда читайте фактическое значение из expiresAt.

Связанные статьи

Жизненный цикл счётаВсе статусы счёта и переходы между ними, какое событие вебхука приходит в какой момент, какие статусы считаются открытыми и оплаченными, и как обработать поздно пришедшую оплату.QR показывает «попробуйте позже»Если покупатель сканирует QR и видит ошибку, чаще всего истекло окно сканирования. Окно задаёт Kaspi, берите его из поля expiresAt. Чем печатный QR отличается от QR на экране.Поздняя оплата — счёт закрыт, а деньги пришлиНа отменённый или просроченный счёт деньги могут прийти с опозданием. В этом случае событие invoice.paid приходит с меткой late: true. Что делать и как заранее подготовить к этому код.QR-счёт или счёт по телефону — что выбратьПолное сравнение двух типов счёта: значение kind, что делает покупатель, нужен ли номер, ограничения описания и суммы, срок жизни и таблица сценариев с рекомендацией по каждому.Счёт завис в статусе pendingPending — не ошибка, а нормальное состояние: счёт выставлен, покупатель ещё не подтвердил. Сколько он живёт, когда станет expired, как мы его проверяем и когда действительно стоит волноваться.

Остались вопросы? WhatsApp +77788813333 · kazprose@gmail.com
Написать можно и из кабинета: Поддержка.

Qut Pay — независимый сервис, не аффилирован с АО «Kaspi Bank». Kaspi и Kaspi Pay — товарные знаки их правообладателя.