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

Таксопаркке жүргізушілерден төлем жинау

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

Қысқаша

Таксопаркте күнделікті немесе апталық жинау — бір типтегі көп счёт. POST /api/v1/invoices/bulk бір сұрауда 1-ден 100-ге дейін счёт жасайды: жүргізушінің нөмірін берсеңіз, счёт оның Kaspi қосымшасына push болып барады. Тізім қайталанып жіберілсе де дубль шықпауы үшін Idempotency-Key қолданылады. Әр элементтің қатесі бөлек келеді — біреуі құласа қалғаны жасалады.

Сценарий

Паркте 80 жүргізуші. Әрқайсысы күнделікті жалдау ақысын немесе комиссиясын төлейді. Бұрын бұл қалай жүретін: жүргізуші паркке келеді, диспетчерге қолма-қол береді немесе өз картасынан аударады, диспетчер кестеге белгілейді, ай соңында ешкім кімнің қанша төлегенін дәл білмейді.

Керегі: таңертең 80 жүргізушіге бірден счёт шықсын, әрқайсысының телефонына келсін, кім төлегені кабинетте көрінсін, есеп өздігінен жиналсын.

Жұмыс схемасы қадамдап

  1. Тізім дайындау. Сіздің жүйеңіз (өз базаңыз, кесте, диспетчерлік бағдарлама) бүгін төлеуі керек жүргізушілердің тізімін құрайды: телефон, сома, ішкі нөмір.
  2. Бір сұрау. POST /api/v1/invoices/bulk — денесінде счёттар массиві, 1-100 элемент. 80-нен көп болса пакетке бөлесіз.
  3. Идемпоттылық. Сұрауға Idempotency-Key тақырыбын қосасыз, мәні күнге байланған тұрақты жол (мысалы «парк-жинау-2026-09-14»). Тапсырма қайта іске қосылса да, счёттар екі есе шықпайды.
  4. Жауапты талдау. Әр элемент бойынша нәтиже келеді. Сәтті болғандарын базаға жазасыз, қатесі барларын журналға шығарасыз.
  5. Жүргізушіге push. kind: "phone" таңдасаңыз, счёт жүргізушінің Kaspi қосымшасына хабарлама болып келеді. Ол ашып, растайды.
  6. Webhook. Төлем түскенде invoice.paid келеді, ішінде externalOrderId бар — жүргізушіні сол арқылы табасыз да, оның балансын жабасыз.
  7. Есеп. Күн соңында кім төледі, кім төлемеді — кабинеттен сүзіп көресіз немесе CSV экспорттайсыз.

Қандай API әдісі керек

Не істейдіӘдіс
Тізім бойынша счётPOST /api/v1/invoices/bulk (1-100)
Жеке жүргізушіге счётPOST /api/v1/invoices
Күйін тексеруGET /api/v1/invoices/{id}
Кезең бойынша тізімGET /api/v1/invoices
Жүргізуші жұмысқа шықпасаPOST /api/v1/invoices/{id}/cancel
Артық алынғанды қайтаруPOST /api/v1/invoices/{id}/refund
Төлем туралы хабарWebhook invoice.paid, топтап шығару нәтижесі invoice.bulk

Идемпоттылық — дубльден сақтайтын нәрсе

Күнделікті жинау — автоматты тапсырма, ал автоматты тапсырма қайталанады: cron екі рет қосылды, желі үзілді де сұрау қайта кетті, диспетчер батырманы екі рет басты. Идемпоттылықсыз әр жүргізушіге екі счёт барады, телефоны екі рет шырылдайды, кейбіреуі екі рет төлеп қояды.

Шешімі: Idempotency-Key тақырыбы. Мәні тұрақты болуы керек — күн мен пакет нөмірінен құраңыз, кездейсоқ сан алмаңыз. Сол кілтпен қайталасаңыз жаңа счёт жасалмайды, бұрынғысы қайтады (HTTP 200, idempotentReplay: true).

Webhook өңдеуі де идемпотентті болсын: (invoice.id, status) жұбын тексеріңіз, өйткені 2xx емес жауап берсеңіз біз 11 рет қайталаймыз. Толығы: Идемпоттылық.

Дубль шығып кетсе, шұғыл тоқтату жолы бар: Счёттар қосарланып жатыр.

Әр элементтің қатесін бөлек өңдеу

bulk әдісінде әр элемент өз алдына тексеріледі. Пакет толық құламайды: 80 счёттың 77-і жасалады, 3-еуі қате қайтарады.

Жиі кездесетін себептері:

