PHP implementácia modulu Tatrapay

Tatrapay je elektronická služba, ktorú môže obchodník využiť pre príjem platieb zo svojho elektronického obchodu. Viac detailov o službe nájdete na oficiálnej informačnej stránke Tatrapay. V poslednom kroku dokončenia objednávky je možné užívateľovi ponúknuť možnosť zaplatenia prostredníctvom Tatrapay služby. Predpokladom je pravdaže zmluva s bankou o poskytnutí služieb, pridelenie identifikačných údajov obchodníka a to: MID – číslo obchodníka a bezpečnostný kľúč. Bezpečnostný kľúč je dôverný údaj, ktorý ostáva zapísaný iba v PHP skriptoch a nesmie sa zasielať nezabezpečenými komunikačnými prostriedkami.

Tak, ako väčšina podobných služieb, aj tu je najpodstatnejší technický parameter bezpečnostný podpis. Tento podpis sa generuje na strane obchodníka, pričom v prostredí Tatrapay nadobúda znaky A-Z a čísla 0-9. Je to 32 znakov dlhý reťazec.

Bezpečnostný podpis sa generuje zreťazením povinných reťazcov a to:

MID – Číslo obchodníka
AMT – Celková suma na zaplatenie. Desatinná časť je oddelená bodkou
CURR – Mena v ktorej bude vykonaná transakcia, napr. 978 pre možnosť EUR
VS – Jednoznačný identifikátor platby, alebo tiež variabilný symbol platby
CS – Konštantný symbol
RURL – Návratová URL adresa, na ktorú banka presmeruje klienta po vykonaní platby
TIMESTAP – časový odtlačok pre platbu v tvare DDMMYYYYHHMISS (DD-deň, MM-mesiac, YYYY-rok, HH-hodina, MI-minúta, SS-sekunda).

Samotná hodnota TIMESTAP sa môže vygenerovať napríklad takto:

<?php
$timestamp = ''.date('d').''.date('m').''.date('Y').''.date('G').''.date('i').''.date('s').'';
?>

TIMESTAMP musí byť v intervale +/- 1 hodina voči UTC (GMT), to znamená nutnosť nastaviť v prostredí PHP parameter date_default_timezone_set na:

date_default_timezone_set('Europe/London')

Pokračuje sa tak, že z uvedeného reťazca sa vytvorí HASH algoritmom SHA1. Z vytvoreného HASHu sa vezme prvých 16 bajtov a zašifruje sa algoritmom AES256 pomocou vygenerovaného bezpečnostného kľúča, ktorý obchodník dostane od banky. Samotný bezpečnostný podpis je 16 bajtový bezpečnostný podpis, ktorý sa konvertuje do 32 bajtového reťazca, ktorý reprezentuje jeho zápis v hexadecimálnej sústave.

<?php
$key = '1234567890...'; // kod prideleny bankou
$stringToSign = $mid.$amt.$curr.$vs.$cs.$rurl.$timestamp;
$keyBytes = pack("H*" , $key); // konverzia do binárneho formátu
$signature = hash_hmac("sha256", $stringToSign, $keyBytes);
?>

Tento podpis sa následne na strane obchodníka interpretuje ako hodnota HMAC a môže sa spolu s povinnými parametrami posielať metódou GET, alebo vhodnejšou metódou POST. Nižšie je príklad formulára na zaslanie platby prostredníctvom POST metódy.

<form action="https://moja.tatrabanka.sk/cgi-bin/e-commerce/start/tatrapay" method="POST">
<input type="hidden" name="MID" value="<? echo $mid; ?>" />
<input type="hidden" name="AMT" value="<? echo $amt; ?>" />
<input type="hidden" name="CURR" value="<? echo $curr; ?>" />
<input type="hidden" name="VS" value="<? echo $vs; ?>" />
<input type="hidden" name="CS" value="<? echo $cs; ?>" />
<input type="hidden" name="RURL" value="<? echo $rurl; ?>" />
<input type="hidden" name="LANG" value="sk" />
<input type="hidden" name="AREDIR" value="1" />
<input type="hidden" name="TIMESTAMP" value="<? echo $timestamp ?>" />
<input type="hidden" name="HMAC" value="<? echo $signature; ?>" />
<input type="submit" value="Vykonať platbu" />
</form>

V prípade záujmu je možné poskytnúť hotový PHP skript v ktorom stačí iba zameniť jednotlivé premenné a služba môže okamžite bežať. Pre pomoc s nasadením služby Tatrapay do vášho elektronického obchodu, alebo inej aplikácie ma môžete kontaktovať.

PHP skript

excel

Pridať komentár k článku