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

# Fonctionnalités de Paiement

> Paiement optimisé pour la conversion, conforme à la réglementation mondiale avec support multi-devises, multi-langues, calcul automatique des taxes, codes de réduction, add-ons, et collecte d'adresses intelligente.

<Frame>
  <img src="https://mintcdn.com/dodopayments/Vafy52417ELLVDIx/images/checkout/cover.png?fit=max&auto=format&n=Vafy52417ELLVDIx&q=85&s=2dc0a0db8e021e39fb17e84fc12eb5f9" alt="Page de paiement" style={{ maxHeight: '500px', width: 'auto' }} width="2844" height="1556" data-path="images/checkout/cover.png" />
</Frame>

<Info>
  Le checkout Dodo Payments est un parcours de paiement optimisé pour la conversion et conforme à l’échelle mondiale, conçu pour les produits numériques et les entreprises SaaS. Il prend en charge plusieurs devises, langues, taxes, remises, modules complémentaires et workflows de conformité adaptés aux entreprises.
</Info>

<CardGroup cols={2}>
  <Card title="Checkout Sessions API" icon="code" href="/api-reference/checkout-sessions/create">
    Créez des sessions de checkout hébergées de manière programmatique.
  </Card>

  <Card title="Preview Checkout" icon="eye" href="/api-reference/checkout-sessions/preview">
    Calculez les prix et les taxes avant de créer une session.
  </Card>

  <Card title="Payment Methods" icon="credit-card" href="/features/payment-methods">
    Méthodes de paiement prises en charge et options de configuration.
  </Card>
</CardGroup>

## Devise Adaptative

La Devise Adaptative permet aux clients de payer dans leur devise locale préférée, améliorant ainsi la confiance et les taux de conversion.

### Comment ça fonctionne

1. **Activer** : Activez la devise adaptative depuis **Paramètres → Business**
2. **Sélectionner** : Les clients peuvent changer de devise directement à la caisse
3. **Convertir** : Les prix sont convertis dynamiquement en utilisant les taux de change en temps réel
4. **Afficher** : Le montant final à payer est affiché de manière transparente avant le paiement

<Frame>
  <img src="https://mintcdn.com/dodopayments/Vafy52417ELLVDIx/images/checkout/c1.png?fit=max&auto=format&n=Vafy52417ELLVDIx&q=85&s=c2f9ee4b1748448d4ab7ab23954dcc64" alt="Sélecteur de devises à la caisse" style={{ maxHeight: '500px', width: '70%' }} width="794" height="858" data-path="images/checkout/c1.png" />
</Frame>

<Card title="Adaptive Currency" icon="money-bill-transfer" href="/features/adaptive-currency">
  En savoir plus sur les devises prises en charge, les frais de conversion et la gestion des remboursements.
</Card>

## Paiement Multilingue

Dodo Payments prend en charge plusieurs langues sur la page de paiement, permettant aux clients de finaliser leurs paiements dans une langue avec laquelle ils sont à l'aise.

<Frame>
  <img src="https://mintcdn.com/dodopayments/Vafy52417ELLVDIx/images/checkout/c2.png?fit=max&auto=format&n=Vafy52417ELLVDIx&q=85&s=ecc6eb8db604e37433d8797c51768577" alt="Sélecteur de langue à la caisse" style={{ maxHeight: '500px', width: '70%' }} width="794" height="858" data-path="images/checkout/c2.png" />
</Frame>

### Points Clés

* Sélecteur de langue disponible directement lors du paiement
* Texte de l'interface utilisateur, étiquettes et messages système sont localisés
* Améliore l'accessibilité et la conversion internationale

### Langues prises en charge

La page de paiement prend en charge 21 langues :

| Language   | Code |
| ---------- | ---- |
| Arabic     | `ar` |
| Catalan    | `ca` |
| Chinese    | `zh` |
| Dutch      | `nl` |
| English    | `en` |
| French     | `fr` |
| German     | `de` |
| Hebrew     | `he` |
| Indonesian | `id` |
| Italian    | `it` |
| Japanese   | `ja` |
| Korean     | `ko` |
| Malay      | `ms` |
| Polish     | `pl` |
| Portuguese | `pt` |
| Romanian   | `ro` |
| Russian    | `ru` |
| Spanish    | `es` |
| Swedish    | `sv` |
| Thai       | `th` |
| Turkish    | `tr` |

