Passer au contenu principal

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.

Qu’est-ce qu’une Checkout Session ?

Une Checkout Session représente la session de paiement de votre client. Elle contrôle ce que le client voit sur la page de paiement : les produits, le montant, la devise, et les options disponibles.
Format de l’identifiant : cs_ suivi de 24 caractères alphanumériques.Exemple : cs_abc123def456ghi789jkl012

Modes de la session

payment

Paiement uniquePour les achats ponctuels de produits ou services.

subscription

AbonnementPour créer un abonnement récurrent avec facturation automatique.

setup

ConfigurationPour enregistrer un moyen de paiement sans effectuer de paiement immédiat.

Créer une Checkout Session

Requête de base

curl -X POST https://api.yabetoo.com/v1/checkout/sessions \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "success_url": "https://votre-site.com/success",
    "cancel_url": "https://votre-site.com/cancel",
    "line_items": [
      {
        "price_data": {
          "currency": "XOF",
          "unit_amount": 15000,
          "product_data": {
            "name": "T-shirt Premium"
          }
        },
        "quantity": 2
      }
    ]
  }'

Paramètres requis

ParamètreTypeDescription
success_urlstringURL de redirection après paiement réussi
line_itemsarrayListe des articles à acheter

Paramètres optionnels

ParamètreTypeDescription
cancel_urlstringURL de redirection si le client annule
modestringpayment, subscription, ou setup (défaut: payment)
customerstringID d’un client existant (cus_xxx)
customer_emailstringEmail du client (pré-remplit le formulaire)
client_reference_idstringVotre référence interne (ex: ID commande)
allow_promotion_codesbooleanAutoriser les codes promo
localestringLangue de la page (fr, en, etc.)
expires_atnumberTimestamp Unix d’expiration
metadataobjectDonnées personnalisées

Définir les articles (line_items)

Vous avez deux options pour définir les articles :
Définissez le prix directement dans la requête :
{
  "line_items": [
    {
      "price_data": {
        "currency": "XOF",
        "unit_amount": 25000,
        "product_data": {
          "name": "Formation JavaScript",
          "description": "Accès complet à la formation",
          "images": ["https://example.com/image.jpg"]
        }
      },
      "quantity": 1
    }
  ]
}

Structure du line_item

ChampTypeDescription
price_dataobjectPrix défini inline (voir ci-dessous)
pricestringID d’un prix existant (price_xxx)
quantitynumberQuantité (minimum 1)
adjustable_quantityobjectPermet au client de modifier la quantité

Structure de price_data

ChampTypeDescription
currencystringCode devise (XOF, EUR, USD)
unit_amountnumberPrix unitaire
product_dataobjectInformations sur le produit
recurringobjectPour les abonnements uniquement

Structure de product_data

ChampTypeDescription
namestringNom du produit (requis)
descriptionstringDescription
imagesarrayURLs des images
metadataobjectDonnées personnalisées

Abonnements récurrents

Pour créer un abonnement, utilisez mode: "subscription" et ajoutez recurring dans price_data :
{
  "mode": "subscription",
  "success_url": "https://votre-site.com/success",
  "line_items": [
    {
      "price_data": {
        "currency": "XOF",
        "unit_amount": 9900,
        "product_data": {
          "name": "Abonnement Pro"
        },
        "recurring": {
          "interval": "month",
          "interval_count": 1
        }
      },
      "quantity": 1
    }
  ]
}

Intervalles disponibles

IntervalDescription
dayFacturation quotidienne
weekFacturation hebdomadaire
monthFacturation mensuelle
yearFacturation annuelle

Options avancées

Collecter les adresses

{
  "billing_address_collection": "required",
  "shipping_address_collection": {
    "allowed_countries": ["CG", "CD", "CI", "SN"]
  }
}

Collecter le numéro de téléphone

{
  "phone_number_collection": {
    "enabled": true
  }
}

Autoriser les codes promo

{
  "allow_promotion_codes": true
}

Appliquer un code promo automatiquement

{
  "discounts": [
    {
      "promotion_code": "promo_abc123"
    }
  ]
}

Personnaliser le bouton de paiement

{
  "submit_type": "pay"
}
ValeurTexte du bouton
autoAutomatique selon le contexte
pay”Payer”
book”Réserver”
donate”Faire un don”

Quantité ajustable

Permettez au client de modifier la quantité sur la page de paiement :
{
  "line_items": [
    {
      "price_data": {
        "currency": "XOF",
        "unit_amount": 5000,
        "product_data": { "name": "Article" }
      },
      "quantity": 1,
      "adjustable_quantity": {
        "enabled": true,
        "minimum": 1,
        "maximum": 10
      }
    }
  ]
}

Exemple complet

