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

Оплата в вендинговом автомате без терминала

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

Коротко

В вендинге схема простая: покупатель выбирает товар → контроллер автомата сообщает вашему серверу в облаке → сервер создаёт счёт в Qut Pay → QR появляется на экране автомата → покупатель сканирует его в Kaspi → к вам приходит вебхук invoice.paid → сервер отправляет автомату команду на выдачу. Одинаково работает для автоматов воды, кофе и снеков. QR создаётся заново на каждую продажу — напечатанная и висящая на корпусе картинка не подойдёт.

Как это работает

ШагКтоЧто делает
1ПокупательВыбирает товар на автомате (например, 5 литров воды)
2КонтроллерЗапрос на ваш сервер: номер автомата, ячейка, сумма
3Ваш серверPOST /api/v1/invoices, в metadata — номер автомата и ячейка
4Ваш серверВозвращает контроллеру qrImageUrl (или qrUrl) и expiresAt
5АвтоматПоказывает на экране QR и таймер
6ПокупательСканирует в приложении Kaspi и подтверждает
7Qut PayШлёт на сервер invoice.paid
8Ваш серверОтправляет автомату команду: открыть ячейку / включить насос
9АвтоматВыдаёт товар и возвращает экран в исходное состояние

После подтверждения покупателем вебхук обычно приходит в пределах пяти секунд, так что человек может спокойно подождать у автомата.

Какой метод API используется

Основной — POST /api/v1/invoices с kind: "qr":

POST https://api.qut.kz/api/v1/invoices
X-API-Key: qp_live_…
Idempotency-Key: vm-014-1726300000

{
  "amount": 250,
  "kind": "qr",
  "description": "Автомат №14, вода 5 л",
  "externalOrderId": "vm-014-88231",
  "metadata": { "machine": "VM-014", "slot": "A2", "address": "Абая 10" }
}

Из ответа нужны: id, qrImageUrl (картинка на экран), qrUrl, expiresAt (для таймера).

Дополнительно:

Кладите номер автомата в metadata

Это основа всего сценария. В metadata положите как минимум три вещи: номер автомата, ячейку или код товара, адрес точки. Когда придёт вебхук, вы сразу знаете, какому автомату слать команду, и не ищете это по своей базе.

В externalOrderId удобно собирать номер автомата и внутренний номер продажи: vm-014-88231. По нему потом легко и отчитаться, и разобрать спорную ситуацию.

Если нужна раздельная отчётность по точкам, заведите на каждую точку свой API-ключ — фильтровать счета по источнику станет проще.

Что нужно со стороны железа

Не кладите API-ключ в контроллер. Устройство внутри автомата можно вскрыть, а один ключ действует на всю сеть. Пусть контроллер ходит только на ваш сервер и только со своим устройственным токеном.

Окно QR — главное ограничение

Окно сканирования — около трёх минут, его задаёт Kaspi. В вендинге отсюда следуют сразу два вывода.

Постоянный QR на экране висеть не может. Счёт создаётся на каждую продажу заново. Заранее напечатанная картинка перестанет работать уже на следующий день.

Показывайте таймер. Возьмите expiresAt и выведите на экран «QR действителен ещё 2:40». Когда время вышло, дайте кнопку «Показать заново» — контроллер запросит новый счёт, старый останется expired.

Если всё же нужен постоянный печатный код (например, дополнительная строка «оплатить здесь, если что-то пошло не так»), это должен быть не QR счёта, а ссылка на оплату вида qut.kz/p/<slug>: у неё нет срока жизни, и есть вариант с открытой суммой.

На что обратить внимание

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

На автомате нет интернета — подойдёт? Нет. Счёт создаётся в облаке, а автомат должен узнать о подтверждении оплаты. Самый дешёвый вариант — контроллер с GSM-модемом.

Что будет, если один QR отсканируют несколько человек? Один QR — это один счёт. Поэтому он годится ровно на одну продажу, и после каждой экран нужно возвращать в исходное состояние.

У автомата нет экрана, только кнопки. Как быть? Придётся поставить небольшой дисплей. Если показать QR негде, схема не работает.

Покупатель отсканировал, и тут пропала связь. Где деньги? Деньги приходят на ваш счёт в Kaspi, от автомата это не зависит. Если товар выдать не удалось — делайте refund. Поэтому записывайте в журнал каждую команду контроллеру.

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

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

Парковки и шлагбаумыQR на экране у выезда или счёт по номеру билета, вебхук открывает шлагбаум через IP-реле. Динамический и печатный QR, номер машины в metadata, борьба с задержкой.Приём Kaspi для интернет-магазинаПолная схема от корзины до статуса «оплачен»: счёт, страница оплаты, вебхук. Способы без кода для Tilda, WooCommerce и OpenCart, и путь через API для самописного сайта.Приём оплаты в мобильном приложенииПравильный порядок: приложение → ваш сервер → Qut Pay → Kaspi. Почему API-ключ не должен попадать в APK и IPA, что происходит при открытии payUrl и правила App Store и Play Market.Вебхук не приходит — как найти причинуСчёт оплачен, а на ваш сервер уведомление не пришло. С чего начать диагностику, какая причина встречается чаще всего и как проверить её одним запросом.Оплата подтверждается медленно — почему и что делатьПокупатель заплатил, а счёт не сразу становится paid. Как частота проверки зависит от возраста счёта, сколько это занимает на практике и что делать в сценариях, чувствительных к задержке.

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

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