<Tip>
  Vous pouvez forcer une langue spécifique sur le checkout en définissant le paramètre `force_language` lors de la création d’une session de checkout. Consultez l’[API des sessions de checkout](/developer-resources/checkout-session#14-forcing-a-language) pour plus de détails.
</Tip>

## Calcul automatique des taxes

Les taxes sont calculées automatiquement en fonction de l’adresse de facturation du client, garantissant la conformité aux exigences de la TPS, de la TVA et des taxes de vente sans configuration manuelle.

### Fonctionnement du calcul des taxes

<Steps>
  <Step title="Location Detection">
    Les règles fiscales sont appliquées selon le pays du client (et la région lorsque cela est applicable).
  </Step>

  <Step title="Dynamic Updates">
    Le montant des taxes se met à jour automatiquement lorsque :

    * le pays change
    * l’adresse est mise à jour
  </Step>

  <Step title="Transparent Display">
    Le détail final des taxes est affiché clairement avant le paiement.
  </Step>
</Steps>

<Tip>
  Le calcul des taxes est entièrement automatisé. Aucune configuration manuelle n’est requise pour les biens numériques standard et les produits SaaS.
</Tip>

## Prise en charge de l’identification fiscale des entreprises

Pour les entreprises enregistrées, le checkout permet aux clients de saisir leur numéro d’identification fiscale (par exemple, numéro de TVA/TVH).

### Que se passe-t-il lorsqu’un identifiant fiscal est saisi

* L’éligibilité fiscale est validée en temps réel
* Les exonérations fiscales ou règles d’autoliquidation applicables sont appliquées
* Le montant des taxes se met instantanément à jour dans le checkout

<Frame>
  <img src="https://mintcdn.com/dodopayments/Vafy52417ELLVDIx/images/checkout/c3.png?fit=max&auto=format&n=Vafy52417ELLVDIx&q=85&s=76451fed5636a6ef3e5c3ec7f6a96c9f" alt="Entrée de l'identifiant fiscal de l'entreprise à la caisse" style={{ maxHeight: '500px', width: '70%' }} width="1440" height="1716" data-path="images/checkout/c3.png" />
</Frame>

<Info>
  Cela est particulièrement utile pour les services SaaS B2B et les services numériques où les clients professionnels peuvent bénéficier d’exonérations fiscales.
</Info>

## Codes de réduction

Les clients peuvent appliquer les codes promotionnels ou de réduction que vous avez créés dans le tableau de bord directement sur la page de paiement.

### Expérience de checkout

1. Le client saisit le code de réduction
2. La réduction est validée instantanément
3. Le prix mis à jour et les économies sont clairement affichés

<Frame>
  <img src="https://mintcdn.com/dodopayments/Vafy52417ELLVDIx/images/checkout/c4.png?fit=max&auto=format&n=Vafy52417ELLVDIx&q=85&s=639dcc94ddd1b41fdd6ff200c2a28e47" alt="Entrée du code de réduction à la caisse" style={{ maxHeight: '500px', width: '70%' }} width="794" height="858" data-path="images/checkout/c4.png" />
</Frame>

### Intégration API

Pré-appliquez un ou plusieurs codes de réduction empilés ou activez le champ de saisie de réduction :

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  discount_codes: ['WELCOME20'], // Pre-apply one or more codes (max 20, applied in order)
  feature_flags: {
    allow_discount_code: true // Show discount input field
  },
  return_url: 'https://yoursite.com/return'
});
```

<Info>
  `discount_codes` accepte un tableau de jusqu'à 20 codes qui s'empilent dans l'ordre. Le champ unique `discount_code` est obsolète mais fonctionne toujours — les intégrations existantes n'ont pas besoin de changer immédiatement. Migrez vers `discount_codes` lorsque cela est pratique pour utiliser l'empilement et la forme de réponse enrichie.
</Info>

<Card title="Discount Codes" icon="percent" href="/features/discount-codes">
  Découvrez comment créer et gérer les codes de réduction.
</Card>

<Card title="Validate Discount by Code" icon="tag" href="/api-reference/discounts/get-discount-by-code">
  Recherchez et validez les réductions en utilisant les noms de code.
</Card>

## Collection d'adresses intelligentes

Le processus de paiement prend en charge une saisie d'adresse flexible pour une finalisation plus rapide.

### Options disponibles

| Option                      | Description                                                                                                                      |
| --------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| **Google Address Autofill** | Sélection rapide avec autocomplétion                                                                                             |
| **Manual Entry**            | Contrôle total pour les adresses complètes                                                                                       |
| **Country Selection**       | Influence la logique fiscale et de conformité                                                                                    |
| **Minimal Address**         | Collecte uniquement le pays (et le code postal si nécessaire pour la taxe) — voir [Mode Adresse Minimale](#minimal-address-mode) |

<Tip>
  La collecte d'adresses équilibre la rapidité, la précision, et la couverture mondiale pour maximiser la conversion tout en assurant la conformité.
</Tip>

### Mode Adresse Minimale

Pour une conversion maximale, activez la collecte d'adresses minimales pour réduire les frictions au moment du paiement. Lorsque `minimal_address` est défini à `true`, le paiement ne collecte que :

* **Pays** — toujours requis pour la détermination fiscale
* **Code postal** — uniquement dans les régions où c'est nécessaire pour la taxe de vente, la TVA ou le calcul de la TPS

Tous les autres champs d'adresse (rue, ville, état) sont ignorés, accélérant ainsi considérablement la finalisation du paiement.

<Frame>
  <img src="https://mintcdn.com/dodopayments/7dyPZdWH7JucnLrT/images/changelog/minimal-address.png?fit=max&auto=format&n=7dyPZdWH7JucnLrT&q=85&s=cd0e5d6f8c32e052c7ab93a88d841fb8" alt="Mode adresse minimale affichant uniquement les champs pays et code postal au paiement" style={{ maxHeight: '500px', width: 'auto' }} width="1459" height="817" data-path="images/changelog/minimal-address.png" />
</Frame>

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  minimal_address: true,
  return_url: 'https://yoursite.com/return'
});
```

