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

Как сделать кнопку «Оплатить через Kaspi» на сайте — три способа

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

Коротко

Кнопка «Оплатить через Kaspi» на сайте — это либо обычная ссылка на постоянную страницу оплаты qut.kz/p/<slug> (без кода, подходит для одной цены или открытой суммы), либо кнопка, по которой ваш сервер создаёт счёт через API Qut Pay и перенаправляет покупателя на payUrl (счёт на каждый заказ со своей суммой и номером). В обоих случаях покупатель платит в приложении Kaspi, деньги приходят на ваш Kaspi Pay, а сайт узнаёт об оплате по webhook invoice.paid. Для этого нужен бизнес-аккаунт Kaspi Pay и подключённый кассир — что нужно, чтобы начать.

Какой способ выбрать

Кнопка-ссылка qut.kz/p/<slug>Кнопка со счётом через API
Нужен ли код на серверенетда, один запрос
Суммафиксированная или вводит покупательсвоя у каждого заказа
Номер заказа в счётенетда, externalOrderId
Куда подходитлендинг, Instagram, визитка, одна услугаинтернет-магазин, корзина, личный кабинет
Как узнать об оплатев кабинете или по webhookwebhook + GET /invoices/{id}

Для WordPress и OpenCart кнопку добавляет готовый модуль: WooCommerce, OpenCart. Для Tilda — форм-хук.

Способ 1. Кнопка-ссылка без кода

  1. В кабинете откройте раздел Ссылки и создайте ссылку: адрес (например konsultaciya), название, сумму — фиксированную или открытую. Подробно: ссылки на оплату.
  2. Вставьте на сайт обычную ссылку, оформленную как кнопка:
<a href="https://qut.kz/p/konsultaciya" class="btn">Оплатить через Kaspi</a>

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

Способ 2. Кнопка со счётом на каждый заказ

Кнопка отправляет запрос на ваш сервер, сервер создаёт счёт в Qut Pay и перенаправляет покупателя на страницу оплаты. API-ключ при этом остаётся на сервере — в HTML и JavaScript страницы его быть не должно.

Запрос, который делает сервер:

curl -X POST https://api.qut.kz/api/v1/invoices \
  -H "X-API-Key: qp_live_…" -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-A-1041" \
  -d '{"amount": 12000, "externalOrderId": "A-1041", "description": "Заказ A-1041", "successUrl": "https://example.kz/thanks"}'

В ответе 201 приходят id, payUrl, qrUrl, deepLink, expiresAt. Набросок на Node.js (Express):

app.post('/pay', async (req, res) => {
  const r = await fetch('https://api.qut.kz/api/v1/invoices', {
    method: 'POST',
    headers: { 'X-API-Key': process.env.QUTPAY_KEY, 'Content-Type': 'application/json' },
    body: JSON.stringify({ amount: 12000, externalOrderId: req.body.orderId, description: 'Заказ ' + req.body.orderId }),
  });
  const invoice = await r.json();
  res.redirect(invoice.payUrl);
});

Кнопка на странице — обычная форма: <form method="post" action="/pay"><input type="hidden" name="orderId" value="A-1041"><button>Оплатить через Kaspi</button></form>. На PHP и Python то же делается через SDK PHP и SDK Python; все поля запроса — в статье создание счёта через API.

На телефоне: открыть приложение Kaspi

payUrl ведёт на страницу qut.kz/pay/<id>, где уже есть QR для компьютера и кнопка для телефона. Если вы рисуете свою страницу оплаты, на телефоне показывайте кнопку с адресом deepLink — она открывает приложение Kaspi сразу со счётом, а QR оставьте для экрана компьютера: сканировать QR с того же телефона, на котором он показан, нельзя. QR действует около трёх минут (точное время — в expiresAt) — почему истекает QR.

Что видит покупатель

После нажатия покупатель видит в приложении Kaspi сумму, описание счёта и номер вашего кассира (его показывает сам Kaspi), подтверждает платёж — и деньги зачисляются на ваш бизнес-счёт Kaspi Pay. Если в счёте указан successUrl, покупатель может вернуться по нему на ваш сайт. Подробно: что видит покупатель.

Как сайт узнаёт об оплате

Возврат покупателя на страницу «спасибо» оплату не подтверждает. Заказ отмечайте оплаченным по webhook invoice.paid с проверенной подписью HMAC-SHA256 или по статусу paid из GET /invoices/{id} с вашего сервера. Адрес webhook добавляется в кабинете в разделе Интеграции — настройка вебхуков, как автоматически узнать об оплате. Для кнопки-ссылки webhook тоже приходит, а оплаты видны в кабинете в разделе Счета.

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

Можно ли сделать кнопку только на JavaScript, без сервера? Для способа 2 — нет: API-ключ нельзя класть в код страницы. Без сервера используйте кнопку-ссылку qut.kz/p/<slug>.

Как проверить кнопку до реальных платежей? Создайте ключ qp_test_…: счёт создаётся так же, а оплату имитирует POST /invoices/{id}/simulate — песочница.

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

Нужен ли чек покупателю? Да, его выдаёт продавец; при включённой Kaspi Кассе чек уходит покупателю сам — фискальный чек.

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

Ссылки на оплату — постоянный адрес для приёма платежейПостоянная ссылка вида qut.kz/p/<slug>: свой адрес, фиксированная и открытая сумма, остановка и возобновление, чем отличается от ссылки на счёт, отчётность по ссылкам и коды ошибок.Как подключить Kaspi QR к сайту — все способыТри способа принимать оплату Kaspi QR на сайте — ссылка из приложения Kaspi Pay, прямая интеграция с Kaspi, сервис-автоматизатор вроде Qut Pay. Что требуется, сколько стоит, как подтверждается оплата, с чего начать за 15 минут.Создание счёта: все поляПолный справочник по POST /api/v1/invoices — тип и ограничение каждого поля, все поля ответа, примеры на curl и Node, разница между qr и phone и список частых ошибок с решениями.Как автоматически узнать, что Kaspi QR оплаченДва способа подтвердить оплату Kaspi QR без ручной сверки — webhook invoice.paid на ваш сервер и запрос статуса счёта. Что приходит, как проверить подпись, как не отметить заказ оплаченным по ошибке, что делать на странице «спасибо».Настройка вебхуковКак добавить адрес вебхука в кабинете, выбрать события и сохранить секрет, какие приходят заголовки и тело, как устроены 11 повторов, как читать журнал, протестировать адрес и что с редиректами.Что видит покупательЧто покупатель видит в приложении Kaspi: сумму, описание и номер кассира. Ограничения описания, чеки после оплаты и почему ваши внутренние данные до него не доходят.QR показывает «попробуйте позже»Если покупатель сканирует QR и видит ошибку, чаще всего истекло окно сканирования. Окно задаёт Kaspi, берите его из поля expiresAt. Чем печатный QR отличается от QR на экране.

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

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