# Cas d’usage pour les tests

Apprenez à tester votre intégration.

*Les sandboxes* (A sandbox is an isolated test environment that allows you to test Stripe functionality in your account without affecting your live integration. Use sandboxes to safely experiment with new features and changes) sont les environnements de test de Stripe. Ils vous permettent de tester votre intégration sans effectuer de paiements ni de débits réels. Les environnements de test simulent la création d’objets réels sans impacter les transactions effectives ni déplacer de fonds réels. Vous pouvez accéder à vos environnements de test via le sélecteur de compte ou depuis la page [Environnements de test](https://dashboard.stripe.com/sandboxes) du Dashboard. Nous vous recommandons d’utiliser nos [cas d’usage de test d’assurance qualité (QA)](https://docs.stripe.com/testing-use-cases.md#testing-use-cases) et d’importer notre [collection Postman](https://docs.stripe.com/testing-use-cases.md#postman-collection) pour vous accompagner dans le processus de test.

## Environnements de test

Dans un environnement de test, vous pouvez débiter des cartes bancaires de test et créer des produits et des prix de test. Les environnements de test vous permettent de simuler des transactions afin de vérifier que votre intégration fonctionne correctement. Cela permet d’identifier les bugs ou erreurs dans votre implémentation Stripe avant de passer en production avec des paiements réels.

Après avoir créé un compte Stripe, vous êtes placé dans un environnement de test. Vous pouvez trouver un ensemble de [clés API de test](https://docs.stripe.com/keys.md#obtain-api-keys) sur la page d’accueil du Dashboard Stripe ou sur la page des clés API. Vous pouvez utiliser ces clés API pour créer et récupérer des données simulées en effectuant des requêtes vers l’API Stripe.

Pour commencer à accepter des paiements réels, vous devez [configurer votre compte Stripe](https://docs.stripe.com/get-started/account/set-up.md), quitter votre environnement de test via le sélecteur de compte et utiliser les clés API de mode production dans votre intégration. Stockez les clés API de mode production dans un coffre de secrets ou des variables d’environnement. Ne stockez pas les clés dans le code source ni dans des fichiers de configuration versionnés. Pour plus d’informations, consultez les [bonnes pratiques de gestion des clés API secrètes](https://docs.stripe.com/keys-best-practices.md).

> #### Impact sur le mode production lors de l’utilisation de l’environnement de test en mode test
> 
> Si vous modifiez des paramètres dans le Dashboard tout en étant dans les *environnements de test en mode test* (Every Stripe account includes the test mode sandbox. It shares some settings with live mode, has characteristics that differ from other sandboxes you create, but you can't delete it), ces modifications peuvent également s’appliquer au mode production. De nombreuses pages du Dashboard affichent une notification et désactivent les paramètres du mode production dans ces environnements. Dans ce cas, les paramètres encore activés peuvent être utilisés sans risque. Si aucune notification n’est affichée, considérez que toute modification effectuée dans l’environnement de test en mode test affecte les paramètres du mode production (sauf si une bannière de données de test est visible).

### Comparer les environnements de test

Votre compte Stripe inclut un environnement de test en mode test ainsi que la possibilité de créer des environnements de test supplémentaires. Bien que le mode test soit un environnement de test, il diffère des environnements de test classiques que vous pouvez créer. Comprendre ces différences peut vous aider à élaborer votre stratégie de test.

Pour les nouvelles intégrations, utilisez un environnement de test général au lieu de l’environnement de test du mode test. Les environnements de test généraux isolent les paramètres et les données du mode production et vous permettent de créer des environnements distincts pour le développement local, la CI et la simulation. Utilisez l’environnement de test du mode test pour les intégrations existantes qui en dépendent ou lorsqu’une fonctionnalité requise ne prend pas en charge les environnements de test généraux.

|  | Environnement de test en mode test | Environnements de test classiques |
| --- | --- | --- |
| Nombre d’environnements de test | Utilisez un seul environnement de test. | Utilisez jusqu’à cinq environnements de test. L’environnement de test en mode test n’est pas pris en compte dans cette limite de cinq. |
| Contrôle d’accès | Accordez à tous les utilisateurs les mêmes rôles et accès qu’en mode production. | Contrôlez l’accès plus strictement. Lorsque le niveau d’accès de l’environnement de test est **Privé**, seuls les administrateurs y ont automatiquement accès. Vous pouvez inviter des utilisateurs uniquement dans les environnements de test, sans leur accorder l’accès au mode production. Lorsque le niveau d’accès de l’environnement de test est **Développeur**, les administrateurs, les développeurs et les administrateurs d’environnement de test héritent automatiquement du rôle **Administrateur** dans l’environnement de test. Lorsque le niveau d’accès de l’environnement de test est **Tous les membres de l’équipe**, tous les utilisateurs disposant de rôles reçoivent les mêmes rôles et accès. |
| Paramètres | Paramètres partagés entre le mode production et l’environnement de test en mode test. Vous ne pouvez pas tester de nombreux paramètres de manière indépendante. | Isolez complètement les paramètres pour chaque sandbox. Copiez les paramètres du mode production au moment de la création et effectuez des tests indépendamment de votre intégration en production. |
| Prise en charge des API | Compatible avec V1 et [partiellement avec V2](https://docs.stripe.com/api-v2-overview.md#limitations). | Compatible avec V1 et V2. |
| Suppression | Impossible à supprimer. | Peut être supprimé. |
| Applications | Les installations nécessitent que l’application prenne en charge un environnement de test en mode test. | Les installations nécessitent que l’application prenne en charge des environnements de test. |
| Limites des produits | Vous ne pouvez pas tester la tarification *IC+* (A pricing plan where businesses pay the variable network cost for each transaction plus the Stripe fee rather than a flat rate for all transactions. This pricing model provides more visibility into payments costs) en environnement de test en mode test. | Vous ne pouvez pas tester la tarification *IC+* (A pricing plan where businesses pay the variable network cost for each transaction plus the Stripe fee rather than a flat rate for all transactions. This pricing model provides more visibility into payments costs) dans un sandbox. |
| Limites d’appels | Maintenez des [limites d’appels](https://docs.stripe.com/rate-limits.md) cohérentes. | Maintenez des [limites d’appels](https://docs.stripe.com/rate-limits.md) cohérentes. |
| Numéros de carte de test | Utilisez les mêmes [numéros de carte de test](https://docs.stripe.com/testing-use-cases.md#test-card-numbers). | Utilisez les mêmes [numéros de carte de test](https://docs.stripe.com/testing-use-cases.md#test-card-numbers). |

## Environnements de test et mode production

Toutes les requêtes API Stripe sont effectuées soit dans un environnement de test, soit en *mode production* (Use this mode when you’re ready to launch your app. Card networks or payment providers process payments). Les objets API d’un mode ne sont pas accessibles dans l’autre. Par exemple, un objet [Product](https://docs.stripe.com/api/products/object.md) de test ne peut pas être utilisé pour un paiement en mode production.

| Type | Quand l’utiliser | Objets | Comment l’utiliser | Considérations |
| --- | --- | --- | --- | --- |
| Environnements de test | Utilisez un environnement de test et les clés API test associées au fur et à mesure que vous développez votre intégration. Dans un bac à sable, les réseaux de cartes et les prestataires de services de paiement ne traitent pas les paiements. | Les appels d’API renvoient des objets simulés. Par exemple, vous pouvez récupérer et utiliser des objets de test [Customer](https://docs.stripe.com/api/customers/object.md), [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md), [Refund](https://docs.stripe.com/api/refunds/object.md) et [Subscription](https://docs.stripe.com/api/subscriptions/object.md). | Utilisez des [cartes et des comptes de test](https://docs.stripe.com/testing.md#cards). Vous ne pouvez pas accepter de moyens de paiement réels ni utiliser de vrais comptes. | [Identity](https://docs.stripe.com/identity.md) n’effectue aucun contrôle de vérification. Les objets [Account](https://docs.stripe.com/api/accounts/object.md) de Connect ne renvoient pas de champs sensibles. |
| Mode production | Utilisez le mode production et les clés API de production correspondantes au moment de lancer votre intégration et de commencer à accepter des fonds. En mode production, les paiements sont réellement traités par les réseaux de cartes et fournisseurs de services de paiement. | Les appels d’API renvoient des objets réels. Par exemple, vous pouvez récupérer et utiliser des objets réels [Customer](https://docs.stripe.com/api/customers/object.md), [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md), [Refund](https://docs.stripe.com/api/refunds/object.md) et [Subscription](https://docs.stripe.com/api/subscriptions/object.md). | Acceptez des cartes bancaires réelles et utilisez de vrais comptes client. Vous pouvez accepter des paiements, autorisations de paiement et captures réels à partir de cartes bancaires et de comptes. | Les litiges ont un flux plus nuancé et un [processus de test](https://docs.stripe.com/testing.md#disputes) plus simple. En outre, certains [moyens de paiement](https://docs.stripe.com/payments/payment-methods.md) ont un flux plus nuancé et nécessitent plus d’étapes. |

Le fait d’être dans un environnement de test dans le Dashboard n’affecte pas le code de votre intégration. Le comportement de votre code dépend des clés API de test et de production.

Les environnements de test ne font pas transiter de fonds par des banques réelles ni par des réseaux de cartes. Stripe met à disposition des primitives de test permettant de simuler [le succès et l’échec de versements](https://docs.stripe.com/payouts.md#test-payouts), les [litiges, demandes d’information et alertes de suspicion de fraude](https://docs.stripe.com/testing.md#disputes). Les simulations prises en charge varient selon le produit et l’intégration.

## Créer un environnement de test supplémentaire

Pour créer et configurer un environnement de test supplémentaire dans le Dashboard&nbsp;:

#### Créer l’environnement de test

1. Accédez à la page [Environnements de test](https://dashboard.stripe.com/sandboxes) du Dashboard.
2. Cliquez sur **Créer** en haut à droite.

#### Gérer l’accès

Les nouveaux environnements de test utilisent le niveau d’accès **Privé** par défaut et n’accordent pas automatiquement l’accès aux autres membres de l’équipe. Vous pouvez modifier le niveau d’accès pour accorder un accès plus large&nbsp;:

1. Accédez à la page [Environnements de test](https://dashboard.stripe.com/sandboxes) du Dashboard.
2. Cliquez sur le menu déroulant (⋯) de l’environnement de test.
3. Sélectionnez **Modifier l’accès**.

Vous pouvez gérer l’accès au niveau des entrepreneurs individuels de l’une des manières suivantes&nbsp;:

- Accorder l’accès à un [environnement de test spécifique](https://docs.stripe.com/sandboxes/dashboard/manage-access.md#grant-users-access-to-a-specific-sandbox).
- Accorder un [accès réservé aux tests](https://docs.stripe.com/sandboxes/dashboard/manage-access.md#grant-users-access-for-testing-only).
- Accorder l’accès à [tous les environnements de test](https://docs.stripe.com/sandboxes/dashboard/manage-access.md#grant-users-access-to-all-sandboxes-in-an-account).

#### Obtenir les identifiants de votre environnement de test

Utilisez ces identifiants pour connecter votre intégration à l’environnement de test. Enregistrez-les dans un emplacement accessible à votre équipe pour les tests.

1. Copiez les clés API de test de l’environnement de test.
2. Copiez l’ID du compte de l’environnement de test.

#### Mettre à jour l’environnement de test

Vous pouvez mettre à jour toutes les références qui dépendent des données de test que vous avez créées précédemment.

1. Configurez toutes les ressources dont vous avez besoin pour les tests, comme les produits, les clients, les abonnements et les moyens de paiement.
2. Mettez à jour toute partie de vos processus de test qui dépend d’ID d’objets de test spécifiques. Cela change lorsque vous créez de nouveaux objets dans un environnement de test.

#### (Facultatif) Configurer des simulations

Configurez des simulations pour tester votre intégration Billing. Les simulations vous permettent d’avancer le temps dans l’environnement de test afin que des ressources comme les abonnements changent d’état et déclenchent des événements webhook.

## Numéros de carte de test

Stripe fournit plusieurs [numéros de cartes bancaires de test](https://docs.stripe.com/testing.md#cards) qui vous permettent de simuler différents scénarios de paiement. Vous pouvez les utiliser pour créer des paiements fictifs en environnement de test, sans traiter de paiements réels ni de débits.

Lorsque vous utilisez des numéros de carte de test, vous pouvez saisir n’importe quelle date d’expiration future et n’importe quel code CVC à trois chiffres pour simuler un paiement réussi. Si vous souhaitez simuler un paiement qui a échoué, vous pouvez utiliser les numéros de carte de test et les codes CVC spécifiques fournis par Stripe.

Les numéros de cartes bancaires de test sont uniquement valides en environnement de test. Ne les utilisez pas pour des paiements réels.

## Supprimer les données de test

Pour supprimer toutes vos données de test de votre compte Stripe, procédez comme suit&nbsp;:

1. [Connectez-vous au Dashboard](https://dashboard.stripe.com) en utilisant votre compte Stripe existant.
2. Dans votre environnement de test, cliquez sur **Développeurs** > **Aperçu**.
3. Sous **Données de test**, cliquez sur **Examiner les données de test**. La boîte de dialogue vous présente une liste de tous vos objets de données de test existants.
4. Cliquez sur **Supprimer les données de test** pour lancer le processus de suppression. La suppression de vos données de test est irréversible.

Les environnements de test sont temporairement indisponibles pendant le processus de suppression.

> Vous devez supprimer manuellement les [Meters](https://docs.stripe.com/api/billing/meter.md), car l’objet n’est pas pris en charge par le processus automatisé de suppression des données de test.

## E-mail de test

Par défaut, Stripe n’envoie pas d’e-mails aux clients en environnement de test. Par exemple, un paiement ou une facture en environnement de test n’envoie pas d’e-mail de reçu au client. Les factures finalisées via l’API en environnement de test n’envoient pas non plus d’e-mail de reçu au client.

Si vous souhaitez que Stripe envoie des e-mails aux clients dans un environnement de test, vous pouvez procéder comme suit dans le Dashboard&nbsp;:

1. Créer et envoyer manuellement une facture à un client spécifique.
2. Envoyer manuellement un reçu pour une facture payée.

Pour vérifier les e-mails pour les factures et les reçus, définissez l’adresse e-mail de votre [équipe](https://dashboard.stripe.com/settings/team) sur l’objet `Customer` ou l’attribut `receipt_email` sur le PaymentIntent.

## Cas d’usage pour les tests

Le tableau suivant présente des cas d’usage pour les tests d’assurance qualité (QA). L’état associé à une carte bancaire lors d’un test peut avoir une incidence sur les tests ultérieurs utilisant la même carte. Lorsqu’un test dépend de l’état de la carte, utilisez une carte de test différente pour chaque scénario de bout en bout indépendant.

> #### N’utilisez pas la recherche pour vérifier les modifications récentes
> 
> La cohérence des données de recherche est assurée à terme. Par conséquent, les objets que vous créez ou mettez à jour peuvent ne pas apparaître immédiatement dans les résultats de recherche. Si un objet est manquant, ne relancez pas la requête qui l’a créé au risque de créer des objets en double, tels que les objets `Customer` ou `Subscription`. En savoir plus sur la [fraîcheur des données de recherche](https://docs.stripe.com/search.md#data-freshness).
> 
> Pour vérifier un objet récemment créé ou mis à jour, récupérez-le à l’aide d’un ID déterministe provenant de la requête de création, du rappel ou de l’URL de retour, tel qu’un ID de Checkout Session. Si vous n’en avez pas, utilisez l’endpoint de liste approprié pour une disponibilité immédiate.

| **Cas d’usage** | **Action** |
| --- | --- |
| Réussite du paiement (capture immédiate) | - Aucune erreur.
- Le paiement apparaît avec l’état **Réussi** dans le Dashboard, sous [Payments](https://dashboard.stripe.com/payments).
- Stripe capture le paiement. |
| Réussite de l’autorisation d’un PaymentIntent ([capture de fonds pour plus tard](https://docs.stripe.com/payments/place-a-hold-on-a-payment-method.md)) | ```json
{
  ...
  "capture_method": "manual",
  ...
  "status": "requires_capture",
  ...
}
``` |
| Réussite de la capture d’un PaymentIntent (capture immédiate ou [capture de fonds pour plus tard](https://docs.stripe.com/payments/place-a-hold-on-a-payment-method.md)) | ```json
  {
    ...
    "status": "succeeded",
    ...
  }
``` |
| Échec du paiement | Le paiement apparaît avec l’état **Échec** dans le Dashboard, sous [Payments](https://dashboard.stripe.com/payments).
```json
{
  "error": {
    "charge": "ch_orWziM4j7CiRL8J4",
    "code": "card_declined",
    "decline_code": "<<REASON HERE>>",
    "doc_url": "https://docs.stripe.com/error-codes#card-declined",
    "message": "Your card was declined.",
    "type": "card_error"
  }
}
``` |
| Blocage par Radar | Quelle que soit la version de Radar que vous utilisez, il peut bloquer un paiement en raison d’un [risque élevé](https://docs.stripe.com/radar/transaction-risk-prevention.md#high-risk) ou d’une [règle](https://docs.stripe.com/radar/rules.md). La réponse est la même que celle renvoyée lorsqu’un paiement échoue. |
| Paiement contesté | - Le paiement apparaît avec l’état **Contesté** dans le Dashboard, sous [Payments](https://dashboard.stripe.com/payments).
- Stripe débite le montant du paiement majoré des frais de litige du solde, crée un objet `Dispute` ainsi que son événement `charge.dispute.created` associé.

Il s’agit d’un résultat asynchrone.

```json
{
  "object": {
    "id": "du_orWziM4j7CiRL8J4",
    "object": "dispute",
    "charge_id": "ch_orWziM4j7CiRL8J4",
    ...
    "status": "needs_response"
  }
}
``` |
| Demande d’information sur un paiement ouverte | Les demandes d’information sont similaires aux litiges, mais présentent trois différences majeures&nbsp;: aucun fonds n’est retiré, à moins que nous ne transformions une demande d’information en litige&nbsp;; elles restent remboursables jusqu’à ce qu’elles fassent l’objet d’un litige&nbsp;; et elles possèdent un ensemble d’états différent. Dans ce cas, Stripe déclenche un événement `charge.dispute.created`.

Il s’agit d’un résultat asynchrone.

```json
{
  "object": {
    "id": "du_orWziM4j7CiRL8J4",
    "object": "dispute",
    "charge_id": "ch_orWziM4j7CiRL8J4",
    ...
    "is_charge_refundable": true,
    ...
    "status": "warning_needs_response"
  }
}
``` |
| Litige gagné | - Lorsqu’un client remporte un litige, les fonds du paiement initial sont restitués sur le compte, moins les frais de litige.
- Stripe met à jour l’objet `Dispute` existant et déclenche un événement `charge.dispute.closed`.

Il s’agit d’un résultat asynchrone.

```json
{
  "object": {
    "id": "du_orWziM4j7CiRL8J4",
    "object": "dispute",
    "charge_id": "ch_orWziM4j7CiRL8J4",
    ...
    "status": "won"
  }
}
``` |
| Litige perdu | Lorsqu’un client perd un litige, Stripe met à jour l’objet `Dispute` existant et déclenche un événement `charge.dispute.closed`.

Il s’agit d’un résultat asynchrone.

```json
{
  "object": {
    "id": "du_orWziM4j7CiRL8J4",
    "object": "dispute",
    "charge_id": "ch_orWziM4j7CiRL8J4",
    ...
    "status": "lost"
  }
}
``` |
| Demande d’information gagnée | Lorsque vous remportez une demande d’information, votre solde reste le même, car les fonds ne sont pas retirés lors de l’ouverture initiale de la demande d’information. Stripe met à jour l’objet `Dispute` existant et déclenche un événement `charge.dispute.closed`.

Il s’agit d’un résultat asynchrone.

```json
{
  "object": {
    "id": "du_orWziM4j7CiRL8J4",
    "object": "dispute",
    "charge_id": "ch_orWziM4j7CiRL8J4",
    ...
    "status": "warning_closed"
  }
}
``` |
| Demande d’information perdue | - Lorsque vous perdez une demande d’information, elle se transforme en litige.
- Lorsqu’elle se transforme en litige, son état change avec un événement `charge.dispute.updated`, et les fonds sont retirés lors d’un événement `charge.dispute.funds_withdrawn`&nbsp;:

Il s’agit d’un résultat asynchrone.

```json
{
  "object": {
    "id": "du_orWziM4j7CiRL8J4",
    "object": "dispute",
    "charge_id": "ch_orWziM4j7CiRL8J4",
    ...
    "status": "needs_response"
  }
}
``` |
| Paiement remboursé | Vous pouvez voir le paiement avec le statut `Refunded` dans le Dashboard sous l’onglet [Paiement](https://dashboard.stripe.com/payments).

```json
{
  "id": "re_orWziM4j7CiRL8J4",
  "object": "refund",
  "amount": "<<FULL AMOUNT>>",
  "charge": "ch_orWziM4j7CiRL8J4",
  ...
  "payment_intent": "pi_orWziM4j7CiRL8J4", // if you're using PaymentIntents
  ...
  "status": "succeeded"
}
``` |
| Paiement partiellement remboursé | - Vous pouvez voir le paiement avec le statut `Refunded` dans le Dashboard sous l’onglet [Paiement](https://dashboard.stripe.com/payments).
- Le montant du remboursement est différent du montant du paiement, et vous pouvez toujours contester les paiements partiellement remboursés.

```json
{
  "id": "re_orWziM4j7CiRL8J4",
  "object": "refund",
  "amount": "<<PARTIAL AMOUNT>>",
  "charge": "ch_orWziM4j7CiRL8J4",
  ...
  "payment_intent": "pi_orWziM4j7CiRL8J4", // if you're using PaymentIntents
  ...
  "status": "succeeded"
}
``` |
| Le solde du compte devient négatif | Assurez-vous de tester un solde négatif sur Stripe et de vérifier que vos comptes bancaires peuvent accepter nos débits. |
| Virement réussi | Si vous activez les webhooks pour un [virement réussi](https://docs.stripe.com/api/events/types.md#event_types-payout.paid) (recommandé), testez votre gestion de l’événement.

Il s’agit d’un résultat asynchrone. |
| Échec de virement | Si vous activez les webhooks pour un [virement qui a échoué](https://docs.stripe.com/api/events/types.md#event_types-payout.failed) (recommandé), testez votre gestion de l’événement.

Il s’agit d’un résultat asynchrone. |

## La collection Postman de Stripe

Postman est un outil de développement d’API courant. Pour vous aider à intégrer Stripe, nous fournissons une [collection Postman spécifique dédiée aux paiements](https://www.getpostman.com/collections/080102f58f29afa081d7) avec les outils dont vous avez besoin pour tester le composant côté serveur de votre intégration.

### Importer la collection

Pour commencer, vous devez accéder à l’application Postman. Vous pouvez utiliser la version pour navigateur ou pour ordinateur de bureau. Après avoir lancé l’application, importez la collection.

Pour démarrer ce processus sur le web, cliquez sur **Import (importer)** dans le coin supérieur gauche, puis sur **Link (lien)**. Insérez le lien de la [collection dédiée aux paiements](https://www.getpostman.com/collections/080102f58f29afa081d7). Si vous utilisez l’application de bureau Postman, cliquez sur **File (fichier)** > **Import (importer)**. Une fois l’importation réussie, la collection apparaît sous **Collections**.

### Utiliser la collection

Pour utiliser la collection, accédez à la collection que vous venez d’importer, puis cliquez sur **Variables**. Copiez votre clé secrète d’environnement de test Stripe depuis le Dashboard Stripe, puis collez-la dans le champ `Initial Value` de la ligne `secret_key`. Une fois cette étape terminée, vous pouvez commencer à effectuer des requêtes.

Des scripts remplissent d’autres variables pendant l’exécution de la collection. Par exemple, lors de la création d’un [Customer](https://docs.stripe.com/api/customers/create.md), d’un [Price](https://docs.stripe.com/api/prices/create.md), d’un [Charge](https://docs.stripe.com/api/charges/object.md) ou d’un [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md), le système enregistre cet ID par le biais d’un script dans la collection, le rendant accessible pour les requêtes ultérieures, comme l’émission d’un remboursement.

## See also

- [Tester votre intégration](https://docs.stripe.com/testing.md)
- [Sandboxes](https://docs.stripe.com/sandboxes.md)
- [Clés API](https://docs.stripe.com/keys.md)
