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

Интеграцияны қалай сынау керек

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

Қысқаша

Sandbox (qp_test_… кілті) — нақты ақша жүрмейтін, Kaspi шақырылмайтын толық жұмыс істейтін режим. Төлемді өзіңіз POST /api/v1/invoices/{id}/simulate арқылы «орындайсыз». Sandbox үшін Kaspi кассирі керек емес және sandbox счёттары тариф лимитіне кірмейді.

Продакшенге шықпас бұрын кемінде алты сценарийді өткізіңіз: сәтті төлем, болдырмау, мерзімі өту, толық қайтару, ішінара қайтару, кеш төлем. Соңғысын ұмытып кетеді де, іс жүзінде сол бұзады.

Дайындық

  1. Кабинетте режимді sandbox-қа қойыңыз
  2. qp_test_… кілтін жасаңыз, қажет scope-тарды беріңіз
  3. Webhook адресін қосыңыз және құпиясын сақтаңыз (бір рет көрсетіледі)

Sandbox пен live айырмашылығы: Sandbox пен нақты режим.

Алты негізгі сценарий

simulate эндпоинті үш күйді қабылдайды: paid, failed, expired. Болдырмау бөлек эндпоинтпен, қайтару да бөлек эндпоинтпен жасалады.

СценарийҚалай жасайсызНе тексересіз
1Сәтті төлемСчёт жасау → simulate {"status":"paid"}invoice.paid webhook келді, тапсырыс «төленді» болды, тауар/қызмет берілді
2БолдырмауСчёт жасау → POST /invoices/{id}/cancelКүй cancelled, invoice.cancelled келді, тапсырыс жабылды
3Мерзімі өтуСчёт жасау → simulate {"status":"expired"}Күй expired, invoice.expired келді, себет босатылды немесе тауар қоймаға қайтты
4Толық қайтаруТөленген счёт → POST /invoices/{id}/refund сомасызКүй refunded, refund.done және invoice.refunded келді
5Ішінара қайтаруТөленген счёт → refund {"amount": жартысы}Күй partially_refunded, қалған сома дұрыс есептелді
6Кеш төлемСчётты cancel немесе simulate expired қылып жабыңыз, сосын simulate {"status":"paid"}invoice.paid оқиғасы late: true белгісімен келді, жүйеңіз жабылған тапсырысты қалай өңдейтінін көресіз

Алтыншы сценарий ең маңыздысы. Нақты өмірде клиент QR-ды сканерлеп, ойланып отырып, счёт өтіп кеткеннен кейін растап жіберуі мүмкін. Сіздің жүйеңіз не істейді: қызметті береді ме, әлде ақшаны автоматты қайтарады ма? Шешімді алдын ала қабылдаңыз, әйтпесе бірінші сондай жағдайда қолмен шешуге тура келеді. Толығы: Кеш келген төлем.

simulate толық сипаттамасы: Sandbox-та төлемді симуляциялау.

Webhook-ты сынау

Webhook — интеграцияның ең нәзік бөлігі, өйткені ол сіздің серверіңізге сырттан кіреді. Үш тәсіл бар.

1. Жергілікті сервер + туннель. Әзірлеу кезінде ыңғайлы: туннель қызметі (ngrok сияқты) жергілікті портыңызды сыртқы адреске шығарады. Sandbox-та бұл жұмыс істейді.

Бірақ продакшенде туннель адресі қабылданбайдыwebhook_url_tunnel_forbidden қатесін аласыз. Продакшенде тек тұрақты домен және https. Сондықтан туннельді тек әзірлеуге пайдаланыңыз, live адрес ретінде қалдырмаңыз.

2. Сыртқы қабылдағыш (webhook.site сияқты). Қолтаңбаның, тақырыптардың, дененің қалай келетінін өз көзіңізбен көру үшін жақсы. Бірақ құпияңызды сондай қызметке салмаңыз — тек sandbox құпиясымен, тек қарап көру үшін пайдаланыңыз.

3. Қолтаңбаны офлайн тексеру. Ең сенімдісі. Келген денені файлға сақтап, юнит-тест жазыңыз: timestamp + "." + rawBody жолынан HMAC-SHA256 есептеп, X-Webhook-Signature мәнімен салыстырыңыз.

Webhook өңдеуіңізде міндетті түрде тексеретін тізім:

2xx бермесеңіз, жеткізу 11 рет қайталанады (10 секундтан 1 сағатқа дейін өсіп отырады). Ал қатар қате бере берсеңіз, адрес уақытша тоқтатылады. Сондықтан «200 қайтарып, кейін өңдеу» тәртібі маңызды.

Егжей-тегжейі: Webhook қауіпсіздігі, Webhook баптау.

Шекті жағдайлар

Негізгі сценарийлер өткен соң, мыналарды тексеріңіз — өндірісте құлататыны осылар.

