Қысқаша
pending — күту күйі, қате емес. Ол «счёт шығарылды, клиент әлі растаған жоқ» дегенді білдіреді. Бұл күйде счёт өзінің мерзімі біткенше тұра береді, сосын өзі expired болады. Ештеңе істеудің қажеті жоқ: біз счётты фонда тұрақты тексеріп отырамыз, клиент төлеген сәтте күйі paid-ке ауысады да, сізге webhook кетеді. Алаңдау керек жалғыз жағдай — бүкіл счёттарыңыз pending-те тұрып қалса.
Счёттың күйлері
new → pending → paid
→ cancelled
→ expired
Төленген счёт кейін refunded немесе partially_refunded болуы мүмкін.
| Күй | Мағынасы | Ашық па |
|---|---|---|
new | Счёт жасалды, әлі клиентке көрсетілмеген | Иә |
pending | Клиентке ұсынылды, растауын күтіп тұр | Иә |
paid | Клиент төледі, ақша Kaspi шотыңызда | Жоқ |
cancelled | Сіз болдырмадыңыз | Жоқ |
expired | Мерзімі бітті, клиент төлемеді | Жоқ |
new мен pending — ашық счёттар, яғни әлі төленуі мүмкін. paid, refunded, partially_refunded — төленген деп есептеледі.
Қанша уақыт тұрады
Бұл счёттың түріне байланысты, әрі мерзімді Kaspi белгілейді — біз оны өзіміз ұзарта алмаймыз.
| Түрі | Не болады | Мерзімі |
|---|---|---|
qr | QR + төлем сілтемесі | Сканерлеу терезесі қысқа, шамамен үш минут |
phone | Клиенттің Kaspi-іне push | Ұзағырақ: клиент хабарламаны кейін ашып төлей алады |
Нақты уақытты кодта тұрақты сан қылып жазбаңыз. Счёт жасағандағы жауапта expiresAt өрісі келеді — қашан өтетінін содан алыңыз. Kaspi терезені өзгертсе, сіздің кодыңыз өзі бейімделеді.
QR-дың терезесі өтіп кетсе, клиент сканерлегенде «кейінірек көріңіз» деген хабар көреді. Бұл бөлек мақалада: QR «кейінірек көріңіз» деп тұр.
Біз оны қалай тексереміз
Клиент төлегенін Kaspi бізге өзі хабарламайды — біз счёттардың күйін өзіміз сұрап отырамыз. Тексеруші процесс әр үш секунд сайын жүреді, ал әр счёт жасына қарай әртүрлі жиілікпен тексеріледі:
| Счёттың жасы | Тексеру жиілігі |
|---|---|
| 3 минутқа дейін | Әр айналымда |
| 30 минутқа дейін | 20 секунд сайын |
| Одан ескі | 90 секунд сайын |
Кезек ең жаңа счёттан басталады — яғни дәл қазір кассада тұрған клиенттің төлемі бірінші кезекте тексеріледі. Іс жүзінде клиент төлегеннен кейін webhook әдетте бес секунд ішінде келеді.
Ескертпе: Kaspi төлемнің дәл уақытын бермейді. Сондықтан «клиент растағаннан бізге жеткенге дейін қанша кетті» дегенді Kaspi деректері бойынша өлшеу мүмкін емес.
Қашан алаңдау керек
Pending-тің өзі мәселе емес. Мыналар мәселе:
- Барлық счёт pending-те қалып, бірде-біреуі paid болмаса. Тест режимі қосулы болуы мүмкін: Клиентке төлем келмей жатыр.
- Клиент «төледім» дейді, ал счёт әлі pending. Бір минут күтіңіз. Өзгермесе, Kaspi қосымшасындағы операцияны нақтылаңыз: төлем мүлдем басқа счётқа кеткен болуы мүмкін.
- Счёт paid болды, бірақ сізге webhook жетпеді. Бұл бөлек мәселе: Webhook келмей жатыр.
- Pending счёттар жүздеп жиналып қалса. Кодыңыз төленбейтін счёттарды артық шығарып жатқан болуы мүмкін.
Не істемеу керек
- Pending счётты «төленген» деп есептемеңіз. Тауарды немесе қызметті тек
paidкүйінен кейін беріңіз. - Бір клиентке қайта-қайта жаңа счёт жасамаңыз. Ескісі pending тұрғанда жаңасын жасасаңыз, клиент екеуін де төлеп жіберуі мүмкін.
- Күйді тым жиі сұрамаңыз. Біз оны өзіміз тексеріп отырмыз; тым жиі сұрау жиілік шектеуіне тіреледі.
- Pending счётты қайтаруға тырыспаңыз. Ол әлі төленбеген, қайтарар ақша жоқ.
Кеш келген төлем
expired немесе cancelled болып қалған счётқа ақша кешігіп келуі мүмкін. Ондайда сізге invoice.paid оқиғасы late: true белгісімен кейін де жетеді.
Бұл шын төлем — ақша Kaspi шотыңызда. Екі жолдың бірін таңдайсыз: қызметті беру немесе ақшаны қайтару. Ең дұрысы — өңдеушіңіз late белгісін бастапқыда-ақ ескеріп, ондай счёттарды бөлек тізімге шығарсын.
Жиі қойылатын сұрақтар
Pending счётты болдырмауға бола ма? Иә, POST /api/v1/invoices/{id}/cancel арқылы. Клиент әлі төлемеген болса, счёт жабылады.
Expired болған счётты қайта тірілтуге бола ма? Жоқ. Жаңа счёт жасайсыз.
Pending счёттар тарифтің лимитіне кіре ме? Айлық лимит жасалған счёттардың санымен есептеледі, төленгенімен емес.
Клиент QR-ды скандады, бірақ төлемеді — күйі өзгере ме? Жоқ, күйі тек нақты растаудан кейін paid болады. Сканерлеудің өзі төлем емес.
Sandbox-та pending-тен қалай шығаруға болады? POST /api/v1/invoices/{id}/simulate арқылы керекті күйді өзіңіз қоясыз. Бұл эндпоинт тек sandbox-та істейді.