<Info>
  La collecte d'adresses complètes reste le choix par défaut. Activez `minimal_address` pour les produits numériques et les flux SaaS où les informations de facturation complètes ne sont pas requises.
</Info>

<Card title="Minimal Address Reference" icon="address-card" href="/developer-resources/checkout-session#request-body">
  Voir la référence complète du paramètre `minimal_address` dans le guide de l'API des sessions de paiement.
</Card>

## Collecte du Numéro de Téléphone

Contrôlez si le champ du numéro de téléphone apparaît lors du paiement — et s'il est requis — en utilisant les indicateurs de fonctionnalité de la session de paiement.

| Indicateur                      | Par défaut | Comportement                                                                                              |
| ------------------------------- | ---------- | --------------------------------------------------------------------------------------------------------- |
| `allow_phone_number_collection` | `true`     | Affiche le champ du numéro de téléphone sur le formulaire de paiement                                     |
| `require_phone_number`          | `false`    | Rend le champ du numéro de téléphone obligatoire (la validation du formulaire impose une valeur non vide) |

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [{ product_id: 'prod_abc', quantity: 1 }],
  feature_flags: {
    allow_phone_number_collection: true,
    require_phone_number: true
  },
  return_url: 'https://yoursite.com/return'
});
```

<Warning>
  `require_phone_number: true` nécessite `allow_phone_number_collection: true`. L'API rejette les sessions où la collecte du téléphone est désactivée alors que le numéro de téléphone est requis.
</Warning>

<Tip>
  Utilisez `require_phone_number` pour le SaaS B2B, les industries réglementées ou tout flux où vous avez besoin d'un canal de contact vérifié pour le support, la révision de la fraude ou la conformité.
</Tip>

## Champs Personnalisés

Collectez des informations supplémentaires auprès des clients lors du paiement en définissant des champs de formulaire personnalisés. Cela est utile pour recueillir des données comme le nom de l'entreprise, la taille de l'équipe, la source de recommandation ou toute autre information spécifique à votre activité.

### Types de Champs Disponibles

| Type       | Description                                |
| ---------- | ------------------------------------------ |
| `text`     | Entrée de texte sur une ligne              |
| `number`   | Entrée numérique                           |
| `email`    | Adresse e-mail avec validation             |
| `url`      | URL avec validation                        |
| `date`     | Sélecteur de date                          |
| `dropdown` | Sélectionnez parmi les options prédéfinies |
| `boolean`  | Bascule Oui/Non                            |

### Exemple

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  custom_fields: [
    {
      key: 'company_name',
      label: 'Company Name',
      field_type: 'text',
      required: true
    },
    {
      key: 'team_size',
      label: 'Team Size',
      field_type: 'dropdown',
      required: true,
      options: ['1-10', '11-50', '51-200', '200+']
    }
  ],
  return_url: 'https://yoursite.com/return'
});
```

