# Rýchly štart (/sk/in-store/getting-started/quick_start_guide)









<div className="bg-background relative h-auto w-full overflow-hidden rounded-lg border mt-8">
  <FlickeringGrid className="absolute inset-0 z-0 size-full" squareSize="4" gridGap="6" maxOpacity="0.1" flickerChance="0.1" height="800" width="2000" />

  <SdkLifecycleDiagram />
</div>

Accept SDK beží vo vašej aplikácii a spracúva platby priamo na zariadení: načíta kartu alebo platbu cez Tap to Pay, zašifruje údaje a udrží prácu s kartou mimo váš kód, takže zostávate mimo rozsahu PCI. Váš backend overuje každú reláciu SDK voči Tapaya API, zabezpečuje onboarding obchodníkov a spúšťa KYB. Tapaya vykonáva kontroly KYB a zúčtováva prostriedky obchodníkovi.

## Zvoľte spôsob integrácie [#choose-your-integration-path]

Platby kartou cez Tap to Pay môžete prijímať dvoma spôsobmi. Oba odovzdávajú samotnú interakciu s kartou
pluginovej aplikácii **Tapaya Terminal** na tom istom zariadení. Líšia sa tým, akú veľkú časť tohto odovzdania riadi vaša aplikácia:

<Cards>
  <VisualCard title="Accept SDK (odporúčané)" visual="<Layers />" href="#set-up-your-integrator-account" description="Vložte SDK do svojej aplikácie pre Android a výsledok získajte v callbackoch. Tento sprievodca opisuje práve tento spôsob." />

  <VisualCard title="Iba Tapaya Terminal" visual="<SquareTerminal />" href="/in-store/integration/card_terminal#integrate-without-the-sdk" description="Bez SDK: otvorte Tapaya Terminal pomocou intentu alebo deeplinku a priebežne zisťujte stav platby." />
</Cards>

## Nastavenie účtu integrátora [#set-up-your-integrator-account]

Skôr ako začnete písať kód, nastavte si účet, voči ktorému sa bude váš backend autentifikovať:

