# Démarrage rapide (/fr/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>

L’Accept SDK s’exécute dans votre application et gère les paiements sur l’appareil : il capte la carte ou le paiement Tap to Pay, chiffre les données et tient la manipulation des cartes à l’écart de votre code, ce qui vous maintient hors du périmètre PCI. Votre backend authentifie chaque session du SDK auprès de l’API Tapaya, effectue l’onboarding des commerçants et déclenche le KYB. Tapaya réalise les contrôles KYB et règle les fonds au commerçant.

## Choisir votre mode d’intégration [#choose-your-integration-path]

Il existe deux façons d’accepter des paiements par carte avec Tap to Pay. Toutes deux confient l’interaction avec la carte à
l’application plugin **Tapaya Terminal** installée sur le même appareil. Elles se distinguent par la part de ce relais que votre application prend en charge :

<Cards>
  <VisualCard title="Accept SDK (recommandé)" visual="<Layers />" href="#set-up-your-integrator-account" description="Intégrez le SDK dans votre application Android et recevez le résultat dans des callbacks. Ce guide couvre cette approche." />

  <VisualCard title="Tapaya Terminal uniquement" visual="<SquareTerminal />" href="/in-store/integration/card_terminal#integrate-without-the-sdk" description="Sans SDK : ouvrez Tapaya Terminal avec un intent ou un deeplink et interrogez régulièrement le statut du paiement." />
</Cards>

## Configurer votre compte intégrateur [#set-up-your-integrator-account]

Avant d’écrire la moindre ligne de code, configurez le compte auprès duquel votre backend s’authentifiera :

1. **Inscrivez-vous** sur [platform.tapaya.com/register](https://platform.tapaya.com/register). L’inscription est en libre-service : aucune invitation n’est requise.
2. **Connectez-vous**, puis créez ou rejoignez votre organisation ; cela vous est demandé automatiquement juste après l’inscription.
3. **Générez votre Server Secret Token** depuis la [page API Keys](https://platform.tapaya.com/api-keys/) : votre backend l’utilise pour appeler la Tapaya Platform API (voir [Authentification de la Platform API](/platform-api#authentication)).

<Callout title="À ne pas confondre avec l’onboarding des commerçants" type="info">
  Il s’agit de la configuration du compte pour **vous**, l’intégrateur. L’onboarding de vos **commerçants** se fait séparément, via
  le SDK, la Tapaya Platform UI, votre propre interface ou un lien d’invitation. Consultez [Onboarding des
  commerçants](/merchants/onboarding) pour plus de détails. `POST /merchant/auth/register` crée uniquement la fiche
  commerçant de base ; l’onboarding hébergé sur invitation commence par `POST /integrator/merchant/send-registration-invite`.
</Callout>

La suite de ce guide explique comment ajouter le SDK à votre projet, authentifier une session et réaliser votre première transaction.

<section id="setup-section">
  <div className="fd-steps [&_h3]:fd-step">
    ### Ajouter la dépendance [#add-dependency]

    Sur Android, le SDK est publié sur Maven Central ; sur React Native, il s’installe depuis npm avec
    `npx expo install @tapayadot/accept-react-native` et est configuré par son plugin de configuration.

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

    Synchronisez le projet (Android) ou exécutez `npx expo prebuild --clean` (React Native), puis initialisez le SDK et
    authentifiez-vous dans le code de votre application.

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

    Authentifiez une session commerçant avec un jeton obtenu depuis votre backend.
    `authenticate` est une fonction `suspend` qui lève une `AcceptException` en cas d’échec.

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

    ### Effectuer l’onboarding du commerçant [#onboard-the-merchant]

    Avant de pouvoir effectuer la moindre transaction, le commerçant doit terminer l’onboarding KYB. L’onboarding n’est **plus
    piloté par l’Accept SDK**. Effectuez-le via la Tapaya Platform UI, votre propre interface s’appuyant sur l’API
    Tapaya, ou un lien d’invitation. Consultez [Onboarding des commerçants](/merchants/onboarding) pour toutes les méthodes.

    <Callout title="Approbation automatique dans la sandbox" type="info">
      Dans l’environnement sandbox, les commerçants sont automatiquement approuvés juste après l’onboarding : vous n’avez donc pas à attendre l’examen du processeur de paiement.
    </Callout>

    ### Vérifier que le commerçant est prêt [#verify-merchant-readiness]

    Assurez-vous que le commerçant a terminé l’onboarding et qu’il est approuvé pour accepter des paiements.

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

    Le commerçant n’est prêt qu’une fois approuvé par le processeur de paiement. S’il manque des informations,
    l’onboarding doit être recommencé. Dans certains cas, le processeur de paiement peut bloquer complètement le commerçant, par exemple s’il vend des produits interdits.

    ### Installer et activer le terminal [#install--activate-terminal]

    <Callout title="Application plugin requise" type="warn">
      Les paiements par carte nécessitent que le plugin **Tapaya Accept** soit installé sur l’appareil.
      Utilisez `Accept.plugin.isInstalled()` pour le vérifier, et `Accept.plugin.install()` pour ouvrir sa fiche
      dans le store s’il est absent.
    </Callout>

    Le plugin Tapaya Accept est requis pour les paiements par carte. Vérifiez s’il est installé, puis activez
    le terminal, ou ouvrez sa fiche sur le Play Store pour l’installer.

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

    ### Créer une transaction de paiement [#create-payment-transaction]

    Pour exécuter une transaction, appelez `Accept.payments.pay()` avec le montant (dans la plus petite unité de la devise)
    et un code de devise ISO 4217. La méthode renvoie un `Flow<PaymentEvent>` ; collectez-le pour suivre la progression et
    le résultat final. `pay()` ne lève jamais d’exception : les échecs arrivent sous forme de `PaymentEvent.CreationFailed`.

    Le démarrage rapide ne nécessite que `amount` et `currency`. Pour tous les paramètres facultatifs, comme un pourboire fixe, la personnalisation
    du reçu ou les métadonnées, consultez [Créer un paiement](../integration/card_terminal#create-a-payment).

    <div className="bg-background relative h-auto w-full overflow-hidden rounded-lg border px-10">
             <img alt="Paiement" 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>