<Info>
  Les réponses des clients sont automatiquement incluses dans les charges utiles des webhooks (`payment.succeeded`, `subscription.active`) et les réponses API via le tableau `custom_field_responses`. Vous pouvez définir jusqu'à 5 champs personnalisés par session de paiement.
</Info>

<Card title="Custom Fields Guide" icon="input-text" href="/developer-resources/checkout-session#15-collecting-custom-fields">
  En savoir plus sur la configuration des champs personnalisés et l'accès aux réponses.
</Card>

## Politique de Confidentialité & Acceptation des Conditions

Pour garantir la transparence légale et de conformité :

* Les liens [Politique de Confidentialité](https://dodopayments.com/privacy-policy) et [Conditions d'Achat](https://dodopayments.com/buyer-terms) sont clairement affichés lors du paiement
* Les clients reconnaissent explicitement ces conditions avant de terminer le paiement

<Info>
  Cela aide à respecter les exigences mondiales de protection des consommateurs et de confidentialité des données, y compris la conformité au RGPD.
</Info>

## Paiement de Collection

Les Collections de Produits permettent une expérience de paiement unifiée où les clients peuvent voir et sélectionner plusieurs produits associés (par exemple, des plans Starter, Pro, Enterprise) en un seul paiement.

### Comment Cela Fonctionne

1. **Tous les produits affichés** : Les clients voient chaque produit actif de la collection
2. **Premier produit pré-sélectionné** : Le premier produit de la collection est automatiquement sélectionné
3. **Comparer les options** : Les clients peuvent comparer les prix et les fonctionnalités avant de choisir
4. **Sélection unique** : Après avoir sélectionné un produit, le paiement se poursuit avec le flux de paiement standard

### Création d'un Paiement de Collection

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_collection_id: 'pdc_abc123',
  product_cart: [], // Required: pass an empty array for collection checkout
  return_url: 'https://yoursite.com/return'
});
```

<Warning>
  Lorsque vous utilisez `product_collection_id`, transmettez un tableau `product_cart` vide. Les codes de réduction ne peuvent pas être pré-appliqués lors de la création de la session.
</Warning>

<Card title="Product Collections" icon="layer-group" href="/features/product-collections">
  Apprenez à créer et à gérer des collections de produits pour des expériences de paiement unifiées.
</Card>

## Configuration de la Session de Paiement

Contrôlez le comportement de paiement avec l'API des Sessions de Paiement :

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  customer: {
    email: 'customer@example.com',
    name: 'Jane Doe'
  },
  billing_currency: 'EUR', // Set specific currency
  discount_codes: ['PROMO10'],
  feature_flags: {
    allow_discount_code: true
  },
  return_url: 'https://yoursite.com/return',
  cancel_url: 'https://yoursite.com/pricing', // Optional: where to redirect on cancel
  metadata: {
    order_ref: 'ORD-12345'
  }
});
```

