Ján Fečík


osobná stránka · blog

Dátum: streda, 17. júla 2019
Čas: 15:24:14, 1563369854, @600
Meniny má: Bohuslav, Božislav
IP adresa: 54.92.148.165
Slnečno - Bratislava
26 °C
Jasno
dnes
26 °C / 14 °C
Prevažne slnečno
štvrtok
27 °C / 16 °C
Prevažne oblačno
piatok
28 °C / 17 °C
Polojasno
sobota
30 °C / 19 °C

Služba CardPay cez Tatra banku v PHP

Na začiatok uvediem čo to vôbec je služba CardPay. Jedná sa o službu Tatra banky na realizáciu online platieb platobnou kartou (debetnou aj kreditnou) a umožňuje realizovať platby prostredníctvom URL odkazu, ktorý môže byť umiestnený na webovej stránke (napr. internetovom obchode). Komunikácia medzi obchodníkom a bankou je zabezpečená, pričom server banky notifikuje obchodníka o úspešnom a neúspešnom priebehu platby zákazníka. Zároveň umožňuje obchodníkovi overiť stav všetkých platieb realizovaných prostredníctvom služby CardPay a taktiež je možne prostredníctvom služby CardPay registrovať aj platobné karty pre službu ComfortPay.

Iron Maiden tento rok v Prahe  ·  Legacy Of The Beast World Tour

Keďže som bol na začiatku z dokumentácie od banky trochu zdesený, že o čo vôbec ide, tak teraz na to s odstupom času pozerám ako na úplne jednoduchú a triviálnu vec. Snáď niekomu príkladom a opisom trochu pomôžem, ak nad tým maturuje alebo je z toho vydesený a nevie sa pohnúť ďalej, lebo to vyzerá veľmi zložito alebo má iný problém.Služba CardPay cez Tatra banku v PHPPrimárnym využitím služby CardPay je platba za tovar alebo služby na internetových obchodoch. Služba CardPay umožňuje realizáciu platieb prostredníctvom transakcie s typom predaj a predautorizácia. Ja som sa osobne zaoberal len typom predaj, čo je štandardný typ transakcie pre realizáciu CardPay platieb platobnou kartou. Transakciu typu predautorizácia odporúča banka využívať v prípade predpokladu zvýšeného počtu žiadostí o storno platieb z dôvodu nedostupnosti tovaru či služby apod. Pri oboch typoch transakcií je možné registrovať platobné karty na službu ComfortPay. Túto službu som nepoužil, lebo v mojom prípade som nenašiel jej uplatnenie, ale nevylučujem, že ju niekedy v budúcnosti nepoužijem, lebo sa jedná o istý komfort pre zákazníka.

Priebeh platby funguje tak, že zákazník po nákupe tovaru alebo služieb v internetovom obchode klikne na symbol platby prostredníctvom CardPay. Server obchodníka presmeruje zákazníka prostredníctvom URL odkazu na server banky, ten overí platnosť a správnosť parametrov zaslaných prostredníctvom URL a zobrazí platobný portál CardPay. Tam zákazník zadá údaje zo svojej platobnej karty (číslo karty, expiráciu a CV kód) a potvrdí platbu, pričom nemôže zmeniť sumu, menu ani číslo transakcie.

Tu sa trochu pozastavím nad celým platobným portálom, lebo vyzerá ako z roku pána. Banka ktorá ma v podstate skoro neobmedzené zdroje ma problém pekne a moderne nadizajnovať portál na platenie. Je mi jasné, že je to kravina, ale tak aspoň keby to vyzeralo v dizajne celého webu banky aj s responzivitou by spravilo svoje. Toto sa ale netýka len Tatra banky, aj taká Slovenská sporiteľňa má ten svoj platobný portál ako z roku pána.

