<?php
$mid = "";	// MID dodá banka po podpise zmluvy
$kluc = "";	// bezpečnostný kľúč dodá banka po podpise zmluvy

$retazec = $_GET['AMT'] . $_GET['CURR'] . $_GET['VS'] . $_GET['RES'] . $_GET['AC'] . $_GET['TRES'] . $_GET['CID'] . $_GET['TID'] . $_GET['TIMESTAMP']; // reťazec hodnôt parametrov pre vytvorenie HMAC
$hmac = hash_hmac("sha256", $retazec, pack('A*', pack('H*', $kluc))); // výpočet autentifikačného kódu HMAC

// v testovacej verzii s MID 9999 je potrebné použiť tento certifikát ($_GET['ECDSA_KEY'] obsahuje hodnotu 1, preto $ecdsa[1])
$ecdsa[1] = "-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEozvFM1FJP4igUQ6kP8ofnY7ydIWksMDk1IKXyr/T
RDoX4sTMmmdiIrpmCZD4CLDtP0j2LfD7saSIc8kZUwfILg==
-----END PUBLIC KEY-----";

// v ostrej prevádzke s MID dodané bankou je potrebné si vždy pri overovaní platby stiahnuť certifikáty z url adresy
// https://moja.tatrabanka.sk/e-commerce/ecdsa_keys.txt a skontrolovať ich STATUS, zároveň uložiť každý jeden certifikát
// do poľa ($ecdsa[1], $ecdsa[2] a $ecdsa[3]), certifikát vždy začína -----BEGIN PUBLIC KEY----- a končí -----END PUBLIC KEY-----

// overenie HMAC reťazca v návratovej URL z platobného portálu banky s našim čo sa vyššie vygeneroval v premennej $hmac
// musia sa zhodovať, ináč je odpoveď vyhodnotená ako podozrivá a obchodník je povinný kontaktovať banku za účelom preverenia výsledku spracovania platby
if ($_GET['HMAC'] == $hmac) {
	// overenie digitálneho podpisu ECDSA, certifikát sa vyberá na základe hodnoty v $_GET['ECDSA_KEY'] a overí sa podpis s daným certifikátom
	$overenie_podpisu = openssl_verify(pack('A*', $retazec) . $hmac, pack("H*", $_GET['ECDSA']), $ecdsa[$_GET['ECDSA_KEY']], "sha256");
}

if ($overenie_podpisu == 1 && $_GET['RES'] == "OK") {
	// platba prebehla úspešne a môže sa v aplikácií obchodníka označiť za uhradenú
}

// $_GET['RES'] môže obsahovať aj hodnotu FAIL, čo znamená, že platba nebola vykonaná, alebo nastala chyba pri spracovaní platby