Čo musí brána vedieť pre slovenský trh
Než porovnáte poplatky, overte si funkčné minimum. Bez neho je aj najlacnejšia brána drahá, lebo vás stojí nedokončené objednávky:
- Bankové tlačidlá slovenských bánk — TatraPay, VÚB ePlatby, Platba cez Slovenskú sporiteľňu, ČSOB a ďalšie. Ide o okamžitý prevod z internet bankingu a na Slovensku je to dlhodobo obľúbený spôsob platby.
- Platba kartou vrátane 3-D Secure podľa PSD2 — bez silného overenia zákazníka dnes transakcia neprejde.
- Apple Pay a Google Pay — na mobile výrazne skracujú cestu k dokončeniu platby.
- Vrátenie platby cez API — ak refundácie riešite ručne cez administráciu brány, pri desiatkach vratiek mesačne to prestane byť únosné.
- Webhooky — brána musí vedieť váš systém sama informovať o zmene stavu platby. Bez toho neviete spoľahlivo potvrdiť objednávku.
- Testovacie prostredie so stabilnými testovacími údajmi.
Prehľad možností
GoPay
Česko-slovenské riešenie, ktoré je v regióne najrozšírenejšie. Pokrýva slovenské aj české bankové tlačidlá, karty, Apple Pay, Google Pay a odložené platby. Má hotové moduly pre bežné e-shopové platformy a dokumentované REST API. Pre typický slovenský e-shop s presahom do Česka je to bezpečná voľba — zákazník nájde svoju banku bez ohľadu na to, na ktorej strane hranice je.
Besteron
Slovenská brána zameraná práve na domáci trh. Silná stránka je pokrytie slovenských bánk a zrozumiteľné rozhranie pre prevádzkovateľa. Ak predávate výlučne na Slovensku a nepotrebujete medzinárodné platobné metódy, býva to poplatkovo výhodná možnosť s podporou v slovenčine.
TrustPay
Platobná inštitúcia so sídlom v Bratislave, ktorá kombinuje domáce bankové prevody s európskym dosahom. Zaujímavá je pre projekty, ktoré predávajú do viacerých krajín EÚ, ale zároveň chcú mať slovenské bankové tlačidlá a zmluvný vzťah pod slovenským právom.
24-pay a bankové riešenia
Okrem samostatných brán ponúkajú vlastné platobné riešenia aj banky. Výhodou býva nižší poplatok pri vyššom obrate a rýchle pripísanie prostriedkov, ak máte účet v tej istej banke. Nevýhodou je užšia ponuka platobných metód a dokumentácia, ktorá nebýva na úrovni čisto technologických poskytovateľov.
Stripe
Technicky najlepšie spracované API na trhu, vynikajúca dokumentácia, predplatné a opakované platby ako natívna funkcia. Slovenské bankové tlačidlá však neponúka — zákazník platí kartou, prípadne cez Apple/Google Pay. Pre SaaS produkt, predaj digitálneho obsahu alebo predplatné je Stripe prvá voľba. Pre bežný e-shop s domácimi zákazníkmi ho odporúčam len v kombinácii s druhou bránou pre bankové platby. Integrácii Stripu sa venujem v samostatnom článku o Stripe v Laraveli.
PayPal
Ako jediná metóda nestačí, ako doplnková má zmysel pri predaji do zahraničia. Pre slovenských zákazníkov je to okrajový spôsob platby a poplatková štruktúra je pri bežnom tovare nevýhodná.
Štruktúra nákladov: kde sa skrývajú peniaze
Porovnávať brány podľa jedného percenta z transakcie je zavádzajúce. Reálny náklad tvorí viacero položiek:
- Percento z transakcie — líši sa podľa metódy. Bankový prevod býva lacnejší než karta.
- Fixná suma za transakciu — pri nízkych sumách objednávok je to dominantná položka. Pri priemernej objednávke 12 EUR má fixný poplatok väčší dopad než percento.
- Mesačný paušál — niektoré brány ho majú, iné nie.
- Poplatok za vrátenie platby — ak máte vysokú mieru vratiek (móda, obuv), pýtajte sa na to výslovne.
- Frekvencia zúčtovania — denné pripísanie verzus týždenné je rozdiel v prevádzkovom kapitále, nie v poplatkoch. Pri obrate v desiatkach tisíc mesačne to cítiť.
- Cena integrácie — hotový modul verzus vývoj na mieru. Jednorazová položka, ale nie zanedbateľná.
Praktický postup: vezmite si posledných tristo objednávok, vypočítajte priemernú sumu a podiel platobných metód. Až potom nechajte poskytovateľov spočítať ponuku na týchto číslach.
Ako integráciu postaviť správne
Bez ohľadu na zvolenú bránu je architektúra rovnaká a má niekoľko pravidiel, ktorých porušenie sa vypomstí.
Nikdy nedôverujte návratu z prehliadača
Po platbe brána presmeruje zákazníka späť na váš web s informáciou o výsledku. Táto informácia je iba orientačná — zákazník môže okno zavrieť skôr, prehliadač spadne alebo niekto URL upraví. Jediným zdrojom pravdy je server-to-server notifikácia (webhook) alebo priame overenie stavu cez API:
// routes/web.php — návrat zákazníka len informuje
Route::get('/platba/navrat/{objednavka}', function (Objednavka $objednavka) {
// stav NEURČUJEME podľa parametrov v URL
return view('platba.cakame', ['objednavka' => $objednavka]);
});
// routes/api.php — webhook rozhoduje o stave
Route::post('/platba/notifikacia', NotifikaciaPlatbyController::class)
->withoutMiddleware(VerifyCsrfToken::class);
Overte podpis notifikácie
Webhook endpoint je verejne dostupný. Bez overenia podpisu môže ktokoľvek poslať požiadavku a označiť objednávku ako zaplatenú:
public function __invoke(Request $request): Response
{
$podpis = $request->header('X-Signature', '');
$ocakavany = hash_hmac('sha256', $request->getContent(), config('platby.tajny_kluc'));
if (! hash_equals($ocakavany, $podpis)) {
Log::channel('bezpecnost')->warning('Neplatný podpis notifikácie platby', [
'ip' => $request->ip(),
]);
return response('', 403);
}
// ... spracovanie
return response('', 200);
}
Použite hash_equals(), nie porovnanie cez ==. Bežné porovnanie reťazcov je zraniteľné voči časovému útoku.
Počítajte s tým, že notifikácia príde viackrát
Brány notifikácie opakujú, kým nedostanú odpoveď 200. Ak vaša aplikácia nie je idempotentná, zákazník dostane tri potvrdzovacie e-maily a sklad sa odpíše trikrát:
DB::transaction(function () use ($objednavka, $idPlatby) {
$objednavka = Objednavka::lockForUpdate()->find($objednavka->id);
if ($objednavka->stav === 'zaplatena') {
return; // už spracované, nerobíme nič
}
$objednavka->update([
'stav' => 'zaplatena',
'id_platby' => $idPlatby,
'zaplatene_at' => now(),
]);
OdosliPotvrdenie::dispatch($objednavka);
});
Sumy držte v celých centoch
Nikdy neukladajte peňažné sumy ako float. Rozdiel jedného centu po zaokrúhlení spôsobí, že sa suma objednávky nezhoduje so sumou platby a párovanie zlyhá. Ukladajte celé čísla v centoch a formátujte až pri zobrazení.
Logujte celý tok
Pri reklamácii platby potrebujete vedieť, čo presne sa dialo. Ukladajte identifikátor transakcie od brány, čas, sumu, stav a surové telo notifikácie do samostatnej tabuľky. Kompletný prehľad o tom, ako logovanie a monitoring postaviť, nájdete v článku o monitoringu PHP aplikácie.
Odporúčanie podľa typu projektu
- E-shop pre slovenských zákazníkov — brána s domácimi bankovými tlačidlami (GoPay alebo Besteron), doplnená kartami a Apple/Google Pay.
- E-shop so SK aj CZ zákazníkmi — GoPay pokryje obe krajiny jednou integráciou.
- Predplatné, SaaS, digitálny obsah — Stripe. Správa opakovaných platieb a zmien predplatného je tam vyriešená lepšie než kdekoľvek inde.
- Predaj do celej EÚ — TrustPay alebo kombinácia domácej brány a Stripu, podľa podielu zahraničných objednávok.
- Vysoký obrat, nízka priemerná objednávka — rokujte hlavne o fixnom poplatku za transakciu, percento je vtedy druhoradé.
Na čo sa nezabudnúť pred spustením
- Celý platobný tok otestovaný v testovacom režime vrátane zamietnutej platby a vypršania časového limitu
- Webhook overuje podpis a je idempotentný
- Objednávka sa potvrdzuje výhradne na základe server-to-server notifikácie
- Vrátenie platby funguje cez API, nie len ručne v administrácii
- Sumy sú uložené v celých centoch
- Platobné metódy sú uvedené v obchodných podmienkach vrátane lehoty vrátenia peňazí
- Prevádzkovateľ má zmluvu a prístup do administrácie brány na svoje meno, nie na meno dodávateľa
- Účtovné zaradenie tržieb a prípadné povinnosti evidencie tržieb konzultované s účtovníkom