# Rychlý start (/cs/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 běží uvnitř vaší aplikace a zpracovává platby přímo na zařízení: načte kartu nebo platbu přes Tap to Pay, zašifruje data a udrží práci s kartou mimo váš kód, takže zůstáváte mimo rozsah PCI. Váš backend autentizuje každou relaci SDK vůči Tapaya API, provádí onboarding obchodníků a spouští KYB. Tapaya provádí kontroly KYB a zúčtovává prostředky obchodníkovi.

## Zvolte způsob integrace [#choose-your-integration-path]

Platby kartou přes Tap to Pay můžete přijímat dvěma způsoby. Oba předávají samotnou interakci s kartou
pluginové aplikaci **Tapaya Terminal** na stejném zařízení. Liší se tím, jak velkou část tohoto předání řídí vaše aplikace:

<Cards>
  <VisualCard title="Accept SDK (doporučeno)" visual="<Layers />" href="#set-up-your-integrator-account" description="Vložte SDK do své aplikace pro Android a výsledek získejte v callbacích. Tento průvodce popisuje právě tento způsob." />

  <VisualCard title="Pouze Tapaya Terminal" visual="<SquareTerminal />" href="/in-store/integration/card_terminal#integrate-without-the-sdk" description="Bez SDK: otevřete Tapaya Terminal pomocí intentu nebo deeplinku a průběžně zjišťujte stav platby." />
</Cards>

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

Než začnete psát kód, nastavte si účet, vůči kterému se bude váš backend autentizovat:

1. **Zaregistrujte se** na [platform.tapaya.com/register](https://platform.tapaya.com/register). Registrace je samoobslužná: pozvánka není potřeba.
2. **Přihlaste se** a poté vytvořte organizaci nebo se připojte k existující; budete k tomu vyzváni automaticky hned po registraci.
3. **Vygenerujte si Server Secret Token** na [stránce API klíčů](https://platform.tapaya.com/api-keys/): váš backend jej používá k volání Tapaya Platform API (viz [autentizace v Platform API](/platform-api#authentication)).

<Callout title="Nejde o onboarding obchodníků" type="info">
  Toto je nastavení účtu pro **vás**, integrátora. Vaši **obchodníci** procházejí onboardingem zvlášť, a to buď přes
  SDK, Tapaya Platform UI, vaše vlastní UI, nebo pomocí odkazu s pozvánkou. Podrobnosti najdete v části [Onboarding
  obchodníků](/merchants/onboarding). `POST /merchant/auth/register` pouze vytvoří základní záznam
  obchodníka; hostovaný onboarding přes pozvánku začíná voláním `POST /integrator/merchant/send-registration-invite`.
</Callout>

Zbytek tohoto průvodce popisuje přidání SDK do projektu, autentizaci relace a provedení první transakce.

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

    Na Androidu je SDK publikováno v Maven Central; v React Native se instaluje z npm příkazem
    `npx expo install @tapayadot/accept-react-native` a zapojí se pomocí svého 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) nebo spusťte `npx expo prebuild --clean` (React Native) a poté
    proveďte inicializaci a autentizaci v kódu aplikace.

    <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>

    Autentizujte relaci obchodníka pomocí tokenu získaného z vašeho backendu.
    `authenticate` je funkce typu `suspend` a při selhání vyhodí výjimku `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]

    Než budou povoleny jakékoli transakce, musí obchodník dokončit onboarding KYB. Onboarding už **neřídí
    Accept SDK**. Dokončete jej přes Tapaya Platform UI, vlastní UI napojené na Tapaya
    API, nebo pomocí odkazu s pozvánkou. Všechny způsoby najdete v části [Onboarding obchodníků](/merchants/onboarding).

    <Callout title="Automatické schválení v sandboxu" type="info">
      V sandboxu jsou obchodníci schváleni automaticky hned po onboardingu, takže nemusíte čekat na posouzení zpracovatelem plateb.
    </Callout>

    ### Ověření připravenosti obchodníka [#verify-merchant-readiness]

    Ujistěte se, že obchodník dokončil onboarding a je schválen pro přijímání plateb.

    <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 připraven až poté, co jej schválí zpracovatel plateb. Pokud některé údaje chybí,
    je nutné onboarding zopakovat. V některých případech může zpracovatel plateb obchodníka úplně zablokovat, například při prodeji zakázaného zboží.

    ### Instalace a aktivace terminálu [#install--activate-terminal]

    <Callout title="Vyžadována pluginová aplikace" type="warn">
      Platby kartou vyžadují, aby byl na zařízení nainstalován plugin **Tapaya Accept**.
      Ke kontrole použijte `Accept.plugin.isInstalled()`, a pokud plugin chybí, otevřete jeho stránku
      v obchodě pomocí `Accept.plugin.install()`.
    </Callout>

    Plugin Tapaya Accept je pro platby kartou nezbytný. Zkontrolujte, zda je nainstalován, a poté aktivujte
    terminál, případně otevřete stránku pluginu v Obchodě Play a nainstalujte jej.

    <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>

    ### Vytvoření platební transakce [#create-payment-transaction]

    Transakci provedete voláním `Accept.payments.pay()` s částkou (v nejmenší jednotce měny)
    a kódem měny podle ISO 4217. Metoda vrací `Flow<PaymentEvent>`; odebírejte z něj události (collect), abyste sledovali průběh a
    konečný výsledek. `pay()` nikdy nevyhazuje výjimku: selhání přicházejí jako `PaymentEvent.CreationFailed`.

    Pro rychlý start stačí pouze `amount` a `currency`. Všechny volitelné parametry, například pevné spropitné, úpravy
    účtenky nebo metadata, najdete v části [Vytvoření 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>
