Nový platební systém 2
Další dva týdny vývoje nového platebního systému jsou pryč a tak je čas se podívat se, co je hotového. Vyškrtli jsme prozatím podporu pro GoCardless, finalizovali proces placení a implementovali klienty pro GoPay a Fakturoid.
Hned z kraje bych chtěl říct, že implementace platebního systému je úplně jiný level než cokoli, co děláme se servery. Původní platební systém vznikl přes víkend a měl být dočasný, dokud nevymyslíme něco lepšího. Měli jsme toho hodně na vývoj a tak jsme volili zkratky kde to jen šlo. I tak byla implementace zbytečně složitá, podobně jako u správy kontejnerů. Pro shrnutí celý proces dobíjení kreditů, jediná možnost jak u nás teď platit, vypadala nebo spíš vypadá nějak takto:
Když dochází na účtu kredit, tak uživatel vygeneruje platbu, se kterou se zároveň ve Fakturoidu vytvoří zálohová (proforma) faktura. Celý proces platby pak běží ve Fakturoidu a nám jen přijde notifikace, že je vše ok a připíšeme kredit do peněženky v administraci.
Pak jednou za hodinu pouštíme skript, který koukne co běží a z té samé peněženky odečítá kredit. Je to superjednoduchý systém, který funguje, ale časem se stal překážkou. Možná vám hned naskočí myšlenka, že my vlastně nemůžeme zpětně dohledat, za co jsme kredit odečetli, což je jeden problém, ale kromě toho není úplně jednoduché tam vložit automatickou platbu kartou.
Můžeme tam třeba dát nějakou částku, kdy dojde k dobití kreditu, ale tento proces může trvat i pár dní a tak jaká částka by to měla být, pokud nemá být moc vysoká a zároveň, uživatel by se před uhrazením neměl dostat do mínusu a během té doby může přidávat nebo rušit služby.
Do toho všeho je ještě potřeba uživatele informovat o tom, že je potřeba dobít kredit a pokud už je v procesu automatické dobíjení, tak má dostat takový uživatel echo o tom, že už dochází kredit když vlastně ví o tom, že ho dobíjí? A pokud kredit nakonec nezaplatí nebo platba nějak selže, máme mu posílat další emaily že kredit stále dochází nebo už nemá o službu zájem a máme účet raději zrušit? Superjednoduchý systém se zničeho nic stane systémem s mnoha neznámými.
A tak jsme se rozhodli udělat placení o něco složitější, ale zároveň předvídatelnější. Mrkněte na to:
Je jednoduché se v tomto obrázku ztratit, tak to trochu zjednodušíme. Na začátku každého měsíce se vezmou sesbíraná data o běžících službách a vytvoří se tzv. účet, který se nějakým způsobem zaplatí.
Sbírání dat bude probíhat na straně administrace a nebo nějaké microservice, která bude přistupovat k databázi administrace. V téhle části si nejsme jisti, ale nový platební systém už má svůj konec hotov. Pak přijde konec měsíce a někdy v noci 1. den nového měsíce dojde k finalizování účtu měsíce předchozího. Tento pak bude otevřený k dalšímu procesování jinými částmi systému.
Tou první části je kreditová peněženka, ze které se zaplatí buď celá částka a nebo jen její část. Když se tak stane, přejdeme na druhý krok, kde se použije registrovaná karta na zaplacení zbytku. Pokud karta není registrovaná, a jako že to ze začátku bude většina případů, zasekneme se ve smyčce, kterou může rozseknout uživatel tím, že buď registruje kartu a nebo dobije kredit.
Proti původní myšlenka, kdy mělo jít zaplatit měsíční účet buď kreditem, automaticky kartou a nebo manuálně převodem na účet či kartou, vzala prozatím za své. Platební systém se už teď stává mnohem komplexnější, než jsme původně čekali a protože s každou možnou variantou platby se systém ještě víc komplikuje, rozhodli jsme se ho co nejvíce zjednodušit a prakticky ponechat původní proces pro kredit a zakomponovat ho do nového procesu placení.
Ponechání původního procesu neznamená, že použijeme současný kód. Tak jako tak systém přepisujeme od základů, ale chceme nechat to co funguje a přidat do toho co nám chybí.
Jak jsme na tom
Když jsme nedávno nasadili nový backend pro kontejnery. Dal by se vývoj a migrace označit za super rychlé. Vše se stalo prakticky během jednoho měsíce a i když výsledek není perfektní, funguje parádně. Platební systém je na druhou stranu totální opak toho, co byl tento backend.
Zaskočila nás složitost celého problému a vůbec se nedivíme, že spousta firem posílá pouze fakturu, kterou je nutné ručně zaplatit, včetně nás. Implementace tedy ještě chvíli potrvá, hlavně abychom se ujistili, že vše funguje jak má a připravili sadu testů, které do produkce nepustí zjevné chyby.
Stav celé implementace by se dal shrnout takto:
- Klienti pro GoPay a Fakturoid jsou hotovi,
- sbírání dat pro měsíční účet také,
- máme API pro správu měsíčních účtů,
- a API pro správu uživatelských účtů,
- máme první patche pro administrační rozhraní,
- začali jsme na procesech, které nastanou po finalizaci měsíčního účtu,
- chybí možnost registrace karty,
- a chybí všechno co se týká kreditů.
Ještě toho tedy chybí hodně a jsme daleko od dokončení. Uvidíme ale jak to půjde a určitě vám zase dáme vědět jak jsme na tom.
Úvodní obrázek je od Hans Braxmeier z Pixabay.