Не сынайсызҚалайКүтілетін нәтиже
Дубль сұрауБір Idempotency-Key тақырыбымен екі рет счёт жасаңызЖаңа счёт жасалмайды, HTTP 200 және idempotentReplay: true
Бір тапсырыс екі ретБір externalOrderId бойынша екі счёт жасап көріңізӨз жағыңызда қалай өңдейсіз — шешімін жазып қойыңыз
Қате сома0, теріс сан, мәтін, phone счётқа тиынды сомаinvalid_amount, amount_too_small, amount_must_be_whole_tenge
Жоқ телефонkind: "phone", бірақ customer.phone жоқ немесе пішімі бұрысinvalid_phone
Жоқ счётОйдан шығарылған id бойынша GETinvoice_not_found, 404
Жабық счётТөленген счётты cancel қылып көріңізinvoice_not_open, 409
Артық қайтаруТөленген сомадан көп қайтаруға тырысыңызinvalid_refund_amount
ЛимитSandbox-та көп счёт жасап көріңізSandbox счёттары айлық лимитке кірмейді, бірақ сұрау жиілігі 429 беруі мүмкін
Жарамсыз кілтӘдейі бұзылған кілтпен сұрауunauthorized, 401
Жетпейтін scoperefunds:write жоқ кілтпен қайтаруinsufficient_scope, 403

Барлық қате кодтары: Қателер каталогы.

Автоматты тест жазу

Қолмен сынау бір рет жақсы, бірақ кодты өзгерткен сайын қайталау керек. Sandbox автоматты тестке жарайды: нақты ақша жоқ, Kaspi шақырылмайды, лимитке кірмейді.

Бір тесттің типтік циклі:

  1. POST /api/v1/invoices — счёт жасау, id алу
  2. POST /api/v1/invoices/{id}/simulate{"status":"paid"}
  3. Webhook келгенін күту (немесе тікелей GET /api/v1/invoices/{id} оқу)
  4. Өз дерекқорыңызда тапсырыс күйі өзгергенін тексеру
  5. Соңында тазалау

Практикалық кеңестер:

Автоматты тест циклінің мысалдары SDK құжаттамасында: Node.js SDK, PHP SDK, Python SDK.

Live режимге өткенде

Sandbox-тағы тест live-та бәрі дұрыс дегенді білдірмейді. Live-та қосымша тексеретіндер:

Толық тізім: Продакшенге шығу чек-парағы.

Жиі қойылатын сұрақтар

Sandbox-та QR нағыз ба? Жоқ. QR суреті жасалады, бірақ оны Kaspi қосымшасы сканерлемейді. Төлемді simulate арқылы жасайсыз.

Sandbox счёттары тариф лимитін жей ме? Жоқ. Айлық лимитке де кірмейді, 7 күндік сынақ мерзімін де бастамайды — сынақ бірінші live счёттан басталады.

simulate арқылы cancelled күйін қоюға бола ма? Жоқ, ол үш күйді ғана қабылдайды: paid, failed, expired. Болдырмау үшін POST /invoices/{id}/cancel эндпоинтін қолданыңыз.

Live кілтпен simulate шақырсам не болады? not_sandbox қатесі, 403. Симуляция тек sandbox-та.

Тестте кассир керек пе? Sandbox үшін керек емес. Kaspi кассирі тек live счёттар үшін қажет.

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

Sandbox-та төлемді симуляциялауsimulate эндпоинті арқылы sandbox счётының күйін өзгерту: paid, failed, expired. Kaspi шақырылмайды, webhook нағыз төлемдегідей келеді. Сынау циклі және автоматты тест жазу.Sandbox пен нақты режимнің айырмашылығыSandbox-та Kaspi мүлде шақырылмайды, ақша жүрмейді, кассир де керек емес — төлемді өзіңіз симуляциялайсыз. Екі режимнің толық салыстыруы және нақты режимге көшкенде нені тексеру керек.Продакшенге шығу чек-парағыНақты режимге көшер алдында өтетін он екі тармақ: кассир, live кілт, webhook, қолтаңба, идемпоттылық, кеш төлем, қате өңдеу, журнал, тариф пен лимит, Telegram ескертуі, қайтару реті, бірінші нақты төлем.Идемпоттылық: қайталаудан қорғануIdempotency-Key тақырыбы қалай жұмыс істейді, кілтті қалай құру керек, externalOrderId-дің рөлі неде, webhook өңдеуде және қайтаруда қайталанудан қалай сақтану керек.Қателер каталогы — API не қайтарады және не істеу керекQut Pay API-інің барлық негізгі қате кодтары топтап берілген: авторизация, Kaspi байланысы, счёт, қайтару, тариф лимиті, webhook, жазылым. Әрқайсысының себебі және шешімі.

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

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