# Guide de migration des prix dans Checkout

Découvrez comment mettre à jour votre intégration pour utiliser les prix dans Stripe Checkout.

L’intégration de l’[API Prices](https://docs.stripe.com/api/prices.md) inclut&nbsp;:

- Une modélisation unifiée des articles de Checkout&nbsp;: au lieu d’offres, de *SKU* (SKUs (Stock Keeping Units) represent a specific Product variation, taking into account any combination of attributes and cost (for instance, size, color, currency, cost)) et des postes de commande intégrés, chaque élément est un *prix*.
- La possibilité de présenter les images de produit pour les postes récurrents.
- La possibilité de créer un catalogue de produits et de prix réutilisable, contrairement aux postes ponctuels.
- La possibilité de créer une tarification intégrée pour les *abonnements* (A Subscription represents the product details associated with the plan that your customer subscribes to. Allows you to charge the customer on a recurring basis).
- Taux de taxe dynamiques pour les [abonnements](https://docs.stripe.com/billing/taxes/collect-taxes.md?tax-calculation=tax-rates#adding-tax-rates-to-checkout) et les [paiements ponctuels](https://docs.stripe.com/payments/checkout/taxes.md).

Si vous ne souhaitez pas migrer, vous pouvez continuer à utiliser votre intégration actuelle, mais nous n’ajouterons pas de nouvelles fonctionnalités. Vous pouvez utiliser les nouvelles offres ou les nouveaux prix récurrents que vous créez dans le paramètre `plan` de vos appels à l’API existants.

## Vue d’ensemble des produits et des prix

Les *prix* (Prices define how much and how often to charge for products. This includes how much the product costs, what currency to use, and the interval if the price is for subscriptions) sont une entité centrale de Stripe qui fonctionnent avec les abonnements, les *factures* (Invoices are statements of amounts owed by a customer. They track the status of payments from draft through paid or otherwise finalized. Subscriptions automatically generate invoices, or you can manually create a one-off invoice) et Checkout. Chaque prix est lié à un seul *produit* (Products represent what your business sells—whether that's a good or a service) et chaque produit peut avoir plusieurs prix. Différents biens physiques ou niveaux de service sont représentés par des produits.

Les prix définissent le prix de base, la devise et, pour les produits récurrents, le cycle de facturation. Cela vous permet de modifier et d’ajouter des prix sans avoir à modifier les détails de l’offre proposée. Par exemple, vous pouvez avoir un seul produit «&nbsp;gold&nbsp;» avec des prix de 10&nbsp;USD par mois, 100&nbsp;USD par an, 9&nbsp;EUR par mois et 90&nbsp;EUR par an. Vous pouvez également avoir un T-shirt bleu avec des prix de 20&nbsp;USD et 15&nbsp;EUR.

## Paiements ponctuels

Voici les modifications apportées aux intégrations pour les paiements ponctuels&nbsp;:

- Au lieu de postes ad-hoc (c’est-à-dire configurer le nom, le montant et la devise), la création d’une session Checkout demande la création d’un *produit* (Products represent what your business sells—whether that's a good or a service) et, généralement, d’un *prix* (Prices define how much and how often to charge for products. This includes how much the product costs, what currency to use, and the interval if the price is for subscriptions).
- Le [mode](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-mode) est désormais requis.

Le code côté client reste le même.

### Tableau de correspondance

Au lieu de définir chaque champ dans `line_items`, Checkout utilise les objets Product et Price sous-jacents pour déterminer le nom, la description, le montant, la devise et les images. Vous pouvez [créer des produits et des prix](https://docs.stripe.com/payments/accept-a-payment.md) à l’aide de l’API ou du Dashboard.

| Sans prix | Avec prix |
| --- | --- |
| `line_items.name` | `product.name` |
| `line_items.description` | `product.description` |
| `line_items.amount` | - `price.unit_amount`
- `price_data.unit_amount` (si défini lorsque la session Checkout est créée) |
| `line_items.currency` | - `price.currency`
- `price_data.currency` (si défini lorsque la session Checkout est créée) |
| `line_items.images` | `product.images` (affiche la première image fournie) |

### Code côté serveur pour les postes en série

Auparavant, vous pouviez uniquement créer des postes ponctuels en série. Avec l’API Prices, vous pouvez continuer à configurer vos postes en série, mais vous pouvez aussi définir vos tarifs de manière dynamique avec [price_data](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-line_items-price_data) lorsque vous créez la session Checkout.

Lorsque vous créez la session Checkout avec `price_data`, référencez un identifiant produit actuel avec [price_data.product](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-line_items-price_data-product) ou définissez les informations du produit de manière dynamique à l’aide de [price_data.product_data](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-line_items-price_data-product_data). L’exemple suivant illustre le flux pour créer un poste ponctuel.

#### curl

```bash
curl https://api.stripe.com/v1/checkout/sessions \
  -u <<YOUR_SECRET_KEY>>: \
  -d "line_items[0][quantity]"=1 \
  -d "line_items[0][price_data][unit_amount]"=2000 \
  -d "line_items[0][price_data][product_data][name]"=T-shirt \
  -d "line_items[0][price_data][product_data][description]"="Comfortable cotton t-shirt" \
  -d "line_items[0][price_data][product_data][images][]"="https://example.com/t-shirt.png" \
  -d "line_items[0][price_data][currency]"=usd \
  -d mode=payment \
  -d success_url="https://example.com/success" \
```

### Code côté serveur pour les prix ponctuels

Avec cette intégration, vous pouvez [créer un catalogue de produits et de prix](https://docs.stripe.com/payments/accept-a-payment.md) à l’avance au lieu de devoir définir le montant, la devise et le nom chaque fois que vous créez une session Checkout.

Vous pouvez créer un produit et un prix soit avec l’[API Prices](https://docs.stripe.com/api/prices.md), soit via le [Dashboard](https://dashboard.stripe.com/products). Vous aurez besoin de l’ID du prix pour créer la Checkout Session. L’exemple suivant montre comment créer un produit et un prix à l’aide de l’API&nbsp;:

#### curl

```bash

curl https://api.stripe.com/v1/products \
  -u<<YOUR_SECRET_KEY>>: \
  -d name=T-shirt \
  -d description="Comfortable cotton t-shirt" \
  -d "images[]"="https://example.com/t-shirt.png"

curl https://api.stripe.com/v1/prices \
  -u<<YOUR_SECRET_KEY>>: \
  -d product="{{PRODUCT_ID}}" \
  -d unit_amount=2000 \
  -d currency=usd

curl https://api.stripe.com/v1/checkout/sessions \
  -u <<YOUR_SECRET_KEY>>: \
  -d "line_items[0][quantity]"=1 \
  -d "line_items[0][price]"="{{PRICE_ID}}" \
  -d mode=payment \
  -d success_url="https://example.com/success" \
```

## Abonnements

Voici les modifications apportées aux intégrations pour les paiements récurrents&nbsp;:

- Au lieu de `subscription_data.items`, tous les postes sont transmis dans un champ [line_items](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-line_items) unique.
- Le [mode](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-mode) est désormais requis. Configurez `mode=subscription` si la session comprend des postes récurrents.

Le code côté client reste le même. Les plans actuels peuvent être utilisés partout où les prix récurrents sont acceptés.

### Code côté serveur avec des plans

Voici un exemple avant et après la création d’une session Checkout avec un essai et l’utilisation d’un plan actuel, qui peut être utilisé de manière interchangeable avec un prix. Le plan est maintenant transmis dans `line_items` au lieu de `subscription_data.items`.

#### curl

```bash
curl https://api.stripe.com/v1/checkout/sessions \
  -u <<YOUR_SECRET_KEY>>: \
  -d "line_items[0][price]"="{{PRICE_OR_PLAN_ID}}" \
  -d "line_items[0][quantity]"=1 \
  -d mode=subscription \
  -d success_url="https://example.com/success" \
```

### Code côté serveur pour un prix récurrent avec des frais d’installation

Si vous avez des abonnements récurrents avec des frais de mise en service uniques, créez le produit et le prix correspondant à ces frais uniques avant de créer la session Checkout. Consultez le [tableau de mappage](https://docs.stripe.com/payments/checkout/migrating-prices.md#mapping-table-server-one-time) pour savoir comment les champs `line_items` sont mappés avec cette intégration. Vous pouvez créer un produit et un prix via l’[API Prices](https://docs.stripe.com/api/prices.md) ou via le [Dashboard Stripe](https://dashboard.stripe.com/products). Vous pouvez également [créer l’élément ponctuel en ligne](https://docs.stripe.com/payments/checkout/migrating-prices.md#server-side-code-for-inline-items). L’exemple suivant utilise un identifiant de prix existant&nbsp;:

#### curl

```bash
curl https://api.stripe.com/v1/checkout/sessions \
  -u <<YOUR_SECRET_KEY>>: \
  -d "line_items[0][price]"="{{PRICE_OR_PLAN_ID}}" \
  -d "line_items[0][quantity]"=1 \
  -d "line_items[1][price]"="{{ONE_TIME_PRICE_ID}}" \
  -d "line_items[1][quantity]"=1 \
  -d mode=subscription \
  -d success_url="https://example.com/success" \
```

## Changements concernant l’objet Response

Au lieu de lister les éléments avec `display_items`, l’objet Checkout Session utilise `line_items.`Le champ `line_items` ne s’affiche pas par défaut comme dis `play_items` mais vous pouvez l’inclure en utilisant expand [lors](https://docs.stripe.com/api/expanding_objects.md) de la création d’une session Checkout&nbsp;:

#### curl

```bash
curl https://api.stripe.com/v1/checkout/sessions \
  -u <<YOUR_SECRET_KEY>>: \
  -d "payment_method_types[]"="card" \
  -d "mode"="payment" \
  -d "line_items[0][price]"="{{PRICE_ID}}" \
  -d "line_items[0][quantity]"=1 \
  -d "success_url"="https://example.com/success" \
  -d "expand[]"="line_items"
```

## Changements concernant les webhooks

Puisque le paramètre `line_items` peut être inclus, la réponse du *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) `checkout.session.completed` ne liste pas les éléments par défaut.La taille réduite de l’objet de réponse vous permet de recevoir plus rapidement vos webhooks Checkout. Vous pouvez récupérer les articles à l’aide de l’endpoint `line_items`&nbsp;:

#### curl

```bash
curl https://api.stripe.com/v1/checkout/sessions/{{CHECKOUT_SESSION_ID}}/line_items \
  -u <<YOUR_SECRET_KEY>>:
```

Pour plus d’informations, consultez le guide sur la [réalisation des commandes avec Checkout](https://docs.stripe.com/checkout/fulfillment.md).