Takže zákazníkovi sa po zaplatení zobrazí informáciu o výsledku spracovania platby a ak daná požiadavka na realizáciu platby obsahovala aj požiadavku na registráciu karty pre službu ComfortPay, tak po úspešnom spracovaní platby služba CardPay zároveň vykoná registráciu karty pre službu ComfortPay. Samozrejme v prípade neúspešnej transakcie neprebehne ani registrácia pre službu ComfortPay. Zákazník môže potvrdiť manuálne návrat na stránku obchodníka alebo aplikácia automaticky presmeruje zákazníka späť na stránku obchodníka pokiaľ vygenerovaná URL pre platbu obsahovala toto nastavenie. Ja som osobne použil automatické presmerovanie, príde mi to ako väčší komfort pre zákazníka a hlavne sa zabezpečí aj spracovanie platby na strane obchodníka, pokiaľ overuje platby cez parametre v návratovej URL zo strany platobného portálu CardPay. Takže server obchodníka následne overí výsledok spracovania platby a má k dispozícii spomínanú kontrolu parametrov v návratovej URL po uhradení platby, kontrolu notifikačného emailu (pokiaľ bol vyplnený parameter REM v požiadavke) alebo cez online rozhranie pre získanie zoznamu CardPay transakcií. Ja som osobne použil možnosť prvú a to kontrolovanie parametrov.

Komunikácia medzi obchodníkom a bankou je prenášaná a šifrovaná protokolom SSL. Server obchodníka aj banky musí zabezpečí integritu zasielaných údajov prostredníctvom autentifikačného kódu HMAC a banka navyše odpoveď podpíše digitálnym podpisom ECDSA. Obchodník je povinný overiť si pravosť odpovede z banky overením správnosti HMAC a ECDSA podpisov. Ak sa HMAC zaslaný serverom banky nezhoduje s kódom vypočítaným serverom obchodníka alebo overenie ECDSA podpisu pomocou verejného kľúča nie je úspešné, tak je odpoveď vyhodnotená ako podozrivá a obchodník je povinný kontaktovať banku za účelom preverenia výsledku spracovania platby resp. inej odpovede.

Čo sa požiadaviek na implementáciu týka, tak presmerovanie na server banky nie je možné cez iframe kód. Obchodník môže požiadavky zasielať na URL služby CardPay metódou GET alebo POST cez protokol HTTPS a každá požiadavka musí obsahovať aj autentifikačný kód HMAC. Odpovede servera banky obsahujú autentifikačný kód HMAC a taktiež digitálny podpis ECDSA, ktoré je povinný obchodník pri každej platbe overiť. Obchodník od banky dostane pri podpise zmluvy svoj identifikátor MID a bezpečnostný kľúč.

Pre programátora má banka k dispozícii testovaciu stránku na adrese moja.tatrabanka.sk s testovacím MID a bezpečnostným kľúčom. Výpočet HMAC pre platbu a vytvorenie návratových parametrov sa dá použiť len táto testovacia stránka. Tam mi dosť vadilo, že to nemajú implementované priamo na platobný portál CardPay a nedá sa simulovať platba s nejakým testovacím číslom karty, expiráciou a CV kódom. To mi celkom dosť vadilo pri testovaní, že to nemali riešene takto.

Nižšie je na stiahnutie príklad v PHP, ktorý zabezpečuje vygenerovanie URL s parametrami pre správne presmerovanie na platobný portal CardPay. Stačí tam len vložiť identifikátor MID, bezpečnostný kľúč od banky a vyplniť správne jednotlivé parametre pre platbu. Je tam aj ukážka ako vygenerovať autentifikačný kód HMAC o ktorom to v podstate celé je.

STIAHNUŤ
VYTVORENIE PLATBY V PHP

Na záver ešte doplním príklad kontroly HMAC a ECDSA pri návrate z platobného portálu CardPay. Tam ide o to, že sa taktiež overí HMAC na základe návratových parametrov z platobného portálu CardPay a je tam zároveň aj overenie digitálneho podpisu ECDSA.

STIAHNUŤ
OVERENIE PLATBY V PHP


Článok bol zobrazený 257 krát a obsahuje 898 slov
Pridané 4. júla 2019