curl -X POST https://api.yabetoo.com/v1/checkout/sessions \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "mode": "payment",
    "success_url": "https://votre-site.com/success?session_id={CHECKOUT_SESSION_ID}",
    "cancel_url": "https://votre-site.com/cancel",
    "customer_email": "client@example.com",
    "client_reference_id": "order_12345",
    "allow_promotion_codes": true,
    "billing_address_collection": "required",
    "phone_number_collection": { "enabled": true },
    "locale": "fr",
    "metadata": {
      "order_id": "12345",
      "source": "website"
    },
    "line_items": [
      {
        "price_data": {
          "currency": "XOF",
          "unit_amount": 25000,
          "product_data": {
            "name": "Écran HD",
            "description": "Écran 24 pouces Full HD",
            "images": ["https://example.com/ecran.jpg"]
          }
        },
        "quantity": 1
      },
      {
        "price_data": {
          "currency": "XOF",
          "unit_amount": 5000,
          "product_data": {
            "name": "Câble HDMI"
          }
        },
        "quantity": 2
      }
    ]
  }'

Réponse

{
  "id": "cs_abc123def456ghi789",
  "object": "checkout.session",
  "mode": "payment",
  "status": "open",
  "payment_status": "unpaid",
  "url": "https://checkout.yabetoo.com/cs_abc123def456ghi789",
  "success_url": "https://votre-site.com/success?session_id={CHECKOUT_SESSION_ID}",
  "cancel_url": "https://votre-site.com/cancel",
  "customer_email": "client@example.com",
  "client_reference_id": "order_12345",
  "amount_subtotal": 35000,
  "amount_total": 35000,
  "amount_discount": 0,
  "currency": "XOF",
  "allow_promotion_codes": true,
  "line_items": [
    {
      "price_data": {
        "currency": "XOF",
        "unit_amount": 25000,
        "product_data": { "name": "Écran HD" }
      },
      "quantity": 1,
      "amount_subtotal": 25000,
      "amount_total": 25000
    },
    {
      "price_data": {
        "currency": "XOF",
        "unit_amount": 5000,
        "product_data": { "name": "Câble HDMI" }
      },
      "quantity": 2,
      "amount_subtotal": 10000,
      "amount_total": 10000
    }
  ],
  "metadata": {
    "order_id": "12345",
    "source": "website"
  },
  "expires_at": "2024-01-15T12:00:00.000Z",
  "created_at": "2024-01-15T11:00:00.000Z"
}

Champs de la réponse

ChampDescription
idIdentifiant unique de la session
urlURL de la page de paiement
statusopen, complete, ou expired
payment_statusunpaid, paid, ou no_payment_required
amount_subtotalSous-total avant réductions
amount_totalMontant total à payer
amount_discountMontant des réductions appliquées

Rediriger le client

Une fois la session créée, redirigez le client vers l’URL de paiement :
// Côté serveur : créer la session
const session = await createCheckoutSession(/* ... */);

// Côté client : rediriger
window.location.href = session.url;

Après le paiement

Redirection

Après le paiement, le client est redirigé vers success_url avec l’ID de session :
https://votre-site.com/success?session_id=cs_abc123def456

Vérifier le statut

Ne faites jamais confiance uniquement à la redirection. Vérifiez toujours le statut de la session côté serveur.
// Récupérer l'ID de session depuis l'URL
const sessionId = new URLSearchParams(window.location.search).get("session_id");

// Vérifier le statut côté serveur
const response = await fetch(
  "https://api.yabetoo.com/v1/checkout/sessions/" + sessionId,
  {
    headers: {
      Authorization: "Bearer sk_live_...",
    },
  }
);

const session = await response.json();

if (session.status === "complete" && session.payment_status === "paid") {
  // Paiement confirmé - traiter la commande
}

Webhooks

Pour une intégration robuste, utilisez les webhooks pour recevoir les notifications de paiement :
{
  "type": "checkout.session.completed",
  "data": {
    "object": {
      "id": "cs_abc123def456",
      "status": "complete",
      "payment_status": "paid",
      "amount_total": 35000,
      "currency": "XOF"
    }
  }
}
Voir Documentation Webhooks pour plus de détails.

Statuts de la session

StatutDescription
openSession active, en attente de paiement
completePaiement réussi
expiredSession expirée (non payée dans le délai)

Bonnes pratiques

  • Créez toujours les sessions côté serveur
  • Ne stockez jamais les clés API côté client
  • Vérifiez le statut via l’API ou les webhooks
  • Pré-remplissez l’email si vous le connaissez
  • Utilisez client_reference_id pour lier à votre commande
  • Personnalisez le submit_type selon le contexte
  • Gérez le cas où le client annule
  • Prévoyez l’expiration de la session
  • Utilisez les webhooks pour les cas edge

Prochaines étapes

Webhooks

Recevez des notifications en temps réel

Codes promo

Appliquez des réductions à vos sessions