Qut Pay Сайт Кабинет Білім базасы Нұсқаулықтар API құжаттамасы ҚАЗРУС
Басты бет → Білім базасы → Анықтамалық

Kaspi QR төленгенін автоматты қалай білуге болады

Жаңартылды: 2026-10-25 · Markdown нұсқасы

Қысқаша

Сатып алушы QR-ды төлегенде Qut Pay оны өзі байқап, екі нәрсе істейді: серверіңізге invoice.paid webhook-ін жібереді және счёттың күйін сұрауға болатын paid-қа өзгертеді. Дұрыс схема: тапсырыс қолтаңбасы тексерілген webhook бойынша немесе серверден GET /invoices/{id} жауабы бойынша төленді деп белгіленеді, бірақ ешқашан сатып алушының «рахмет» бетіне оралуы бойынша емес.

1-тәсіл — webhook (негізгі)

  1. Кабинет → Интеграциялар бөлімінде серверіңіздің адресін жазып, құпия сөзді алыңыз — webhook баптау.
  2. Төлем болғанда POST келеді, JSON: { "event": "invoice.paid", "invoice": { "id", "status": "paid", "amount", "externalOrderId", "paidAt", "receiptUrl", … } }.
  3. Қолтаңбаны тексеріңіз: X-Webhook-Signature: sha256=… тақырыбы — timestamp + "." + шикі дене жолының HMAC-SHA256-сы, timestamp X-Webhook-Timestamp-тан. JSON-ды талдамай тұрып, дененің шикі байттары бойынша есептеңіз — қолтаңба неге сәйкес келмейді.
  4. Тапсырысты externalOrderId бойынша тауып, amount-ты салыстырып, төленді деп белгілеп, 8 секунд ішінде 200 қайтарыңыз.
  5. Өңдеушіні идемпотентті етіңіз: сол (invoice.id, status) екі рет келуі мүмкін, қайталанғаны ештеңе өзгертпеуі керек.

Сервер 2xx қайтармаса, Qut Pay жеткізуді шамамен екі сағат ішінде 11 ретке дейін қайталайды — webhook келмейді.

2-тәсіл — күйін сұрау (қосымша)

curl https://api.qut.kz/api/v1/invoices/inv_… -H "X-API-Key: qp_live_…"

Жауапта status: pending — күтудеміз, paid — төленді, expired / cancelled / failed — төленбеді. Сервис соңғы белгілі күйді емес, Kaspi-ден дәл қазір сұрауы үшін ?live=1 қосыңыз. Сатып алушы төлем бетінде тұрғанда 5–10 секунд сайын сұрау қалыпты; әр секунд сайын сұрау сұраныс лимитіне тіреледі. Қайсысын қашан таңдау: webhook пе, сұрау ма.

«Рахмет» беті

Төлемнен кейін сатып алушы сіздің successUrl-ге оралады. Бұл өту — төлемнің дәлелі емес: сілтемені қолмен де ашуға болады. Сол бетте счёт күйін серверден сұрап, «төленді» деп тек paid болғанда көрсетіңіз.

Тағы не күту керек

Нақты ақшасыз тексеру

Sandbox-та (qp_test_…) төлемді {"status":"paid"} денесімен POST /invoices/{id}/simulate сұрауы имитациялайды — webhook барлық тақырыбымен нағыз күйінде келеді — sandbox.

Байланысты мақалалар

Webhook баптауКабинетте webhook адресін қосу, оқиғаларды таңдау, құпияны сақтау, тақырыптар мен дене пішімі, 11 рет қайталау кестесі, журналды оқу, адресті сынау және қайта бағыттау ережесі.Webhook пен күйді сұрау: қайсысы қашанWebhook — негізгі әдіс, бірақ жеткізу кепілдігі абсолютті емес. Кідіріске сезімтал сценарийлерде екеуін қатар жүргізу керек: қалай, қандай жиілікпен және неге бұл артық жұмыс емес.Webhook қолтаңбасы сәйкес келмейдіҚолтаңба HMAC-SHA256(secret, timestamp + "." + rawBody) арқылы есептеледі. Ең жиі қате — денені JSON-ға айналдырып, қайта жолға түрлендіру. Raw body алудың Express, Laravel, Django мысалдары.Счёттың өмірлік цикліСчёттың барлық күйлері мен ауысулары, қай күйде қандай webhook оқиғасы келеді, қайсысы ашық және қайсысы төленген деп есептеледі, кеш келген төлемді қалай өңдеу керек.Кеш келген төлем — счёт жабылған, ал ақша келдіБолдырылған немесе мерзімі өткен счётқа ақша кешігіп келуі мүмкін. Ондайда invoice.paid оқиғасы late: true белгісімен келеді. Не істеу керек және кодта бұған қалай дайын болу керек.

Сұрағыңыз қалды ма? WhatsApp +77788813333 · kazprose@gmail.com
Кабинеттен де жазуға болады: Қолдау.

Qut Pay — тәуелсіз сервис, «Kaspi Bank» АҚ-мен аффилирленбеген. Kaspi және Kaspi Pay — құқық иесінің тауар белгілері.