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

QR-счёт или счёт по телефону — что выбрать

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

Коротко

При создании счёта у поля kind два значения:

Самое короткое правило: покупатель смотрит на ваш экран — берите qr; покупатель далеко, а номер известен — берите phone.

Полное сравнение

QR-счётСчёт по телефону
Значение kindqr (по умолчанию)phone
Что делает покупательСканирует QR или открывает payUrlОткрывает уведомление в Kaspi и подтверждает
Нужен ли номер телефонаНетДа, customer.phone обязателен
Ограничение описания100 символов60 символов
СуммаМаксимум 2 знака после запятойТолько целые тенге
СрокОкно сканирования QR ограничено, берите из expiresAtУведомление лежит в приложении, окно длиннее
Приложение Kaspi у покупателяНе обязательно: ссылка открывается и в браузереОбязательно
Поля ответаpayUrl, qrUrl, qrImageUrl, deepLinkpayUrl тоже есть, но основной канал — пуш
Где удобноКасса, витрина, вендинг, сайт, соцсетиПосле звонка, чат, подписка, массовая рассылка

Ограничение описания

Поле description видит покупатель, но предел у двух типов разный: 100 символов у QR и 60 у phone.

Если в одном коде используются оба типа, безопаснее обрезать текст заранее:

const LIMIT = { qr: 100, phone: 60 };

function invoiceBody(kind, amount, text, phone) {
  return {
    kind,
    amount,
    description: text.slice(0, LIMIT[kind]),
    ...(kind === 'phone' ? { customer: { phone } } : {}),
  };
}

Слишком длинный текст может привести к отказу при создании счёта, а в массовой рассылке это заметно не сразу — поэтому обрезайте в коде.

Разница в сумме

ТипДопустимая сумма
qrДо двух знаков после запятой: 1250.50 пройдёт
phoneТолько целые тенге: 1250 пройдёт, 1250.50 — нет

На тиыны в счёте по телефону придёт ошибка amount_must_be_whole_tenge. Поэтому, если в вашей системе расчёта есть копейки, заранее решите правило округления для phone — вверх или вниз. Обычно округляют в одну сторону последовательно, чтобы разницу можно было объяснить покупателю одинаково в любом случае.

У QR два знака допустимы, но на практике круглая сумма всё равно понятнее покупателю.

Срок: про окно QR

Окно сканирования QR ограничено, и задаёт его Kaspi. Не записывайте его длительность в код константой — берите из поля expiresAt в ответе.

const inv = await createInvoice({ amount: 2500, kind: 'qr' });
const msLeft = new Date(inv.expiresAt) - Date.now();
showCountdown(msLeft);          // по истечении сами прячьте QR

Если покупатель отсканирует просроченный QR, Kaspi покажет ему сообщение в духе «попробуйте позже». Это не сбой — просто истёк срок счёта. Решение одно: создать новый счёт.

Поэтому там, где QR долго висит на экране (вендинг, турникет, витрина), ставьте обратный отсчёт и автоматически обновляйте код по истечении окна.

У счёта по телефону уведомление лежит в приложении покупателя, и решение он принимает без спешки. Это главное преимущество типа phone.

Если у покупателя нет приложения Kaspi

Счёт phone уходит в приложение Kaspi покупателя. Если приложения нет или его Kaspi привязан к другому номеру, уведомление не придёт никуда — счёт останется в pending и в итоге истечёт.

В такой ситуации:

  1. Создайте этому покупателю счёт qr.
  2. Отправьте ему payUrl в WhatsApp или SMS — ссылка открывается и в браузере.
  3. Либо дайте постоянную ссылку на оплату.

Подробнее: У покупателя нет приложения Kaspi.

Формат номера

Для phone номер указывается в формате 7XXXXXXXXXX, 11 цифр: 77011234567. Варианты с +7, 8, пробелами и дефисами не принимаются — придёт invalid_phone.

Нормализуйте номер перед отправкой:

const normalize = (raw) => {
  const d = String(raw).replace(/\D/g, '');
  if (d.length === 11 && d.startsWith('8')) return '7' + d.slice(1);
  if (d.length === 10) return '7' + d;
  return d;
};

Какой тип под какой сценарий

СценарийЧто братьПочему
Экран на кассе, витринаqrПокупатель рядом, номер не нужен
Вендинг, турникет, шлагбаумqrОтсканировал и сразу оплатил
Интернет-магазин, страница заказаqrВы отправляете покупателя на payUrl
Instagram, TikTok, директqr или ссылка на оплатуСсылку можно дать, не спрашивая номер
Счёт после телефонного разговораphoneПокупатель далеко, номер известен
Очередной платёж по подпискеphoneПокупатель видит счёт в своём приложении
Массовая рассылка: водители, слушателиphoneНомера уже в базе, рассылать ссылки не нужно
Оплата в момент доставкиqrQR на телефоне курьера

Типы можно комбинировать: отправить phone, а если покупатель не открыл его за пару минут — прислать в чат ещё и ссылку из qr-счёта. Приём распространённый и работает хорошо.

Что у них общего

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

Что будет, если не указать kind? Применится значение по умолчанию — qr.

Можно ли изменить тип у созданного счёта? Нет. Отмените старый счёт и создайте новый.

Есть ли payUrl у счёта phone? Да, он приходит в ответе. Если покупатель не заметил пуш, эту ссылку можно отправить ему отдельно.

Видит ли покупатель номер кассира? Да, в уведомлении Kaspi номер кассира виден — это штатное поведение Kaspi, одинаковое для обоих типов.

Нужно ли самому рисовать QR-код? Нет: в ответе уже есть готовые qrImageUrl и deepLink.

Нормально ли, что счёт долго висит в pending? Это значит, что покупатель пока не оплатил. Когда счёт станет expired, видно в поле expiresAt: Счёт завис в статусе pending.

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

У покупателя нет приложения Kaspi — как принять оплатуСчёт по телефону (kind phone) приходит в приложение Kaspi покупателя, и без приложения он просто не дойдёт. Вместо него нужен QR или ссылка на оплату. Как проверить заранее.Как создать первый счётДва способа: вручную из кабинета за два поля или одним запросом к API. Первый счёт разумно сделать в песочнице и там же симулировать оплату.Ссылки на оплату — постоянный адрес для приёма платежейПостоянная ссылка вида qut.kz/p/<slug>: свой адрес, фиксированная и открытая сумма, остановка и возобновление, чем отличается от ссылки на счёт, отчётность по ссылкам и коды ошибок.Каталог ошибок — что возвращает API и что делатьВсе основные коды ошибок Qut Pay API по группам: авторизация, привязка Kaspi, счета, возвраты, лимиты тарифа, вебхуки, подписки. Причина и решение для каждой.Счёт завис в статусе pendingPending — не ошибка, а нормальное состояние: счёт выставлен, покупатель ещё не подтвердил. Сколько он живёт, когда станет expired, как мы его проверяем и когда действительно стоит волноваться.

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

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