<Info>
  Après le paiement, les clients sont redirigés vers votre `return_url` avec des paramètres de requête ajoutés automatiquement — incluant `payment_id` ou `subscription_id`, `status`, `email`, et `license_key` (le cas échéant). Voir le [guide des Sessions de Paiement](/developer-resources/checkout-session#request-body) pour la liste complète.
</Info>

<CardGroup cols={2}>
  <Card title="Checkout Sessions API" icon="code" href="/api-reference/checkout-sessions/create">
    Référence complète de l'API pour les sessions de paiement.
  </Card>

  <Card title="Checkout Integration Guide" icon="book" href="/developer-resources/checkout-session">
    Guide étape par étape pour intégrer le paiement.
  </Card>
</CardGroup>

## Personnalisation du Thème de Paiement

Personnalisez l'apparence de la page de paiement pour correspondre à votre marque en utilisant le paramètre `customization.theme_config` lors de la création d'une session de paiement via l'API. Configurez les couleurs, polices, rayons de bordure et texte des boutons pour les modes clair et sombre.

<Frame>
  <img src="https://mintcdn.com/dodopayments/rTHkQICkStFgSdh-/images/checkout/theme-example.png?fit=max&auto=format&n=rTHkQICkStFgSdh-&q=85&s=5277b69d67c90fd87e7c5d9c125fee12" alt="Page de paiement avec thème personnalisé" style={{ maxHeight: '500px', width: 'auto' }} width="2856" height="1490" data-path="images/checkout/theme-example.png" />
</Frame>

<Card title="Design & Theme Customization" icon="palette" href="/features/design">
  Configurez visuellement les thèmes depuis le tableau de bord avec des thèmes préconstruits, typographies, couleurs, et aperçu en direct.
</Card>

<Info>
  Cette section couvre la configuration du thème pour l'**API côté serveur** en utilisant `customization.theme_config`. Si vous utilisez le **Checkout SDK** (overlay ou inline checkout), consultez la section personnalisation du thème dans [Overlay Checkout](/developer-resources/overlay-checkout#theme-customization) qui utilise des propriétés en camelCase (par exemple, `bgPrimary` au lieu de `bg_primary`).
</Info>

### Options de Configuration du Thème

| Propriété            | Description                                                                                                 |
| -------------------- | ----------------------------------------------------------------------------------------------------------- |
| `light`              | Configuration des couleurs pour le mode clair                                                               |
| `dark`               | Configuration des couleurs pour le mode sombre                                                              |
| `font_primary_url`   | URL pour la police principale                                                                               |
| `font_secondary_url` | URL pour la police secondaire                                                                               |
| `font_size`          | Taille de police : `xs`, `sm`, `md`, `lg`, `xl`, `2xl`                                                      |
| `font_weight`        | Poids de la police : `normal`, `medium`, `bold`, `extraBold`                                                |
| `radius`             | Rayon de bordure pour les éléments UI (par exemple, `4px`, `0.5rem`, `8px`)                                 |
| `pay_button_text`    | Texte personnalisé pour le bouton de paiement (par exemple, « Terminer l'achat », « S'abonner maintenant ») |

### Configuration des Couleurs (Mode Clair/Sombre)

Chaque mode (`light` et `dark`) prend en charge les propriétés de couleur suivantes :

| Propriété                | Description                             |
| ------------------------ | --------------------------------------- |
| `bg_primary`             | Couleur de fond principale              |
| `bg_secondary`           | Couleur de fond secondaire              |
| `text_primary`           | Couleur de texte principale             |
| `text_secondary`         | Couleur de texte secondaire             |
| `text_placeholder`       | Couleur de texte de l'espace réservé    |
| `text_error`             | Couleur de texte des erreurs            |
| `text_success`           | Couleur de texte de succès              |
| `border_primary`         | Couleur de bordure principale           |
| `border_secondary`       | Couleur de bordure secondaire           |
| `button_primary`         | Couleur de fond du bouton principal     |
| `button_primary_hover`   | Couleur de survol du bouton principal   |
| `button_secondary`       | Couleur de fond du bouton secondaire    |
| `button_secondary_hover` | Couleur de survol du bouton secondaire  |
| `button_text_primary`    | Couleur de texte du bouton principal    |
| `button_text_secondary`  | Couleur de texte du bouton secondaire   |
| `input_focus_border`     | Couleur de la bordure focus de l'entrée |

<Info>
  Tous les champs de couleur acceptent les formats de couleur CSS standards :

  * Hex : `#fff`, `#ffffff`, `#ffffffff`
  * RGB/RGBA : `rgb(255, 255, 255)`, `rgba(255, 255, 255, 0.5)`
  * HSL/HSLA : `hsl(120, 100%, 50%)`, `hsla(120, 100%, 50%, 0.5)`
  * Couleurs nommées : `red`, `blue`, `transparent`
</Info>

### Exemple

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  customization: {
    theme_config: {
      // Custom fonts
      font_primary_url: 'https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap',
      font_size: 'md',
      font_weight: 'medium',
      radius: '8px',
      pay_button_text: 'Complete Purchase',
      
      // Light mode colors
      light: {
        bg_primary: '#ffffff',
        bg_secondary: '#f5f5f5',
        text_primary: '#1a1a1a',
        text_secondary: '#666666',
        button_primary: '#0066ff',
        button_primary_hover: '#0052cc',
        button_text_primary: '#ffffff',
        border_primary: '#e0e0e0'
      },
      
      // Dark mode colors
      dark: {
        bg_primary: '#1a1a1a',
        bg_secondary: '#2d2d2d',
        text_primary: '#ffffff',
        text_secondary: '#a0a0a0',
        button_primary: '#3385ff',
        button_primary_hover: '#4d99ff',
        button_text_primary: '#ffffff',
        border_primary: '#404040'
      }
    }
  },
  return_url: 'https://yoursite.com/return'
});
```

<Tip>
  Vous n'avez pas besoin de spécifier toutes les propriétés de couleur. Toutes les propriétés non spécifiées utiliseront les valeurs de thème par défaut.
</Tip>