СебебіНе істеу керек
Телефон пішімі бұрыс (7XXXXXXXXXX емес)Базадағы нөмірді тазалау
Сома нөл немесе терісЕсептеу логикасын тексеру
Телефонға счётта тиын барБүтін теңгеге дөңгелектеу
Сипаттама тым ұзынТелефонға счётта 60 таңба, QR-да 100
Айлық лимит біттіТарифті көтеру немесе жинауды бөлу
Тәуліктік қорғаныс іске қосылдыПакеттерді уақыт бойынша жаю

Жауаптағы жолдарды өз тізіміңіздің ретімен салыстырыңыз, қатесі барларын бөлек кезекке қойып, түзеген соң қайта жіберіңіз. Бүкіл пакетті қайта жібермеңіз — идемпоттылық кілті болса да, қажет емес жүктеме.

Айлық лимит tariff_limit_reached қатесін береді, тәуліктік қорғаныс tariff_daily_burst береді. Бұл екі басқа нәрсе: тәуліктік сан — бизнес лимиті емес, циклге түскен интеграциядан сақтандырғыш. Толығы: Лимитке жеттім — не істеу керек.

Күнделікті жинауды автоматтандыру

Тұрақты жұмыс реті:

  1. Таңғы белгіленген уақытта тапсырма іске қосылады.
  2. Бүгін төлеуі керек жүргізушілер тізімі құрылады (жұмысқа шыққандар, берешегі барлар).
  3. Тізім 100-ден аспайтын пакеттерге бөлінеді.
  4. Әр пакет bulk арқылы жіберіледі, Idempotency-Key — күн мен пакет нөмірі.
  5. Пакеттер арасына бірнеше секунд үзіліс қойылады — бірден жүздеген сұрау жібермеңіз.
  6. Нәтиже базаға жазылады, қатесі барлар қайта жіберу кезегіне түседі.
  7. Кешке қарай төлемегендерге еске салатын екінші толқын жіберіледі.

Алдымен бүкіл циклді sandbox кілтімен (qp_test_…) өткізіңіз: нақты ақша жүрмейді, төлемді simulate арқылы өзіңіз қоясыз.

Есеп пен экспорт

Счёт жасаған сәтте белгі қойыңыз, кейін есеп жинау оңай болады:

Кабинеттегі Счёттар бөлімінен кезең мен күй бойынша сүзіп, CSV экспорттайсыз. Бухгалтерияға дәл сол файл беріледі. Толығы: CSV экспорт және есеп.

Бірнеше бөлімше болса, әрқайсысына жеке API кілт жасаңыз — есеп көзі бойынша бөлінеді.

Ерекше ескертулер

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

Бір сұрауда неше счёт жіберуге болады? 1-ден 100-ге дейін. Одан көп болса пакетке бөліңіз.

Ақша жүргізушінің картасынан өзі шешіле ме? Жоқ. Біз тек счёт шығарамыз, жүргізуші әр төлемді Kaspi қосымшасында өзі растайды.

Тапсырма екі рет қосылып кетсе счёттар қосарлана ма? Idempotency-Key тақырыбын дұрыс берсеңіз — жоқ. Кілт мәні тұрақты, күнге байланған болуы керек.

Пакеттің бір элементі құласа, қалғаны жасала ма? Иә. Әр элемент бөлек тексеріледі, қалғаны сол күйі жасалады.

Ақша қайда түседі? Тіке паркіңіздің Kaspi шотына. Бізде ұсталмайды, транзакциядан пайыз алмаймыз — қызмет ақысы айлық жазылым.

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

Жалға беру бизнесінеПауэрбанк станциясы, велосипед, самокат, құрал-жабдық, киім. Депозитті алу мен қайтару, мерзімдік төлем, QR арқылы автоматты беру және ішінара қайтару.Топтап счёт жасау — бір сұрауда 100 счётқа дейінPOST /api/v1/invoices/bulk әдісі: бір сұрауда 1-100 счёт, әр элемент бөлек тексеріледі, жауап құрылымы, қателерді элемент бойынша өңдеу, идемпоттылық және тариф лимитіне әсері.Идемпоттылық: қайталаудан қорғануIdempotency-Key тақырыбы қалай жұмыс істейді, кілтті қалай құру керек, externalOrderId-дің рөлі неде, webhook өңдеуде және қайтаруда қайталанудан қалай сақтану керек.CSV экспорт және есеп: счёттарды тізім етіп алуСчёттарды кабинеттен және API арқылы шығару, сүзгілер мен бағандардың мағынасы, UTF-8 кодтауы, Excel-дегі иероглиф және Kaspi Pay есебімен салыстыру — сандар неге дәл сәйкес келмеуі мүмкін.Metadata және тапсырыс нөміріexternalOrderId мен metadata өрістерінің айырмашылығы, олардың webhook-та қалай қайта келетіні, metadata ішіне нені жазуға болады және нені ешқашан жазбау керек — нақты мысалдармен.

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

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