Přeskočit na hlavní obsah

Push notifikace

Předání výsledku platby na pozadí

Push notifikace slouží k předání výsledku platby na pozadí z platební brány Comgate na server obchodníka. Tato metoda využívá HTTP požadavek (webhook) na definovanou adresu (endpoint), který upozorní na změnu stavu platby, například při úspěšném dokončení, autorizaci, expiraci nebo zrušení platby.

Bezpečné ověření stavu platby

Skutečný stav platby je doporučeno vždy ověřit prostřednictvím volání API metody /status. Toto ověření zaručuje spolehlivost a bezpečnost, protože informace přijaté push notifikací nemusí vždy přesně odrážet finální stav platby.

Nastavení endpointu pro push notifikace

Adresu, na kterou mají být push notifikace zasílány, lze nastavit v klientském portále. Doporučuje se nastavit adresu, která podporuje HTTPS, aby byla zajištěna bezpečnost komunikace.

Parametry push notifikace

Výsledek platby je předáván jako HTTP POST požadavek s následujícími parametry:

ParametrTypPovinnýPopis
transIdstringAUnikátní ID transakce
merchantstringAIdentifikátor e-shopu v systému Comgate
testbooleanAtrue pro testovací platbu, false pro produkční
priceintegerACena za produkt v haléřích nebo centech
currstringAKód měny dle ISO 4217
labelstringAKrátký popis produktu (1-16 znaků)
refIdstringAReference platby (např. variabilní symbol nebo číslo objednávky)
payerIdstringNIdentifikátor plátce v systému e-shopu
payerNamestringNJméno účtu plátce
payerAccstringNČíslo účtu plátce
methodstringNPoužitá metoda platby
accountstringNIdentifikátor bankovního účtu e-shopu
emailstringAKontaktní e-mail plátce
phonestringNKontaktní telefon plátce
namestringNIdentifikátor produktu pro vyhledávání ve statistikách
secretstringABezpečnostní klíč pro komunikaci
statusstringAAktuální stav transakce (PAID, CANCELLED, AUTHORIZED)
feestringNPoplatek za transakci (pokud je nastaven)
fullNamestringAJméno a příjmení plátce
billingAddrCitystringNFakturační adresa - město
billingAddrStreetstringNFakturační adresa - ulice
billingAddrPostalCodestringNFakturační adresa - PSČ
billingAddrCountrystringNFakturační adresa - země (ISO 3166 alpha-2)
deliverystringNZpůsob doručení (HOME_DELIVERY, PICKUP, ELECTRONIC_DELIVERY)
homeDeliveryCitystringNDoručovací adresa - město
homeDeliveryStreetstringNDoručovací adresa - ulice
homeDeliveryPostalCodestringNDoručovací adresa - PSČ
homeDeliveryCountrystringNDoručovací adresa - země (ISO 3166 alpha-2)
categorystringNKategorie produktu (PHYSICAL_GOODS_ONLY, OTHER)
Upozornění

Výsledky předané přes notifikaci nebo přesměrováním v URL se nedoporučuje považovat za plně důvěryhodné, jelikož tyto metody mohou být náchylné k manipulaci. Skutečný stav platby je doporučeno vždy ověřit prostřednictvím volání API metody /status společně s obdrženým transId.

Parametry odpovědí

ParametrTyppovinnýPopis
codeintegerANávratový kód metody a popis chyby:
systém očekává HTTP kód 200, v případě, že výsledek platby byl v pořádku přijat..

Push notifikace očekává potvrzení přijetí formou HTTP kódu 200. V opačném případě je notifikace opakovaně zasílána (až 1000 pokusů). Pokud i po opakovaných pokusech nedojde k úspěšnému předání, je vygenerována chybová zpráva a odeslána na kontaktní e-mail obchodníka.

Tip: Pokud přijetí notifikace není potvrzeno, ujistěte se, že endpoint vrací kód 200. Také můžete nastavit e-mail pro zasílání chyb v sekci Integrace v klientském portále, kde můžete definovat více e-mailů oddělených středníkem.

Příklad předání výsledku platby na pozadí – HTTP request pomocí 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

Příklad předání výsledku platby na pozadí – HTTP response

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

Komunikace mezi systémem Klienta a serverem platební brány je zabezpečena pomocí hesla a IP whitelistu. Přístup musí být povolen pouze z IP adresy serveru platební brány. Rozsahy IP adres jsou definovány v sekci Zabezpečení. Je povinné použít protokol HTTPS, který znemožňuje prozrazení hesla při případném odposlouchávání komunikace. Heslo je předáváno jako POST parametr (nikoliv GET parametr) proto, aby se neukládalo v logu komunikace webového serveru.

E-shop na svojí straně zajistí, že zboží (služba) poskytnuté v rámci zaplacené transakce (identifikované pomocí unikátního transaction ID) bude vydáno Plátci pouze jednou (i při opakovaném předání výsledku stejné platby na server Klienta).

Implementace a ukázka kódu

Ukázka endpointu pro příjem push notifikací

<?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";
}
}
?>