1. **Zaregistrujte sa** na [platform.tapaya.com/register](https://platform.tapaya.com/register). Registrácia je samoobslužná: pozvánka nie je potrebná.
2. **Prihláste sa** a potom vytvorte organizáciu alebo sa pripojte k existujúcej; vyzveme vás na to automaticky hneď po registrácii.
3. **Vygenerujte si Server Secret Token** na [stránke API kľúčov](https://platform.tapaya.com/api-keys/): váš backend ho používa na volanie Tapaya Platform API (pozrite [autentifikácia v Platform API](/platform-api#authentication)).

<Callout title="Nejde o onboarding obchodníkov" type="info">
  Toto je nastavenie účtu pre **vás**, integrátora. Vaši **obchodníci** prechádzajú onboardingom samostatne, a to buď cez
  SDK, Tapaya Platform UI, vaše vlastné UI, alebo pomocou odkazu s pozvánkou. Podrobnosti nájdete v časti [Onboarding
  obchodníkov](/merchants/onboarding). `POST /merchant/auth/register` iba vytvorí základný záznam
  obchodníka; hostovaný onboarding cez pozvánku sa začína volaním `POST /integrator/merchant/send-registration-invite`.
</Callout>

Zvyšok tohto sprievodcu opisuje pridanie SDK do projektu, autentifikáciu relácie a vykonanie prvej transakcie.

<section id="setup-section">
  <div className="fd-steps [&_h3]:fd-step">
    ### Pridanie závislosti [#add-dependency]

    Na Androide je SDK publikované v Maven Central; v React Native sa inštaluje z npm príkazom
    `npx expo install @tapayadot/accept-react-native` a zapojí sa pomocou svojho konfiguračného pluginu.

    <CodeBlockTabs defaultValue="kotlin" groupId="accept-language">
      <CodeBlockTabsList>
        <CodeBlockTabsTrigger value="kotlin">
          Android (Kotlin)
        </CodeBlockTabsTrigger>

        <CodeBlockTabsTrigger value="typescript">
          React Native (TypeScript)
        </CodeBlockTabsTrigger>
      </CodeBlockTabsList>

      <CodeBlockTab value="kotlin">
        ```kotlin title="build.gradle.kts"
        dependencies {
            // [!code ++:1]
            implementation("com.tapaya:accept:1.15.0")
        }
        ```
      </CodeBlockTab>

      <CodeBlockTab value="typescript">
        ```json title="app.json"
        {
          "expo": {
            "plugins": ["@tapayadot/accept-react-native"]
          }
        }
        ```
      </CodeBlockTab>
    </CodeBlockTabs>

    Synchronizujte projekt (Android) alebo spustite `npx expo prebuild --clean` (React Native) a potom
    vykonajte inicializáciu a autentifikáciu v kóde aplikácie.

    <CodeBlockTabs defaultValue="kotlin" groupId="accept-language">
      <CodeBlockTabsList>
        <CodeBlockTabsTrigger value="kotlin">
          Android (Kotlin)
        </CodeBlockTabsTrigger>

        <CodeBlockTabsTrigger value="typescript">
          React Native (TypeScript)
        </CodeBlockTabsTrigger>
      </CodeBlockTabsList>

      <CodeBlockTab value="kotlin">
        ```kotlin title="MyApplication.kt"
        // Step 1: Initialize (once, in Application.onCreate)
        Accept.initialize(this) // sandbox by default; pass isProduction = true to go live
        ```
      </CodeBlockTab>

      <CodeBlockTab value="typescript">
        ```typescript title="App.tsx"
        import Accept from '@tapayadot/accept-react-native';

        // Step 1: Initialize (once, at app startup)
        Accept.initialize(); // sandbox by default; pass { isProduction: true } to go live
        ```
      </CodeBlockTab>
    </CodeBlockTabs>

    Autentifikujte reláciu obchodníka pomocou tokenu získaného z vášho backendu.
    `authenticate` je funkcia typu `suspend` a pri zlyhaní vyhodí výnimku `AcceptException`.

    <CodeBlockTabs defaultValue="kotlin" groupId="accept-language">
      <CodeBlockTabsList>
        <CodeBlockTabsTrigger value="kotlin">
          Android (Kotlin)
        </CodeBlockTabsTrigger>

        <CodeBlockTabsTrigger value="typescript">
          React Native (TypeScript)
        </CodeBlockTabsTrigger>
      </CodeBlockTabsList>

      <CodeBlockTab value="kotlin">
        ```kotlin
        // Step 2: Authenticate (suspend; call from a coroutine)
        try {
            val sdkToken = myBackend.login() // token from POST /merchant/auth/login
            Accept.auth.authenticate(sdkToken)
            // Accept.state now emits SdkState.Authenticated
        } catch (e: AcceptException) {
            // handle authentication failure
        }
        ```
      </CodeBlockTab>

      <CodeBlockTab value="typescript">
        ```typescript
        // Step 2: Authenticate
        try {
            const sdkToken = await myBackend.login(); // token from POST /merchant/auth/login
            await Accept.auth.authenticate(sdkToken);
            // Accept.state is now 'authenticated'
        } catch (error) {
            // handle authentication failure
        }
        ```
      </CodeBlockTab>
    </CodeBlockTabs>

    ### Onboarding obchodníka [#onboard-the-merchant]

    Skôr ako budú povolené akékoľvek transakcie, obchodník musí dokončiť onboarding KYB. Onboarding už **neriadi
    Accept SDK**. Dokončite ho cez Tapaya Platform UI, vlastné UI napojené na Tapaya
    API, alebo pomocou odkazu s pozvánkou. Všetky spôsoby nájdete v časti [Onboarding obchodníkov](/merchants/onboarding).

    <Callout title="Automatické schválenie v sandboxe" type="info">
      V sandboxe sú obchodníci schválení automaticky hneď po onboardingu, takže nemusíte čakať na posúdenie spracovateľom platieb.
    </Callout>

    ### Overenie pripravenosti obchodníka [#verify-merchant-readiness]

    Uistite sa, že obchodník dokončil onboarding a je schválený na prijímanie platieb.

    <CodeBlockTabs defaultValue="kotlin" groupId="accept-language">
      <CodeBlockTabsList>
        <CodeBlockTabsTrigger value="kotlin">
          Android (Kotlin)
        </CodeBlockTabsTrigger>

        <CodeBlockTabsTrigger value="typescript">
          React Native (TypeScript)
        </CodeBlockTabsTrigger>
      </CodeBlockTabsList>

      <CodeBlockTab value="kotlin">
        ```kotlin
        val ready = when (val status = Accept.merchant.onboardingStatus()) {
            OnboardingStatus.ReadyForPayments -> true
            is OnboardingStatus.RequiresAction -> false // status.state describes what's blocking
        }
        ```
      </CodeBlockTab>

      <CodeBlockTab value="typescript">
        ```typescript
        const status = await Accept.merchant.onboardingStatus();
        // status.state describes what's blocking when it requires action
        const ready = status.type === 'readyForPayments';
        ```
      </CodeBlockTab>
    </CodeBlockTabs>

    Obchodník je pripravený až potom, ako ho schváli spracovateľ platieb. Ak niektoré údaje chýbajú,
    onboarding je nutné zopakovať. V niektorých prípadoch môže spracovateľ platieb obchodníka úplne zablokovať, napríklad pri predaji zakázaného tovaru.

    ### Inštalácia a aktivácia terminálu [#install--activate-terminal]

    <Callout title="Vyžaduje sa pluginová aplikácia" type="warn">
      Platby kartou vyžadujú, aby bol na zariadení nainštalovaný plugin **Tapaya Accept**.
      Na kontrolu použite `Accept.plugin.isInstalled()`, a ak plugin chýba, otvorte jeho stránku
      v obchode pomocou `Accept.plugin.install()`.
    </Callout>

    Plugin Tapaya Accept je pre platby kartou nevyhnutný. Skontrolujte, či je nainštalovaný, a potom aktivujte
    terminál, prípadne otvorte stránku pluginu v Obchode Play a nainštalujte ho.

    <div className="bg-background relative h-auto w-full overflow-hidden rounded-lg border px-10">
            <img alt="Plugin" src="__img0" />
    </div>

    <CodeBlockTabs defaultValue="kotlin" groupId="accept-language">
      <CodeBlockTabsList>
        <CodeBlockTabsTrigger value="kotlin">
          Android (Kotlin)
        </CodeBlockTabsTrigger>

        <CodeBlockTabsTrigger value="typescript">
          React Native (TypeScript)
        </CodeBlockTabsTrigger>
      </CodeBlockTabsList>

      <CodeBlockTab value="kotlin">
        ```kotlin
        if (Accept.plugin.isInstalled()) {
            // suspend; returns ActivateTerminalResult (Success / Canceled / Failed)
            Accept.plugin.activateTerminal()
        } else {
            Accept.plugin.install() // opens the store listing
        }
        ```
      </CodeBlockTab>

      <CodeBlockTab value="typescript">
        ```typescript
        if (Accept.plugin.isInstalled()) {
            // returns ActivateTerminalResult: { type: 'success' | 'canceled' | 'failed' }
            await Accept.plugin.activateTerminal();
        } else {
            await Accept.plugin.install(); // opens the store listing
        }
        ```
      </CodeBlockTab>
    </CodeBlockTabs>

    ### Vytvorenie platobnej transakcie [#create-payment-transaction]

    Transakciu vykonáte volaním `Accept.payments.pay()` so sumou (v najmenšej jednotke meny)
    a kódom meny podľa ISO 4217. Metóda vracia `Flow<PaymentEvent>`; odoberajte z neho udalosti (collect), aby ste sledovali priebeh a
    konečný výsledok. `pay()` nikdy nevyhadzuje výnimku: zlyhania prichádzajú ako `PaymentEvent.CreationFailed`.

    Na rýchly štart stačia iba `amount` a `currency`. Všetky voliteľné parametre, napríklad pevné prepitné, úpravy
    účtenky alebo metadáta, nájdete v časti [Vytvorenie platby](../integration/card_terminal#create-a-payment).

    <div className="bg-background relative h-auto w-full overflow-hidden rounded-lg border px-10">
            <img alt="Platba" src="__img1" />
    </div>

    <CodeBlockTabs defaultValue="kotlin" groupId="accept-language">
      <CodeBlockTabsList>
        <CodeBlockTabsTrigger value="kotlin">
          Android (Kotlin)
        </CodeBlockTabsTrigger>

        <CodeBlockTabsTrigger value="typescript">
          React Native (TypeScript)
        </CodeBlockTabsTrigger>
      </CodeBlockTabsList>

      <CodeBlockTab value="kotlin">
        ```kotlin
        Accept.payments.pay(amount = 15000, currency = "CZK") // 150.00 Kč
            .collect { event ->
                when (event) {
                    PaymentEvent.Creating -> Log.d("pay", "creating")
                    is PaymentEvent.Created -> Log.d("pay", "created ${event.paymentToken}")
                    PaymentEvent.Launched -> Log.d("pay", "launched")
                    is PaymentEvent.Result -> Log.d("pay", event.payResult.toString())
                    is PaymentEvent.CreationFailed -> Log.e("pay", event.cause.toString())
                }
            }
        ```
      </CodeBlockTab>

      <CodeBlockTab value="typescript">
        ```typescript
        // payAsync() reduces the event stream to its outcome; use pay() to render progress
        const result = await Accept.payments.payAsync({
            amount: 15000,
            currency: 'CZK', // 150.00 Kč
        });

        if (result.type === 'success') {
            console.log(result.paymentToken, result.receiptUrl);
        }
        ```
      </CodeBlockTab>
    </CodeBlockTabs>
  </div>
</section>
