Střízliv, neb je 6:26 ráno. Vzhůru již hodinu a půl. Po včerejšku zázrak, a o to se chci podělit.
Programoval jsem platební bránu na nákup voucherů na jakási „vyšetření moderními přístroji“ pro pražský podnik. Zadavatel si sám nainstaloval WordPress a nasadil vybranou šablonu, a můj job byl plugin pro platební bránu GoPay. Naprogramováno, na testovacím webu vše plně funkční, fajn. Jen jsem nerozuměl různým signálům od zadavatele, které mi došly až se spuštěním ostrého webu – na den později je nachystána mohutná reklamní kampaň. Na web tedy okamžitě mířily stovky až tisíce lidí, a do platební brány se futrovaly platební karty pod tlakem. Vše fungovalo, jak mělo, uff. Až do pondělí.
To byl svátek, s ivonkou jsme jej trávili konzumem, a zatímco si ona kdesi vybírala brýle, já koukám na SMS od zadavatele, že nefunguje platební brána. Kurva. Místo dokončení objednávky fatal error … z hlášky jsem rozpoznal, že mám sice chybu v implementaci, ale ta se projeví jedině v situaci, kdy nefunguje spojení se serverem platební brány. Zadavatel volal, a GoPay prý mělo přes noc odstávku, takže by to mohlo souviset s tím. Za dvě hodiny jsem byl doma, ošetřil chybovou hlášku, ale spojení s bránou nefungovalo dál, až se náhle vše rozběhlo a od jejich technické podpory přišla super odpověď „u nás bylo vše v pořádku, a už jsme to opravili“. Uff … jak se skrz můj kód točí desítky až stovky tisíc korun denně, tak to je o úplně jiné odpovědnosti.
A v úterý ve tři jsem si tak nějak říkal, že už jen pár drobností a půjdu od pc, a telefonát od zadavatele, že GoPay má s naším webem stále problém, a že se mi ozve jejich technik. A ten záhy volá, že jejich server nemůže kontaktovat můj notifikační skript, kam má předávat informace o výsledcích jednotlivých objednávek. Místo HTTP kódu 200 (vše OK) mu náš server odpoví HTTP 403 Forbidden (táhni do hajzlu, na tuto URL tě nepustím). Cože? Že by WP blokoval přímé volání URL v rámci jeho „obsahové“ slžoky? S tím jsem se den předtím setkal … ale nikoli. Až jsem našel nějaký pochybný antispamový plugin, který by tento robotický přístup mohl blokovat. Deaktivoval jsem jej, volám vesele na podporu, technik to zkouší, a vše při starém, kód 403. Kurva. Do toho vstupuje druhá věc – že kvůli těmto zmeškaným notifikacím jsou na webu desítky objednávek označeny jako neuhrazené i přesto, že je lidi na platební bráně korektně uhradili. Tak přece nebude problém, aby nám podpora všechna ta zmeškaná notifikační volání vyexportovala a poslala, jsou to nakonec jen delší URL, a my si je ručně odklikáme, čímž se visící objednávky potvrdí … no bude to problém, technik by je musel jednu po druhé ručně kopírovat. Je jich přes 600 …
Spásnou myšlenkou bylo to, že bych mohl něco najít v access logu (záznam všech přístupů na URL na webu). Tam jsem také našel všechny ty notifikační URL, které server odmítl přijmout. Aha, takže když dokážu z access logu vytáhnout všechny tyto zmeškané notifikace ve formě URL, tak je můžu ručně odklikat, a tak web ručně notifikovat o stavu jednotlivých objednávek. Ruční přístup na notifikační URL byl totiž v pořádku, ale když se o to pokusil robot platební brány, tak 403 fuck off…
Ale nejdřív jsem zavolal na hosting, jestli tam nemají nějaké roztodivné nastavení. Nic takového jim nepřipadalo reálné, ale že se na to podívají. Zatím jsem se snažil najít/naprogramovat nějaký nástroj, který by mi z access logý vytáhl ony zmeškané notifikace, ale to jsem po chvíli stejně vzdal … užitečnější bude, když do pluginu doprogramuji možnost vyřizovat objednávky ručně, nezávisle na výsledku operace na platební bráně. Kdyby to bylo tak snadné … mám ten plugin totiž rozdělený na dva – obecný plugin pro spojení s platební bránou, a pak druhý plugin jako nástavbu funkcí přímo pro daný web. A snad hodinu jsem jen přemýšlel o tom, jak to ideálně doplnit, aby na sobě zůstaly oba pluginy naprosto nezávislé (a já tedy mohl ten obecný používat nadále i na jiných webech) …
Nemluvě o tom, že z webu celý den chodí upozornění na selhavší transakce. Až jsem došel k tomu, že když někdo na webu 2× refreshuje objednávku, tak ta zůstane správně uložená jen jednou (a neduplikuje se), ale na platební bráně se založí dvě transakce. Na webu mám teď uloženu jednu transakci, ale z platební brány pak přijde info o druhé transakci … která v objednávkách neexistuje. Takže ještě mezi tím vším ošetřit tohle… protože to má GoPay blbě vyřešené. Podobně jako kdybyste se přišli dvakrát zeptat na prodejnu, kolik stojí jedna tatranka, a oni vám podruhé řekli jinou cenu, i když na té tatrance je pořád cenovka 9.90 Kč. Podobný případ.
A ozvali se z hostingu „Zkuste notifikaci nyní…“ … no, to jsem neměl jak, ale koukám, že v access logu se přístupy na notifikační skript objevily konečně s kódem 200, a že tedy úspěšně procházejí. Na dotaz, co hosting kde upravil, jsem odpověď nedostal.
Bylo devět hodin večer, a hlava se mi mohla rozskočit … po letech jsem ivonku poprosil o prášek na bolest, který jsou jinak jen „pro ženský“. Takových problémů, kdy jsem prakticky jen řešil chyby, které jsem nezpůsobil, a nemohl nijak ovlivnit…
Tak copak na mě čeká dneska … a za okny se rozednívá.
Připojte váš komentář