# Zabezpečenie Checkoutu (/sk/online/security/checkout_security)



Tapaya hostuje polia pre kartu, tokenizáciu, autentifikáciu karty aj samotné zaťaženie karty, takže vaše systémy nikdy nepracujú priamo s údajmi o karte. Na vás zostáva server, ktorý vytvára platby a rozhoduje, kedy je objednávka zaplatená. Tieto pravidlá platia pre [hostovaný Checkout](/online/integration/hosted_checkout) aj pre [vložené platby](/online/integration/embedded_checkout).

Ako Tapaya narába s údajmi o držiteľoch kariet a s osobnými údajmi, sa dozviete v časti [Ochrana údajov a súkromia](/compliance/data_protection_and_privacy).

## Uchovávajte kľúče na serveri [#keep-keys-on-the-server]

* Checkout kľúč obchodníka alebo Secret key organizácie ukladajte iba do konfigurácie na strane servera. Ani jeden nepatrí do kódu v prehliadači, do balíkov mobilných aplikácií ani do systému na správu verzií. Do prehliadača sa dostane iba publishable key a client secret platby.
* Checkout API obchodníka volajte zo svojho serverového prostredia. Tieto požiadavky nespúšťajte v prehliadači zákazníka.
* Checkout kľúč obchodníka má prístup iba k svojmu obchodníkovi. Vlastnému backendu obchodníka odovzdajte tento kľúč, nikdy nie Secret key vašej organizácie.
* Secret key organizácie má oprávnenia v rámci celej organizácie. V režime platformy ho posielajte s `X-Tapaya-Merchant-Token` v každej požiadavke; API overí, že obchodník patrí do organizácie daného kľúča. Pozrite si [autentifikáciu Checkoutu](/online/integration/api_integration#authentication).
* Kľúče obchodníka sa zobrazia iba raz a ukladajú sa len ako hash. Kľúč, pri ktorom máte podozrenie na únik, zneplatnite, ale až potom, ako vytvoríte jeho náhradu.

## Spravujte objednávku na svojom serveri [#own-the-order-on-your-server]

* Celkovú sumu objednávky počítajte na svojom serveri a objednávku uložte skôr, ako vytvoríte reláciu alebo pokus o platbu.
* Sumy, menu a ID objednávok čítajte z uloženej snímky objednávky. Neprijímajte náhradné hodnoty odoslané prehliadačom.
* Pri vložených platbách naviažte svoje endpointy `prepare` a `submit` na autentifikovaný checkout alebo na podpísanú HTTP-only cookie a pri požiadavkách, ktoré menia údaje, overujte ich origin.

## Pred vybavením objednávky overte platbu [#verify-before-you-fulfill]

Presmerovanie prehliadača, návšteva vašej URL úspechu, parametre dopytu, návratové cookies a správy z prehliadača sú navigačné údaje. Žiadne z nich platbu nedokazuje.

* Načítajte reláciu zo svojho servera a porovnajte jej referenciu objednávky, sumu, menu a stav platby s uloženou objednávkou.
* Objednávku vybavte iba vtedy, keď táto kontrola potvrdí `paymentStatus: successful`. Samotná odpoveď HTTP 200 platbu nedokazuje.
* Vybavenie objednávky zaznamenávajte atomicky, aby opakované návraty alebo kontroly stavu nemohli vybaviť tú istú objednávku dvakrát.
* Ak je relácia stále v stave `unpaid` alebo sa ju nepodarí načítať, ponechajte si ID relácie a kontrolu zopakujte s obmedzeným počtom pokusov. Nevytvárajte ďalšiu reláciu len preto, že výsledok tej prvej je neznámy: nová relácia pre objednávku nahradí tú starú. Webhooky zatiaľ nie sú k dispozícii, preto stav odsúhlasujte opakovaným dopytovaním (polling).

## Opakujte požiadavky bezpečne [#retry-safely]

* Pred vytvorením relácie uložte s objednávkou jedinečný idempotency key. Ak pri požiadavke vyprší časový limit alebo sa jej odpoveď stratí, zopakujte ju s rovnakým kľúčom a nezmeneným telom.
* Pre neistý výsledok negenerujte nový kľúč. Pravidlá opakovania nájdete v časti [Idempotencia a chyby](/online/integration/api_integration#idempotency-and-errors).

## Obmedzte originy pre presmerovanie [#restrict-redirect-origins]

* Do **Allowed websites** v [nastaveniach Checkoutu](/online/integration/checkout_settings) pridávajte iba originy svojich vlastných obchodov.
* Pre nasadené obchody používajte HTTPS. Prepísanie `successUrl` a `cancelUrl` pre jednotlivé relácie musí aj tak zodpovedať nakonfigurovanému originu.

## Nahlásenie bezpečnostného problému [#reporting-a-security-issue]

Ak máte podozrenie na zraniteľnosť alebo bezpečnostný incident, kontaktujte bezpečnostný tím podľa pokynov v časti [Kontakty](/support/contacts#security-issues).
