Eunoto
Implementace Vlastní implementace

Vlastní implementace ověření věku

Ověření Eunoto napojíte na jakýkoli web. Frontend vloží ověřovací okno, váš backend si po odeslání formuláře jen ověří výsledek přes API.

Než začnete

Získejte klíče v portálu

Zaregistrujte se do portálu pro e-shopy, přidejte svůj web a získáte dvojici klíčů. Každý má jiné použití — tajný klíč nikdy nedávejte do prohlížeče.

Portál pro e-shopy

Registrace i správa klíčů, zůstatku a faktur na jednom místě.

Otevřít portál

Veřejný klíč (PublicKey)

  • Vkládá se do HTML na frontendu.
  • Je veřejný — může ho vidět kdokoli ve zdrojovém kódu.
  • Identifikuje váš projekt při načtení ověřovacího okna.

Tajný klíč (PrivateKey)

  • Používá se výhradně na vašem serveru.
  • Nikdy nepatří do JavaScriptu, HTML ani do prohlížeče.
  • Ověřuje vaše volání vůči Eunoto API.

Implementace krok za krokem

  1. 1

    Frontend — vložte ověřovací okno

    Dovnitř formuláře vložte prvek s vaším veřejným klíčem. Před koncem stránky načtěte skript client.js, který sám vytvoří ověřovací okno (iframe) a po dokončení ověření doplní skrytý input eunotoUuid.

    Věkovou hranici nastavujeme na straně Eunota v nastavení vašeho projektu — ověřovat lze na libovolný věk, výchozí hodnota je 18. Z bezpečnostních důvodů ji nelze přepsat z vaší stránky: cokoli, co projde prohlížečem zákazníka, by si zákazník mohl sám snížit a ověření obejít. Potřebujete-li hranici změnit, napište nám.

    Atributem data-eunoto-lang můžete přepnout jazyk ověřovacího okna — podporujeme cs (výchozí), sk a en.

    Prvek data-eunoto umístěte dovnitř formuláře — skript do něj vloží ověřovací okno (iframe o rozměrech 300 × 75 px, počítejte s ním v layoutu) a skrytý input eunotoUuid, který se odešle spolu s formulářem. Skript client.js vkládejte vždy až za tento prvek a přímo do HTML stránky — nečeká na načtení DOM a při asynchronním vložení (např. přes Google Tag Manager) se nespustí.

    <form method="post" action="/verify">
        <input type="email" name="email" required>
        <input type="tel" name="phone" required>
    
        <!-- Ověřovací okno + skrytý input eunotoUuid doplní client.js automaticky -->
        <div data-eunoto="VAS_VEREJNY_KLIC"></div>
    
        <button type="submit">Odeslat</button>
    </form>
    
    <script src="https://www.eunoto.cz/js/client.js"></script>
  2. 2

    Volitelně — předvyplňte telefon a e-mail

    Máte-li ve formuláři pole s telefonem nebo e-mailem, označte je atributy data-eunoto-phone a data-eunoto-email. Hodnoty se předají do ověřovacího okna a nemusí je zákazník zadávat znovu.

    <input type="email" name="email" data-eunoto-email required>
    <input type="tel" name="phone" data-eunoto-phone required>
  3. 3

    Backend — ověřte výsledek přes API

    Po odeslání formuláře přijmete hodnotu eunotoUuid a zavoláte Eunoto API se svým soukromým klíčem v hlavičce Authorization. Odpověď obsahuje pole result a pole age, které udává, jaký věk byl u ověření skutečně vyžadován.

    Pokud je eunotoUuid prázdné, považujte zákazníka rovnou za neověřeného a API vůbec nevolejte. Za ověřeného ho považujte pouze tehdy, když result je přesně true.

    <?php
    
    $uuid = $_POST['eunotoUuid'] ?? '';
    if ($uuid === '') {
        // Ověření neproběhlo — objednávku nedokončujte
        exit;
    }
    
    $ch = curl_init('https://www.eunoto.cz/api/verification/' . $uuid);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Authorization: Bearer VAS_TAJNY_KLIC',
    ]);
    $data = json_decode(curl_exec($ch), true);
    curl_close($ch);
    
    if (($data['result'] ?? null) === true) {
        // Zákazník je ověřen — pokračujte v objednávce
    } else {
        // Ověření neproběhlo — objednávku nedokončujte
    }
    
    // $data['age'] obsahuje věk, který byl u tohoto ověření skutečně vyžadován

Pravidla implementace

  • Ověřujte při každé objednávce

    Výsledek ověření si neukládejte pro opakované použití — každý nákup potvrďte novým ověřením.

  • Tajný klíč držte na serveru

    Nikdy jej nevkládejte do JavaScriptu, HTML ani do veřejného repozitáře.

  • Provozujte web přes HTTPS

    Ověřovací okno se načítá zabezpečeně a na nezabezpečených doménách nefunguje.

  • Nezahlcujte API

    Výsledek ověřte jednou po odeslání formuláře, ne opakovaně při validaci polí. Platí limit 100 požadavků za 10 minut z jedné IP adresy.

  • Počítejte s cookie

    Ověřovací okno si ukládá first-party cookie eunoto_user s platností 24 hodin — úspěšné ověření tak zákazníkovi platí celý den. Cookie je pro fungování ověření nezbytná, v cookie liště ji uveďte mezi nezbytnými (funkčními).

API reference

Ověření výsledku probíhá jediným GET požadavkem. Funguje z libovolného jazyka — PHP, Node.js, Python i dalších.

Endpoint GET https://www.eunoto.cz/api/verification/{uuid}
Autorizace Authorization: Bearer <PrivateKey>
Odpověď
{"result": true, "age": 18} — zákazník je ověřen na 18 let {"result": false, "age": 18} — ověření na 18 let selhalo {"result": null, "age": 18} — token neznámý nebo zatím bez výsledku
Chybové stavy
400 — chybějící nebo neplatná hlavička Authorization 401 — neplatný tajný klíč 429 — překročen limit 100 požadavků za 10 minut z jedné IP adresy

Chcete si API vyzkoušet?

S klíči a napojením vám rádi poradíme.

Ověřovací okno se nezobrazuje?

Projděte si nejčastější příčiny — skript při problému nic nevypisuje, jen okno nevytvoří.

  • Běží web přes HTTPS?

    Na nezabezpečeném http:// se ověřovací okno nenačte.

  • Je skript až za prvkem?

    Skript client.js nečeká na načtení stránky — musí být v HTML až za prvkem data-eunoto a nesmí se vkládat asynchronně (např. přes Google Tag Manager).

  • Máte na stránce jen jeden prvek?

    Skript obslouží pouze první prvek data-eunoto na stránce — druhý formulář (např. mobilní verze) zůstane bez ověřovacího okna.

  • Nemá prohlížeč zablokované cookies?

    Bez povolených cookies se ověřovací okno vůbec nevykreslí.

  • Je formulář v HTML už při načtení stránky?

    Dynamicky vykreslované formuláře (SPA, obsah doplňovaný AJAXem) zatím nepodporujeme — prvek data-eunoto musí být na stránce od začátku.

Mám zájem