Как это работает у вас
Схема потока на точке (касса, шоурум, пункт проката, туристический офис):
Покупатель у кассы готов платить
│
Ваша касса/планшет → POST /invoices/qr (сумма + описание ≤100 симв.)
│
201: qr_image_url (готовый PNG) — показываете на экране
│
Покупатель сканирует камерой Kaspi → подтверждает оплату
│
Вебхук invoice.status_changed: status=paid → выдаёте товар/чек
Ни сайта, ни онлайн-витрины не нужно: достаточно любого устройства с интернетом, которое умеет вызвать API и показать картинку. Деньги идут напрямую на ваш Kaspi-счёт.
Что понадобится
Точке нужен минимум — устройство с интернетом и доступ к Kaspi API:
| Компонент | Зачем | Где подробнее |
|---|---|---|
| Номер кассира (отдельная SIM) | Штатная роль «Кассир» в Kaspi Pay, через неё выставляются счета | Требования к номеру кассира |
| API-ключ | Заголовок X-API-Key при создании QR |
API-ключ и вебхук-секрет |
| Экран/планшет на точке | Динамический показ QR-счёта (печатать его нельзя — окно на скан меньше трёх минут); для бумаги — печатный QR под сделку | Печатный QR |
Вебхук invoice.status_changed |
Мгновенное «оплачено» без опроса статуса | Настройка вебхуков |
| Тариф по объёму | Лимит — по числу создаваемых счетов в день | тарифы — на apipay.kz |
Пошаговый сетап
- Зарегистрируйтесь на apipay.kz и подключите номер кассира в разделе «Настройки → Авторизация Kaspi» — мастер и разбор отказов в «Подключении кассира».
- Проверьте всё в песочнице: QR-счёт в sandbox поддерживает
simulate: paid|cancelled|expired— можно прогнать все исходы без реальных денег. - Подключите вебхук — URL, секрет и проверка подписи описаны в «Настройке вебхуков».
- Встройте создание QR в кассовый сценарий:
curl -X POST https://api.apipay.kz/api/v1/invoices/qr \
-H "X-API-Key: ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{"amount": 12500, "description": "Заказ №481, шоурум"}'
Ответ приходит сразу (201, статус pending) и содержит qr_image_url — готовый PNG, который остаётся вывести на экран, — и qr_token_url (платёжная ссылка Kaspi).
- Показывайте таймер: считайте его как
qr_expires_at − now(окно меньше трёх минут), константу в коде не зашивайте. После истечения — кнопка «Создать новый QR», а не ожидание. Картинкаqr_image_urlдоступна доqr_expires_at + 60 секунд, дальше отдаёт404. - Выдавайте товар только по вебхуку
paid, а не по слову «я оплатил».
Когда QR, а когда счёт по номеру?
Правило простое: QR — покупатель стоит рядом и платит сейчас; счёт по номеру — покупатель удалённо или «оплатит позже».
- Окно на скан у QR — меньше трёх минут, продления нет; точный момент берите из
qr_expires_at(подробно — «Сколько живёт QR-счёт»). - Счёт по номеру телефона живёт 24 часа: покупателю приходит push и счёт ждёт внутри приложения Kaspi. Ссылки на оплату у такого счёта нет — отправлять в WhatsApp нечего. Если нужна именно ссылка, это печатный QR под сделку.
В вебхуке об оплате приходят поля kaspi_source_type (значения GOLD, RED, LOAN, BUSINESSACCOUNT, BANKINTEGRATIONACCOUNT) и kaspi_sale_type (Remote, QR, Static, Restaurant) — обе строки приходят только когда они непустые, поэтому сравнивайте именно с этими значениями и держите ветку по умолчанию.
Грабли этого бизнеса
- QR с кассы печатать нельзя. Меньше чем через три минуты наклейка с таким QR перестанет работать — показывайте его динамически, под конкретную оплату. Для бумаги есть отдельный печатный QR под сделку, он живёт месяцами.
- QR-ссылку нельзя «отправить на потом» в мессенджер: пока клиент откроет сообщение, она истечёт. Для оплаты «когда увидит» — счёт по номеру, для бумаги — печатный QR под сделку.
- Забытая песочница. Если оплаты «не проходят» сразу после подключения — проверьте, что включён рабочий режим, а не sandbox.
Частые вопросы
Можно ли распечатать QR и повесить у кассы?
QR-счёт с кассы — нет: он создаётся под конкретную сумму и живёт минуты, поэтому его показывают динамически на экране. Для бумаги есть отдельный инструмент — «Печатный QR для оплаты по счёту или сделке». Общего QR «на все покупки сразу» нет ни в одном из режимов.
Нужен ли точке сайт или онлайн-касса?
Нет. Достаточно устройства, которое вызывает API и показывает картинку: планшет, кассовое ПО, даже внутренний скрипт. Без кода можно выставлять счета по номеру прямо из кабинета apipay.kz.
Как понять, что покупатель оплатил?
Вебхуком invoice.status_changed со статусом paid — приходит за секунды после оплаты. Не выдавайте товар по устному «оплатил» и по факту скана (invoice.qr_scanned — ещё не оплата).
Что если покупатель отсканировал, но передумал?
Придёт cancelled (закрыл оплату или свернул приложение). QR-счета сосуществуют: можно сразу создать новый, старый ничего не блокирует.
Берёт ли ApiPay процент с оплат на точке?
Нет, модель — фиксированная подписка с дневным лимитом создаваемых счетов; цены — «Тарифы и комиссия ApiPay». Деньги покупателей идут напрямую на ваш Kaspi-счёт.