> ## Documentation Index
> Fetch the complete documentation index at: https://docs.yabetoopay.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Démarrage rapide

> Acceptez votre premier paiement en moins de 5 minutes

## Prérequis

Avant de commencer, assurez-vous d'avoir :

<CardGroup cols={2}>
  <Card title="Compte Yabetoo" icon="user">
    [Créez un compte](https://app.yabetoo.com) si ce n'est pas déjà fait
  </Card>

  <Card title="Clés API" icon="key">
    Obtenez vos clés API de test depuis le Dashboard
  </Card>
</CardGroup>

<Warning>
  Ne partagez jamais votre clé API secrète publiquement. Utilisez des variables d'environnement pour les stocker en toute sécurité.
</Warning>

## Étape 1 : Obtenez vos clés API

<Steps>
  <Step title="Connectez-vous à votre Dashboard">
    Allez sur [app.yabetoo.com](https://app.yabetoo.com) et connectez-vous à votre compte
  </Step>

  <Step title="Accédez aux clés API">
    Cliquez sur **Paramètres** > **Clés API** dans la barre latérale
  </Step>

  <Step title="Copiez vos clés de test">
    Copiez votre clé secrète de test (commence par `sk_test_`)
  </Step>
</Steps>

<Info>
  Les clés de test vous permettent de simuler des paiements sans argent réel. Utilisez-les pendant le développement.
</Info>

## Étape 2 : Installez un SDK (optionnel)

Choisissez votre langage préféré :

<CodeGroup>
  ```bash npm theme={null}
  npm install @yabetoo/sdk-js
  ```

  ```bash pip theme={null}
  pip install yabetoo-sdk
  ```

  ```bash composer theme={null}
  composer require yabetoo/yabetoo-php
  ```

  ```bash gradle theme={null}
  implementation 'com.yabetoo:yabetoo-java:1.0.0'
  ```
</CodeGroup>

## Étape 3 : Créez votre premier paiement

### Option A : Page de paiement hébergée (Recommandé)

Le moyen le plus rapide d'accepter des paiements. Redirigez vos clients vers une page hébergée par Yabetoo.

<CodeGroup>
  ```bash curl theme={null}
  curl -X POST https://buy.api.yabetoopay.com/v1/sessions \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer sk_test_XXXXXXXXXXXXXXXXXXXXXXXX" \
    -d '{
      "total": 5000,
      "currency": "xaf",
      "accountId": "acct_xxxxxxxx",
      "successUrl": "https://votre-site.com/succes",
      "cancelUrl": "https://votre-site.com/annuler",
      "items": [{
        "productId": "prod_123",
        "productName": "Plan Premium",
        "quantity": 1,
        "price": 5000
      }]
    }'
  ```

  ```javascript Node.js theme={null}
  import { Yabetoo } from '@yabetoopay/node';

  const yabetoo = new Yabetoo('sk_test_XXXXXXXXXXXXXXXXXXXXXXXX');

  const session = await yabetoo.sessions.create({
    accountId: 'acct_xxxxxxxx',
    total: 5000,
    currency: 'xaf',
    successUrl: 'https://votre-site.com/succes',
    cancelUrl: 'https://votre-site.com/annuler',
    items: [
      {
        productId: 'prod_123',
        productName: 'Plan Premium',
        quantity: 1,
        price: 5000,
      },
    ],
  });

  // Redirigez le client vers session.url
  console.log(session.url);
  ```

  ```python Python theme={null}
  from yabetoo import Yabetoo
  from yabetoo.models.checkout import CreateCheckoutSession, CheckoutItem

  yabetoo = Yabetoo('sk_test_XXXXXXXXXXXXXXXXXXXXXXXX')

  session = yabetoo.sessions.create(CreateCheckoutSession(
      account_id='acct_xxxxxxxx',
      total=5000,
      currency='xaf',
      success_url='https://votre-site.com/succes',
      cancel_url='https://votre-site.com/annuler',
      items=[
          CheckoutItem(
              product_id='prod_123',
              product_name='Plan Premium',
              quantity=1,
              price=5000
          )
      ]
  ))

  # Redirigez le client vers session.url
  print(session.url)
  ```

  ```php PHP theme={null}
  <?php
  require_once('vendor/autoload.php');

  $yabetoo = new \Yabetoo\YabetooClient('sk_test_XXXXXXXXXXXXXXXXXXXXXXXX');

  $session = $yabetoo->sessions->create([
    'accountId' => 'acct_xxxxxxxx',
    'total' => 5000,
    'currency' => 'xaf',
    'successUrl' => 'https://votre-site.com/succes',
    'cancelUrl' => 'https://votre-site.com/annuler',
    'items' => [
      [
        'productId' => 'prod_123',
        'productName' => 'Plan Premium',
        'quantity' => 1,
        'price' => 5000
      ]
    ]
  ]);

  // Redirigez le client vers $session->url
  echo $session->url;
  ?>
  ```

  ```java Java theme={null}
  import com.yabetoo.YabetooClient;
  import com.yabetoo.model.CheckoutSession;
  import com.yabetoo.param.CheckoutSessionCreateParams;
  import com.yabetoo.param.CheckoutItem;

  YabetooClient yabetoo = new YabetooClient("sk_test_XXXXXXXXXXXXXXXXXXXXXXXX");

  CheckoutItem item = CheckoutItem.builder()
      .setProductId("prod_123")
      .setProductName("Plan Premium")
      .setQuantity(1)
      .setPrice(5000L)
      .build();

  CheckoutSessionCreateParams params = CheckoutSessionCreateParams.builder()
      .setAccountId("acct_xxxxxxxx")
      .setTotal(5000L)
      .setCurrency("xaf")
      .setSuccessUrl("https://votre-site.com/succes")
      .setCancelUrl("https://votre-site.com/annuler")
      .addItem(item)
      .build();

  CheckoutSession session = yabetoo.sessions().create(params);

  // Redirigez le client vers session.getUrl()
  System.out.println(session.getUrl());
  ```
</CodeGroup>

### Option B : Intégration personnalisée

Pour un contrôle total sur l'expérience de paiement, utilisez l'API Payment Intent.

<CodeGroup>
  ```bash curl theme={null}
  # Étape 1 : Créer l'intention de paiement
  curl https://pay.sandbox.yabetoopay.com/v1/payment-intents \
    -X POST \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer sk_test_XXXXXXXXXXXXXXXXXXXXXXXX" \
    -d '{
      "amount": 5000,
      "currency": "xaf",
      "description": "Abonnement Plan Premium"
    }'

  # Étape 2 : Confirmer avec le moyen de paiement du client
  curl https://pay.sandbox.yabetoopay.com/v1/payment-intents \
    -X POST \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer sk_test_XXXXXXXXXXXXXXXXXXXXXXXX" \
    -d '{
      "client_secret": "pi_xxx_secret_yyy",
      "first_name": "Jean",
      "last_name": "Dupont",
      "receipt_email": "jean@example.com",
      "payment_method_data": {
        "type": "momo",
        "momo": {
          "country": "cg",
          "msisdn": "242123456789",
          "operator_name": "mtn"
        }
      }
    }'
  ```

  ```javascript Node.js theme={null}
  import { Yabetoo } from '@yabetoopay/node';

  const yabetoo = new Yabetoo('sk_test_XXXXXXXXXXXXXXXXXXXXXXXX');

  // Étape 1 : Créer l'intention de paiement
  const intent = await yabetoo.paymentIntents.create({
    amount: 5000,
    currency: 'xaf',
    description: 'Abonnement Plan Premium',
  });

  // Étape 2 : Confirmer avec le moyen de paiement du client
  const payment = await yabetoo.paymentIntents.confirm({
    client_secret: intent.client_secret,
    first_name: 'Jean',
    last_name: 'Dupont',
    receipt_email: 'jean@example.com',
    payment_method_data: {
      type: 'momo',
      momo: {
        country: 'cg',
        msisdn: '242123456789',
        operator_name: 'mtn',
      },
    },
  });

  console.log(payment.status); // "succeeded"
  ```

  ```python Python theme={null}
  from yabetoo import Yabetoo
  from yabetoo.models.payment import (
      CreateIntentRequest,
      ConfirmIntentRequest,
      PaymentMethodData,
      MomoData
  )

  yabetoo = Yabetoo('sk_test_XXXXXXXXXXXXXXXXXXXXXXXX')

  # Étape 1 : Créer l'intention de paiement
  intent = yabetoo.payment_intents.create(CreateIntentRequest(
      amount=5000,
      currency='xaf',
      description='Abonnement Plan Premium'
  ))

  # Étape 2 : Confirmer avec le moyen de paiement du client
  payment = yabetoo.payment_intents.confirm(
      payment_id=intent.id,
      data=ConfirmIntentRequest(
          client_secret=intent.client_secret,
          first_name='Jean',
          last_name='Dupont',
          receipt_email='jean@example.com',
          payment_method_data=PaymentMethodData(
              type='momo',
              momo=MomoData(
                  country='cg',
                  msisdn='242123456789',
                  operator_name='mtn'
              )
          )
      )
  )

  print(payment.status)  # "succeeded"
  ```

  ```php PHP theme={null}
  <?php
  require_once('vendor/autoload.php');

  $yabetoo = new \Yabetoo\YabetooClient('sk_test_XXXXXXXXXXXXXXXXXXXXXXXX');

  // Étape 1 : Créer l'intention de paiement
  $intent = $yabetoo->paymentIntents->create([
    'amount' => 5000,
    'currency' => 'xaf',
    'description' => 'Abonnement Plan Premium'
  ]);

  // Étape 2 : Confirmer avec le moyen de paiement du client
  $payment = $yabetoo->paymentIntents->confirm([
    'client_secret' => $intent->client_secret,
    'first_name' => 'Jean',
    'last_name' => 'Dupont',
    'receipt_email' => 'jean@example.com',
    'payment_method_data' => [
      'type' => 'momo',
      'momo' => [
        'country' => 'cg',
        'msisdn' => '242123456789',
        'operator_name' => 'mtn'
      ]
    ]
  ]);

  echo $payment->status; // "succeeded"
  ?>
  ```

  ```java Java theme={null}
  import com.yabetoo.YabetooClient;
  import com.yabetoo.model.PaymentIntent;
  import com.yabetoo.param.PaymentIntentCreateParams;
  import com.yabetoo.param.PaymentIntentConfirmParams;
  import com.yabetoo.param.PaymentMethodData;
  import com.yabetoo.param.MomoData;

  YabetooClient yabetoo = new YabetooClient("sk_test_XXXXXXXXXXXXXXXXXXXXXXXX");

  // Étape 1 : Créer l'intention de paiement
  PaymentIntentCreateParams createParams = PaymentIntentCreateParams.builder()
      .setAmount(5000L)
      .setCurrency("xaf")
      .setDescription("Abonnement Plan Premium")
      .build();

  PaymentIntent intent = yabetoo.paymentIntents().create(createParams);

  // Étape 2 : Confirmer avec le moyen de paiement du client
  MomoData momoData = MomoData.builder()
      .setCountry("cg")
      .setMsisdn("242123456789")
      .setOperatorName("mtn")
      .build();

  PaymentMethodData paymentMethodData = PaymentMethodData.builder()
      .setType("momo")
      .setMomo(momoData)
      .build();

  PaymentIntentConfirmParams confirmParams = PaymentIntentConfirmParams.builder()
      .setClientSecret(intent.getClientSecret())
      .setFirstName("Jean")
      .setLastName("Dupont")
      .setReceiptEmail("jean@example.com")
      .setPaymentMethodData(paymentMethodData)
      .build();

  PaymentIntent payment = yabetoo.paymentIntents().confirm(confirmParams);

  System.out.println(payment.getStatus()); // "succeeded"
  ```
</CodeGroup>

## Étape 4 : Testez votre intégration

Utilisez ces numéros de téléphone de test en mode sandbox :

| Numéro de téléphone | Comportement                         |
| ------------------- | ------------------------------------ |
| `242000000001`      | Réussit toujours                     |
| `242000000002`      | Échoue toujours (fonds insuffisants) |
| `242000000003`      | En attente 30 secondes, puis réussit |

<Tip>
  Consultez votre Dashboard pour voir toutes les transactions de test en temps réel.
</Tip>

## Étape 5 : Passez en production

Quand vous êtes prêt à accepter de vrais paiements :

<Steps>
  <Step title="Complétez la vérification du compte">
    Soumettez vos documents d'entreprise dans le Dashboard
  </Step>

  <Step title="Passez aux clés de production">
    Remplacez `sk_test_` par `sk_live_` dans votre code
  </Step>

  <Step title="Mettez à jour les endpoints webhook">
    Pointez les webhooks vers votre serveur de production
  </Step>
</Steps>

<Check>
  Félicitations ! Vous êtes maintenant prêt à accepter des paiements avec Yabetoo.
</Check>

## Prochaines étapes

<CardGroup cols={2}>
  <Card title="Gérer les Webhooks" icon="bell" href="/fr/developer-tools/webhook/overview">
    Soyez notifié quand les paiements sont complétés
  </Card>

  <Card title="Explorer les SDKs" icon="cubes" href="/fr/developer-tools/sdk/javascript">
    Découvrez toutes les fonctionnalités des SDKs
  </Card>

  <Card title="Référence API" icon="book" href="/fr/api-reference/introduction">
    Documentation API complète
  </Card>

  <Card title="Gestion des erreurs" icon="triangle-exclamation" href="/fr/api-reference/errors">
    Gérez les erreurs avec élégance
  </Card>
</CardGroup>
