Skip to main content

Push notifikácie

Prenos výsledku platby na pozadí

Push notifikácie slúžia na prenos výsledku platby na pozadí z platobnej brány Comgate na server obchodníka. Táto metóda využíva HTTP požiadavku (webhook) na definovanú adresu (endpoint), ktorá upozorní na zmenu stavu platby, napríklad pri úspešnom dokončení, autorizácii, expirácii alebo zrušení platby.

Bezpečné overenie stavu platby

Skutočný stav platby je odporúčané vždy overiť prostredníctvom volania API metódy /status/. Toto overenie zaručuje spoľahlivosť a bezpečnosť, pretože informácie prijaté push notifikáciou nemusia vždy presne odrážať finálny stav platby.

Nastavenie endpointu pre push notifikácie

Adresu, na ktorú majú byť push notifikácie zasielané, je možné nastaviť v klientskom portáli. Odporúča sa nastaviť adresu, ktorá podporuje HTTPS, aby bola zabezpečená bezpečnosť komunikácie.

Parametre push notifikácie

Výsledok platby je predávaný ako HTTP POST požiadavka s nasledujúcimi parametrami:

ParameterTypPovinnýPopis
transIdstringAUnikátne ID transakcie
merchantstringAIdentifikátor e-shopu v systéme Comgate
testbooleanAtrue pre testovaciu platbu, false pre produkčnú
priceintegerACena za produkt v halieroch alebo centoch
currstringAKód meny podľa ISO 4217
labelstringAKrátky popis produktu (1-16 znakov)
refIdstringAReferencia platby (napr. variabilný symbol alebo číslo objednávky)
payerIdstringNIdentifikátor platcu v systéme e-shopu
payerNamestringNNázov účtu platcu
payerAccstringNČíslo účtu platcu
methodstringNPoužitá metóda platby
accountstringNIdentifikátor bankového účtu e-shopu
emailstringAKontaktný e-mail platcu
phonestringNKontaktný telefón platcu
namestringNIdentifikátor produktu na vyhľadávanie v štatistikách
secretstringABezpečnostný kľúč pre komunikáciu
statusstringAAktuálny stav transakcie (PAID, CANCELLED, AUTHORIZED)
feestringNPoplatok za transakciu (ak je nastavený)
fullNamestringAMeno a priezvisko platcu
billingAddrCitystringNFakturačná adresa - mesto
billingAddrStreetstringNFakturačná adresa - ulica
billingAddrPostalCodestringNFakturačná adresa - PSČ
billingAddrCountrystringNFakturačná adresa - krajina (ISO 3166 alpha-2)
deliverystringNSpôsob doručenia (HOME_DELIVERY, PICKUP, ELECTRONIC_DELIVERY)
homeDeliveryCitystringNDoručovacia adresa - mesto
homeDeliveryStreetstringNDoručovacia adresa - ulica
homeDeliveryPostalCodestringNDoručovacia adresa - PSČ
homeDeliveryCountrystringNDoručovacia adresa - krajina (ISO 3166 alpha-2)
categorystringNKategória produktu (PHYSICAL_GOODS_ONLY, OTHER)
Upozornenie

Výsledky predané cez notifikáciu alebo presmerovaním v URL sa neodporúča považovať za úplne dôveryhodné, keďže tieto metódy môžu byť náchylné na manipuláciu. Skutočný stav platby je odporúčané vždy overiť prostredníctvom volania API metódy /status/sk spolu s obdržaným transId.

Parametre odpovedí

ParameterTypPovinnýPopis
codeintegerANávratový kód metódy a popis chyby:
systém očakáva HTTP kód 200, ak bol výsledok prijatý úspešne

Push notifikácie očakávajú potvrdenie prijatia formou HTTP kódu 200. V opačnom prípade je notifikácia opakovane zasielaná (až 1000 pokusov). Ak ani po opakovaných pokusoch nedôjde k úspešnému doručeniu, je vygenerovaná chybová správa a odoslaná na kontaktný e-mail obchodníka.

Tip: Ak nie je potvrdené prijatie notifikácie, uistite sa, že endpoint vracia kód 200. Môžete nastaviť e-mail pre zasielanie chýb v sekcii Integrácia v klientskom portáli, kde môžete definovať viac e-mailov oddelených bodkočiarkou.

Príklad prenosu výsledku platby na pozadí – HTTP požiadavka pomocou cURL

curl -X POST -i --data "merchant=merchant_com&test=false&price=10000&curr=CZK&label=Beatles%20-%20Help&refId=2010102600&method=CARD&email=info%40customer.com&phone=%2B420123456789&transId=AB12-EF34-IJ56&secret=ZXhhbXBsZS5jb206QUJDeHl6&status=PAID" https://example.com/handler.php

Príklad prenosu výsledku platby na pozadí – HTTP odpoveď

HTTP/1.1 200 OK
content-type: application/x-www-form-urlencoded; charset=UTF-8

Komunikácia medzi systémom Klienta a serverom platobnej brány je zabezpečená pomocou hesla a IP whitelistu. Prístup musí byť povolený iba z IP adresy servera platobnej brány. Rozsahy IP adries sú definované v sekcii Zabezpecenie. Je povinné používať protokol HTTPS, ktorý znemožňuje odhalenie hesla pri prípadnom odpočúvaní komunikácie. Heslo je predávané ako POST parameter (nie GET parameter) preto, aby sa neukladalo v logu komunikácie webového servera.

E-shop na svojej strane zaistí, že tovar (služba) poskytnutý v rámci zaplatenej transakcie (identifikovanej pomocou unikátneho transaction ID) bude vydaný Platcovi iba raz (aj pri opakovanom prenose výsledku tej istej platby na server Klienta).

Implementácia a Ukážka Kódu

Ukážka Endpointu na Príjem Push Notifikácií

<?php
// Webhook endpoint for push notification
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Load data from push notification using POST (x-www-form-urlencoded) or REST (JSON)

// POST method (x-www-form-urlencoded)
parse_str(file_get_contents('php://input'), $data);

// REST method (JSON)
// $data = json_decode(file_get_contents('php://input'), true);

if (isset($data['transId'])) {
$paymentId = $data['transId'];

// Prepare headers and parameters for payment verification
$headers = [
'Content-Type: application/x-www-form-urlencoded',
'Accept: application/x-www-form-urlencoded',
];
$request_params = [
'merchant' => '123456',
'transId' => $paymentId,
'secret' => 'gx4q8OV3TJt6noJnfhjqJKyX3Z6Ych0y',
];

// Initialize cURL for API call
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://payments.comgate.cz/v1.0/status');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($request_params));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

try {
// Execute cURL request
$response = curl_exec($ch);
if ($response === false) {
throw new Exception(curl_error($ch), curl_errno($ch));
}
// Output API response for verification
print_r($response);
} catch (Exception $e) {
print_r($e->getMessage());
} finally {
curl_close($ch);
}

// Respond to push notification
http_response_code(200);
echo "OK";
} else {
http_response_code(400);
echo "Bad Request";
}
}
?>