# Configurer un abonnement avec PayPal Comment créer un abonnement et débiter votre client avec PayPal. # Page hébergée par Stripe > This is a Page hébergée par Stripe for when payments-ui-type is stripe-hosted. View the full page at https://docs.stripe.com/billing/subscriptions/paypal?payments-ui-type=stripe-hosted. Découvrez l’[exemple GitHub](https://github.com/stripe-samples/checkout-single-subscription) ou explorez la [démo](https://checkout.stripe.dev/checkout). Suivez ce guide pour configurer un *abonnement* (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) avec [PayPal](https://docs.stripe.com/payments/paypal.md) et *Checkout* (A low-code payment integration that creates a customizable form for collecting payments. You can embed Checkout directly in your website, redirect customers to a Stripe-hosted payment page, or create a customized checkout page with Stripe Elements). Une [session Checkout](https://docs.stripe.com/api/checkout/sessions.md) représente les détails de l’intention d’achat de votre client. Créez une session Checkout lorsqu’un client souhaite démarrer un abonnement. Après avoir redirigé un client vers une session Checkout, Stripe affiche un formulaire de paiement qui permet au client d’effectuer son achat. Une fois le paiement finalisé, Stripe redirige le client vers votre site. > #### Activer les paiements récurrents PayPal > > Stripe active automatiquement les paiements récurrents pour la plupart des utilisateurs lorsqu’ils [activent les paiements PayPal](https://docs.stripe.com/payments/paypal/activate.md) dans le Dashboard Stripe. Cependant, en raison des politiques de PayPal et des restrictions régionales, vous devrez peut-être [activer](https://docs.stripe.com/payments/paypal/set-up-future-payments.md#enable-recurring-payments) manuellement les paiements récurrents PayPal dans le Dashboard. ## Configurer Stripe [Côté serveur] Pour commencer, vous devez créer un compte Stripe. [S’inscrire](https://dashboard.stripe.com/register). Utilisez nos bibliothèques officielles pour accéder à l’API Stripe depuis votre application : #### Ruby ```bash # Available as a gem sudo gem install stripe ``` ```ruby # If you use bundler, you can add this line to your Gemfile gem 'stripe' ``` ## Créer des produits et tarifs récurrents > L’API Prices unifie la modélisation des abonnements et des achats ponctuels sur Stripe. Les intégrations qui n’utilisent pas cette API restent [prises en charge](https://support.stripe.com/questions/prices-api-and-existing-checkout-integrations), mais certaines fonctionnalités de Checkout ne sont compatibles qu’avec Prices. Pour passer à l’API Prices, consultez le [guide de migration](https://docs.stripe.com/payments/checkout/migrating-prices.md). Pour utiliser Checkout, vous devez d’abord créer un *produit* (Products represent what your business sells—whether that's a good or a service) et un *tarif* (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). Vous devez créer un produit pour chacune de vos marchandises ou chacun de vos niveaux de service. Un produit peut être associé à un ou plusieurs tarifs. Par exemple, vous pouvez créer un *produit* logiciel qui dispose de quatre *tarifs* : 10 USD par mois, 100 USD par an, 9 EUR par mois et 90 EUR par an. Vous pouvez ainsi modifier et ajouter des tarifs sans modifier les informations de vos produits sous-jacents. Pour créer des produits et des tarifs, vous pouvez soit passer [par l’API](https://docs.stripe.com/api/prices.md), soit utiliser [le Dashboard Stripe](https://dashboard.stripe.com/products). Si votre tarif est déterminé au moment du paiement (par exemple, lorsque le client fixe le montant d’un don) ou si vous ne souhaitez pas créer de tarif prédéfini, vous pouvez créer des [tarifs en série](https://docs.stripe.com/billing/subscriptions/paypal.md#creating-prices-inline) lors de la création d’une session Checkout. #### Dashboard Avant de commencer à configurer les produits, assurez-vous que vous êtes dans un environnement de test. Ensuite, définissez les biens et services que vous prévoyez de vendre. Pour créer un nouveau produit et un nouveau prix : - Accédez à la section [Produits](https://dashboard.stripe.com/products) du Dashboard. - Cliquez sur **Ajouter un produit**. - Sélectionnez « Récurrent » lors de la définition du tarif. - Configurez le plan tarifaire. Vous pouvez définir plusieurs plans tarifaires avec différents paramètres pour chaque produit récurrent. Un ID est généré pour chaque tarif, que vous pouvez utiliser comme référence pendant le processus de paiement. > Les produits créés en environnement de test peuvent être copiés en mode production pour vous éviter d’avoir à les recréer. Dans la vue Détails du produit du Dashboard, cliquez sur **Copier vers le mode production** en haut à droite. Vous ne pouvez effectuer cette opération qu’une seule fois par produit créé en environnement de test. Si vous modifiez un produit test par la suite, ces modifications ne seront pas répercutées en mode production. #### API Lors de la création d’un [produit](https://docs.stripe.com/api/products.md) de base avec l’API, seul le champ `name` est obligatoire. Les attributs `name`, `description` et `images` que vous indiquez sont présentés aux clients sur Checkout. ```curl curl https://api.stripe.com/v1/products \ -u "<>:" \ -d "name=Blue banana" ``` Créez ensuite une API [Price](https://docs.stripe.com/api/prices.md) pour définir le montant à facturer pour votre produit, et à quelle fréquence. Cela inclut le prix du produit, la devise à utiliser et sa période de facturation. #### curl ```bash curl https://api.stripe.com/v1/prices \ -u <>: \ -d "product"="{{ PRODUCT_ID }}" \ -d "unit_amount"=1000 \ -d "currency"="eur" \ -d "recurring[interval]=month" ``` Cet ID de tarif est la façon dont vous faites référence au produit lorsque vous commencez le processus de paiement avec Checkout. ## Créer une session Checkout [Côté client] [Côté serveur] Ajoutez à votre site Web un bouton de paiement qui appelle un endpoint côté serveur afin de créer une session Checkout. ```html Checkout
``` ### Paramètres de la session Checkout Consultez la section [Créer une session Checkout](https://docs.stripe.com/api/checkout/sessions/create.md) pour obtenir la liste complète des paramètres que vous pouvez utiliser. Créez une session Checkout avec l’ID d’un [tarif](https://docs.stripe.com/api/prices.md) existant. Assurez-vous d’avoir défini le mode sur `subscription` et d’avoir transmis au moins un tarif récurrent. Vous pouvez ajouter des tarifs ponctuels en plus des tarifs récurrents. Après avoir créé la session Checkout, redirigez votre client vers l’[URL](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-url) renvoyée dans la réponse. #### cURL ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \ -d "payment_method_types[]"="paypal" \ -d "line_items[][price]"="{{PRICE_ID}}" \ -d "line_items[][quantity]"=1 \ -d "mode"="subscription" \ -d "success_url"="https://example.com/success?session_id={CHECKOUT_SESSION_ID}" \ ``` Une fois le paiement effectué, votre client est redirigé vers `success_url`. Il s’agit d’une page de votre site Web indiquant au client que le paiement a réussi. Mettez l’ID de session à disposition sur votre page de confirmation de paiement en incluant la variable de modèle `{CHECKOUT_SESSION_ID}` dans l’URL `success_url`, comme illustré ci-dessus. Par défaut, les sessions Checkout expirent 24 heures après leur création. > Ne vous fiez pas uniquement à la redirection vers `success_url` pour détecter l’initiation d’un paiement, car : > > - Des utilisateurs malveillants pourraient accéder directement au `success_url` sans payer et obtenir l’accès à vos biens ou à vos services. - Après un paiement réussi, les clients peuvent fermer l’onglet de leur navigateur avant d’être redirigés vers `success_url`. ## Confirmer que le paiement a abouti > Lorsqu’un client s’abonne à Stripe via PayPal, il reçoit deux reçus distincts : le premier de la part de Stripe, et le second de PayPal. Une fois que votre client a mené à bien son paiement, Stripe le redirige vers l’URL que vous avez spécifiée dans le paramètre `success_url`. Il s’agit en général d’une page de votre site Web qui l’informe que son paiement a abouti. Utilisez le Dashboard, un *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) personnalisé ou un plugin tiers pour recevoir des événements après le paiement comme envoyer une confirmation de commande par e-mail à votre client, enregistrer la vente dans une base de données ou lancer un workflow de livraison. #### Dashboard Les paiements réussis apparaissent dans la [liste des paiements](https://dashboard.stripe.com/payments) du Dashboard. Lorsque vous cliquez sur un paiement, vous accédez à la page d’informations correspondante. La section **Récapitulatif du paiement** présente les informations de facturation et la liste des articles achetés, que vous pouvez utiliser pour traiter manuellement la commande. ![Récapitulatif du paiement](https://b.stripecdn.com/docs-statics-srv/assets/source.16d3029596357c80a8efdbbfe106108a.png) > Stripe peut vous aider à rester informé sur les paiements entrants en vous envoyant des notifications par e-mail chaque fois qu’un client effectue un paiement. Utilisez le Dashboard pour [configurer les notifications par e-mail](https://dashboard.stripe.com/settings/user). #### Webhooks [Définissez des webhooks](https://docs.stripe.com/webhooks.md) pour gérer par programmation des événements après paiement. La manière la plus rapide de développer et tester des webhooks localement est d’utiliser l’[interface de ligne de commande Stripe](https://docs.stripe.com/stripe-cli.md). Une fois l’interface installée, vous pouvez transmettre des événements sur votre serveur : ```bash stripe listen --forward-to localhost:4242/webhook Ready! Your webhook signing secret is '{{WEBHOOK_SIGNING_SECRET}}' (^C to quit) ``` Avec un endpoint de webhook, votre client est redirigé vers l’URL `success_url` lorsque vous [avez confirmé avoir reçu l’événement](https://docs.stripe.com/webhooks.md#acknowledge-events-immediately). Si votre endpoint est hors service ou si la réception de l’événement n’est pas confirmée correctement, votre client est redirigé vers l’URL `success_url` 10 secondes après la réussite d’un paiement. L’exemple d’endpoint suivant démontre comment accuser réception des événements et les gérer. #### Ruby ```ruby # Don't put any keys in code. See https://docs.stripe.com/keys-best-practices. # Find your keys at https://dashboard.stripe.com/apikeys. Stripe.api_key = '<>' # You can find your endpoint's secret in your webhook settings endpoint_secret = 'whsec_...' # Using Sinatra post '/webhook' do payload = request.body.read event = nil # Verify webhook signature and extract the event # See https://stripe.com/docs/webhooks#verify-events for more information. sig_header = request.env['HTTP_STRIPE_SIGNATURE'] begin event = Stripe::Webhook.construct_event( payload, sig_header, endpoint_secret ) rescue JSON::ParserError => e # Invalid payload status 400 return rescue Stripe::SignatureVerificationError => e # Invalid signature status 400 return end # Handle the checkout.session.completed event if event['type'] == 'checkout.session.completed' session = event['data']['object'] # Fulfill the purchase... handle_checkout_session(session) end status 200 end ``` Vous pouvez utiliser des plugins comme [Zapier](https://stripe.com/works-with/zapier) pour automatiser la mise à jour de vos systèmes d’exécution des achats avec les informations provenant des paiements Stripe. Voici quelques exemples d’automatisation prise en charge par les plugins : - Mise à jour des feuilles de calcul utilisées pour le suivi de commandes suite à des paiements ayant abouti - Mise à jour des systèmes de gestion d’inventaire suite à des paiements ayant abouti - Déclenchement de notifications aux équipes internes du service client en utilisant des applications de messagerie ou de chat ## Tester l'intégration Testez votre intégration PayPal avec vos [clés API de test](https://docs.stripe.com/keys.md#test-live-modes) en accédant à la page de redirection. Vous pouvez tester l’aboutissement du paiement en l’authentifiant sur la page de redirection. Le PaymentIntent passera alors de l’état `requires_action` à `succeeded`. Pour tester un échec d’authentification de l’utilisateur, utilisez vos clés API de test et accédez à la page de redirection. Sur cette page, cliquez sur **Échec du paiement test**. Votre PaymentIntent bascule alors de l’état `requires_action` à `requires_payment_method`. ## Optional: Ajouter des frais d'installation ponctuels [Côté serveur] En mode `subscription`, vous pouvez transmettre des tarifs récurrents, mais également ajouter des tarifs ponctuels. Ces tarifs ne s’appliquent qu’à la première *facture* (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) générée par un abonnement. Cette fonctionnalité permet d’ajouter des frais initiaux ou d’autres types de frais ponctuels à un abonnement. #### curl ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \ -d "payment_method_types[]"="paypal" \ -d "line_items[0][price]"="{{RECURRING_PRICE_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?session_id={CHECKOUT_SESSION_ID}" ``` ## Optional: Créer des tarifs et produits en série [Côté serveur] Lors de la création d’une session Checkout, vous pouvez transmettre des ID de tarifs existants, mais aussi définir des tarifs. Commencez par définir un [Product](https://docs.stripe.com/api/products.md), puis créez une session Checkout à l’aide de l’ID de produit et transmettez-le dans le paramètre [price_data](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-line_items-price_data) avec les informations `unit_amount`, `currency`, et `recurring` : #### curl ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \ -d "payment_method_types[]"=paypal \-d line_items[0][price_data][unit_amount]=5000 \ -d line_items[0][price_data][currency]=eur\ -d line_items[0][price_data][product]="{{PRODUCT_ID}}" \ -d line_items[0][price_data][recurring][interval]=month \ -d line_items[0][quantity]=1 \ -d mode=subscription \ -d success_url="https://example.com/success?session_id={CHECKOUT_SESSION_ID}" \ ``` Si vous avez également besoin de créer des produits en série, vous pouvez le faire à l’aide du paramètre [product_data](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-line_items-price_data-product_data) : #### curl ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \ -d "payment_method_types[]"=paypal \-d "line_items[][price_data][currency]"=eur\ -d "line_items[][price_data][product_data][name]"=T-shirt \ -d "line_items[][price_data][unit_amount]"=2000 \ -d "line_items[][quantity]"=1 \ -d "mode"="subscription" \ -d success_url="https://example.com/success?session_id={CHECKOUT_SESSION_ID}" \ ``` ## Optional: Clients existants [Côté serveur] Si vous avez déjà créé un objet *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) pour représenter un client, utilisez l’argument [customer](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-customer) pour transmettre son ID lors de la création d’une Checkout Session. Vous pouvez ainsi vous assurer que tous les objets créés pendant la Session seront associés au bon objet Customer. Lorsque vous transmettez un ID de client, Stripe utilise également l’adresse e-mail enregistrée dans l’objet Customer pour renseigner automatiquement le champ correspondant de la page Checkout. Si le client change son adresse e-mail sur la page Checkout, l’objet Customer sera mis à jour une fois qu’un paiement aura été traité. #### curl ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \ -d "customer"="{{CUSTOMER_ID}}" \ -d "payment_method_types[]"="paypal" \ -d "line_items[][price]"="{{PRICE_ID}}" \ -d "line_items[][quantity]"=1 \ -d "mode"="subscription" \ -d "success_url"="https://example.com/success" ``` ## Optional: Renseigner les données automatiquement [Côté serveur] Si vous avez précédemment collecté l’adresse e-mail de votre client et que vous souhaitez la renseigner automatiquement dans la session Checkout, transmettez le paramètre [customer_email](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-customer_email) lors de la création de la session. #### curl ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \-d customer_email="customer@example.com" \ -d "payment_method_types[]"=paypal \ -d "line_items[][price]"="{{PRICE_ID}}" \ -d "line_items[][quantity]"=1 \ -d mode=subscription \ -d success_url="https://example.com/success" \ ``` ## Optional: Gérer les périodes d'essai [Côté serveur] Vous pouvez utiliser [trial_end](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-subscription_data-trial_end) ou [trial_period_days](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-subscription_data-trial_period_days) sur la session Checkout pour spécifier la durée de la période d’essai. Dans cet exemple, nous utilisons `trial_period_days` pour créer une session Checkout pour un abonnement avec une période d’essai de 30 jours. #### curl ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \ -d "payment_method_types[]"=paypal \ -d "line_items[][price]"="{{PRICE_ID}}" \ -d "line_items[][quantity]"=1 \-d "subscription_data[trial_period_days]"=30 \ -d mode=subscription \ -d success_url="https://example.com/success?session_id={CHECKOUT_SESSION_ID}" \ ``` Checkout affiche les informations suivantes automatiquement pour les abonnements avec essais : - Période d’essai - Fréquence et montant des frais après expiration de la période d’essai Pour en savoir plus sur les exigences de conformité, consultez les [guides sur la gestion des exigences de conformité](https://docs.stripe.com/billing/subscriptions/trials/manage-trial-compliance.md) ou [ de prise en](https://support.stripe.com/questions/2020-visa-trial-subscription-requirement-changes-guide) charge. ## Optional: Taux de taxe [Côté serveur] Pour appliquer des taxes aux *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), vous pouvez préciser des [taux de taxe](https://docs.stripe.com/billing/taxes/tax-rates.md) (taxe de vente, TVA, GST, etc.) dans les sessions Checkout. - Utilisez des taux de taxe fixes lorsque vous connaissez le taux de taxe exact applicable à vos clients avant qu’ils n’engagent le processus de paiement (par exemple, si vous ne vendez qu’à des clients basés au Royaume-Uni et que vous facturez toujours une TVA de 20 %). - Avec l’API *Prices* (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), vous pouvez utiliser des taux de taxe dynamiques lorsque vous avez besoin de davantage d’informations sur votre client (par exemple, son adresse de facturation ou de livraison) pour déterminer le taux de taxe à lui appliquer. Avec les taux de taxe dynamiques, vous créez des taux de taxe propres à chaque région : par exemple, un taux de TVA de 20 % pour vos clients basés au Royaume-Uni et de 7,25 % pour vos clients basés en Californie. Stripe tente ensuite d’apparier la localisation de vos clients à l’un de ces taux de taxe. #### Taux de taxe fixes Configurez [subscription_data.default_tax_rates](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-subscription_data-default_tax_rates) pour appliquer un taux de taxe par défaut à un abonnement utilisant Checkout. #### curl ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \ -d "payment_method_types[]"=paypal \ -d "line_items[][price]"="{{PRICE_ID}}" \ -d "line_items[][quantity]"=1 \-d "subscription_data[default_tax_rates][]"="{{TAX_RATE_ID}}" \ -d mode=subscription \ -d success_url="https://example.com/success" \ ``` Vous pouvez également spécifier des [line_items.tax_rates](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-line_items-tax_rates) ou des [subscription_data.items.tax_rates](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-subscription_data-items-tax_rates) pour appliquer des taux de taxe à des plans ou des postes de facture spécifiques. #### curl ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \ -d "payment_method_types[]"="paypal" \ -d "line_items[][price]"="{{PRICE_ID}}" \ -d "line_items[][quantity]"=1 \-d "line_items[][tax_rates][0]"="{{TAX_RATE_ID}}" \ -d "mode"="subscription" \ -d "success_url"="https://example.com/success" \ ``` #### Taux de taxe dynamiques Transmettez le tableau de [taux de taxes](https://docs.stripe.com/api/tax_rates/object.md) à [line_items.dynamic_tax_rates](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-line_items-dynamic_tax_rates). Chaque taux doit être associé à un paramètre `country` [pris en charge](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-line_items-dynamic_tax_rates), et pour les États-Unis, à un paramètre `state`. Cette liste met en correspondance les taux de taxe avec l’[adresse de livraison](https://docs.stripe.com/payments/collect-addresses.md), l’adresse de facturation ou le pays de votre client. L’adresse de livraison est prioritaire sur l’adresse de facturation pour déterminer le taux de taxe à appliquer. Si vous ne collectez pas l’adresse de livraison ou de facturation de vos clients, le taux de taxe est déterminé en fonction de leur pays de résidence (et de leur code postal, le cas échéant). Si vous ne transmettez pas de taux de taxe pour l’adresse de livraison, l’adresse de facturation ou le pays de vos clients, aucun taux n’est appliqué. #### curl ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \ -d "payment_method_types[]"="paypal" \ -d "line_items[][price]"="{{PRICE_ID}}" \ -d "line_items[][quantity]"=1 \-d "line_items[][dynamic_tax_rates][]"="{{FIRST_TAX_RATE_ID}}" \ -d "line_items[][dynamic_tax_rates][]"="{{SECOND_TAX_RATE_ID}}" \ -d "mode"="subscription" \ -d "success_url"="https://example.com/success" \ ``` > [subscription_data.default_tax_rates](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-subscription_data-default_tax_rates) et [line_items.tax_rates](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-line_items-tax_rates) ne peuvent pas être utilisés avec [line_items.dynamic_tax_rates](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-line_items-dynamic_tax_rates). Vous pouvez utiliser les exportations de données de Stripe pour renseigner les rapports périodiques nécessaires dans le cadre du reversement des taxes. Veuillez consulter la page [Déclaration et versement des taxes](https://docs.stripe.com/billing/taxes/tax-rates.md#remittance) pour obtenir plus d’informations. ## Optional: Ajouter des bons de réduction [Côté serveur] Vous pouvez appliquer des [bons de réduction](https://docs.stripe.com/billing/subscriptions/coupons.md) aux abonnements dans une session Checkout en configurant des [ristournes](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-discounts). Les bons de réduction priment sur tous les autres bons du client. Si vous créez un abonnement pour un [client existant](https://docs.stripe.com/billing/subscriptions/paypal.md#handling-existing-customers), tout bon de réduction associé au client est appliqué aux *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) à l’abonnement. #### curl ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \ -d "payment_method_types[]"=paypal \ -d "line_items[][price]"="{{PRICE_ID}}" \ -d "line_items[][quantity]"=1 \-d "discounts[][coupon]"="{{COUPON_ID}}" \ -d "mode"="subscription" \ -d success_url="https://example.com/success" \ ``` ### Ajouter des codes promotionnels destinés aux clients Vous pouvez également activer des [codes promotionnels](https://docs.stripe.com/billing/subscriptions/coupons.md#promotion-codes) en utilisant le paramètre [allow_promotion_codes](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-allow_promotion_codes) dans les sessions Checkout. Lorsque `allow_promotion_codes` est activé sur une session Checkout, vos clients voient une case de code promotionnel s’afficher. Créez vos [bons de réduction](https://docs.stripe.com/billing/subscriptions/coupons.md) et codes promotionnels via le Dashboard ou l’API afin que vos clients puissent les utiliser dans Checkout. #### curl ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \ -d "payment_method_types[]"="paypal" \ -d "line_items[0][price_data][unit_amount]"=2000 \ -d "line_items[0][price_data][currency]"="eur" \ -d "line_items[0][price_data][product]={{PRODUCT_ID}}" \ -d "line_items[0][price_data][recurring][interval]=month" \ -d "line_items[0][quantity]"=1 \-d "allow_promotion_codes"="true" \ -d "mode"="subscription" \ -d "success_url"="https://example.com/success" \ ``` ## See also - [Personnaliser votre intégration](https://docs.stripe.com/payments/checkout/customization.md) - [Gérer les abonnements avec le portail client](https://docs.stripe.com/billing/subscriptions/build-subscriptions.md?payment-ui=checkout&ui=stripe-hosted) # API directe > This is a API directe for when payments-ui-type is direct-api. View the full page at https://docs.stripe.com/billing/subscriptions/paypal?payments-ui-type=direct-api. Suivez ce guide pour configurer un *abonnement* (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) avec [PayPal](https://docs.stripe.com/payments/paypal.md) comme moyen de paiement. ## Before you begin - Pour accepter les PayPal Abonnement sur Stripe, vous devez [activer les paiements récurrents PayPal dans le Dashboard](https://docs.stripe.com/payments/paypal/set-up-future-payments.md?platform=web#enable-recurring-payments). - Cette fonctionnalité n’est disponible que pour des lieux entreprise spécifiques. Pour [vérifier votre admissibilité](https://docs.stripe.com/payments/paypal.md), vérifiez les lieux entreprise. ## Créer un produit et un tarif [Dashboard] Les [produits](https://docs.stripe.com/api/products.md) correspondent aux articles ou services que vous vendez. Les [tarifs](https://docs.stripe.com/api/prices.md) définissent le montant et la fréquence des paiements facturés pour un produit. Le tarif prend en compte la valeur du produit, la devise que vous acceptez et s’il s’agit d’un paiement ponctuel ou récurrent. Si vous n’avez que quelques produits et tarifs, créez-les et gérez-les dans le Dashboard. Ce guide prend comme exemple un service de banque d’images qui débite ses clients d’un montant de 15 EUR pour un abonnement mensuel. Pour modéliser ceci : 1. Go to the [Products](https://dashboard.stripe.com/products?active=true) page and click **Create product**. 1. Saisissez un **Nom** pour le produit. Vous pouvez éventuellement ajouter une **Description** et télécharger une image du produit. 1. Select a **Product tax code**. Learn more about [product tax codes](https://docs.stripe.com/tax/tax-codes.md). 1. Sélectionnez **Récurrent**. Saisissez ensuite **** pour le prix et sélectionnez **** comme devise. 1. Choose whether to **Include tax in price**. You can either use the default value from your [tax settings](https://dashboard.stripe.com/test/settings/tax) or set the value manually. In this example, select **Auto**. 1. Pour **Période de facturation**, sélectionnez **Mensuel**. 1. Click **More pricing options**. Then select **Flat rate** as the pricing model for this example. Learn more about [flat rate](https://docs.stripe.com/products-prices/pricing-models.md#flat-rate) and other [pricing models](https://docs.stripe.com/products-prices/pricing-models.md). 1. Add an internal **Price description** and [Lookup key](https://docs.stripe.com/products-prices/manage-prices.md#lookup-keys) to organize, query, and update specific prices in the future. 1. Cliquez sur **Suivant**. Cliquez ensuite sur **Ajouter un produit**. Après avoir créé le produit et le tarif, enregistrez l’ID de tarif de manière à pouvoir l’utiliser dans les étapes ultérieures. La page des tarifs affiche l’ID dont le format est similaire à ce qui suit : `price_G0FvDp6vZvdwRZ`. ## Créer ou récupérer un objet Customer avant la configuration [Côté serveur] Pour réutiliser un moyen de paiement PayPal en vue de paiements ultérieurs, associez-le à un objet *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments). Créez un objet Customer lorsque votre client crée un compte auprès de votre entreprise. En associant l’ID de l’objet Customer à votre propre représentation interne de ce client, vous pourrez par la suite récupérer et utiliser les informations du moyen de paiement enregistré. Si votre client n’a pas créé de compte, vous pouvez tout de même lui créer un objet Customer, puis l’associer à votre représentation interne de ce compte du client par la suite. ```curl curl -X POST https://api.stripe.com/v1/customers \ -u "<>:" ``` ## Créer un SetupIntent [Côté serveur] Un [SetupIntent](https://docs.stripe.com/api/setup_intents.md) est un objet qui représente votre intention de configurer le moyen de paiement de votre client en vue de paiements futurs et qui suit les étapes de cette configuration. Créez un [SetupIntent](https://docs.stripe.com/api/setup_intents.md) sur votre serveur en définissant l’attribut [payment_method_types](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-payment_method_types) sur `paypal` et en indiquant l’[id](https://docs.stripe.com/api/customers/object.md#customer_object-id) de l’objet *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments). ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_types[]=paypal" \ -d "payment_method_data[type]=paypal" ``` Le SetupIntent contient une clé [client_secret](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-client_secret), une clé unique que vous devez transmettre à Stripe côté client afin de rediriger votre client vers PayPal pour que celui-ci autorise le mandat. ## Rediriger votre client [Côté client] Lorsqu’un client tente de configurer son compte PayPal pour les prochains paiements, nous vous conseillons d’utiliser [Stripe.js](https://docs.stripe.com/js.md) pour confirmer le SetupIntent. Stripe.js est notre bibliothèque JavaScript de base pour le développement de tunnels de paiement. Elle gère automatiquement les opérations complexes telles que la redirection décrite ci-dessous, et vous permet d’ajouter facilement d’autres moyens de paiement à votre intégration par la suite. Intégrez le script Stripe.js à votre page de paiement en l’ajoutant en haut de votre fichier HTML. ```html Checkout ``` Créez une instance de Stripe.js avec le code JavaScript suivant sur votre page de paiement. ```javascript // Set your publishable key. Remember to change this to your live publishable key in production! // See your keys here: https://dashboard.stripe.com/apikeys const stripe = Stripe('<>', {} ); ``` Pour confirmer la configuration côté client, transmettez la clé secrète du client de l’objet SetupIntent créé à l’étape 3. La clé secrète du client est distincte de vos clés API, qui authentifient les requêtes à l’API Stripe. Cette clé doit être utilisée avec prudence, car elle peut servir à finaliser le paiement. Elle ne doit être ni enregistrée, ni intégrée dans des URL, ni dévoilée à d’autres personne que votre client. ### Confirmer la configuration PayPal Afin de vous autoriser à utiliser son compte PayPal pour ses prochains paiements, votre client sera redirigé vers la page du contrat de facturation PayPal, où il devra donner son approbation avant d’être redirigé vers votre site Web. Utilisez [stripe.confirmPayPalSetup](https://docs.stripe.com/js/setup_intents/confirm_paypal_setup) pour gérer la redirection vers PayPal et finaliser la configuration. Ajoutez une URL `return_url` à cette fonction pour indiquer à Stripe vers quelle page rediriger l’utilisateur une fois que ce dernier approuve le contrat de facturation sur le site Web de PayPal. ```javascript // Redirects away from the client const {error} = await stripe.confirmPayPalSetup( '{{SETUP_INTENT_CLIENT_SECRET}}', { return_url: 'https://example.com/setup/complete', mandate_data: { customer_acceptance: { type: 'online', online: { infer_from_client: true } } }, } ); if (error) { // Inform the customer that there was an error. } ``` Vous trouverez l’ID du payeur du moyen de paiement et l’ID du contrat de facturation sur le [mandat](https://docs.stripe.com/api/mandates/.md) ainsi généré, sous la propriété [payment_method_details](https://docs.stripe.com/api/mandates/object.md#mandate_object-payment_method_details-paypal). Vous trouverez également l’adresse e-mail et l’ID de payeur de l’acheteur dans la propriété [paypal](https://docs.stripe.com/api/payment_methods/object.md#payment_method_object-paypal) de [PaymentMethod](https://docs.stripe.com/api/payment_methods.md). | Champ | Valeur | | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | | `payer_email` | L’adresse e-mail du payeur sur son compte PayPal. | | `payer_id` | L’identifiant unique du compte PayPal du payeur. | | `billing_agreement_id` | L’ID de contrat de facturation PayPal (BAID). Il s’agit d’un identifiant généré par PayPal et qui représente le mandat entre l’entreprise et le client. | ## Surveiller les webhooks [Côté serveur] Pour confirmer la bonne autorisation d’un contrat de facturation par votre client, il est préférable d’utiliser une méthode telle que les [webhooks](https://docs.stripe.com/payments/payment-intents/verifying-status.md#webhooks) plutôt que d’attendre que votre client se rende sur la page d’état du paiement. Lorsqu’un client autorise le contrat de facturation, le SetupIntent émet un événement *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) [setup_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-setup_intent.succeeded). Si un client n’autorise pas correctement le contrat de facturation, le SetupIntent émet l’événement webhook [setup_intent.setup_failed](https://docs.stripe.com/api/events/types.md#event_types-setup_intent.setup_failed) et revient à l’état `requires_payment_method`. Si un client révoque le contrat de facturation depuis son compte PayPal, cela génère un événement [mandate.updated](https://docs.stripe.com/api/events/types.md#event_types-mandate.updated). ## Créer l'abonnement [Côté serveur] Créez un [abonnement](https://docs.stripe.com/api/subscriptions.md) avec le tarif et le client : ```curl curl https://api.stripe.com/v1/subscriptions \ -u "<>:" \ -d customer=cus_Gk0uVzT2M4xOKD \ -d default_payment_method=pm_1F0c9v2eZvKYlo2CJDeTrB4n \ -d "items[0][price]=price_F52b2UdntfQsfR" \ -d "expand[0]=latest_invoice.confirmation_secret" \ -d off_session=true ``` Dans le cadre d’un abonnement, le client est débité automatiquement dans la mesure où son [moyen de paiement par défaut](https://docs.stripe.com/api/customers/create.md#create_customer-invoice_settings-default_payment_method) est défini. Lorsqu’un paiement aboutit, son état dans le [Dashboard Stripe](https://dashboard.stripe.com/test/subscriptions) bascule sur **Actif**. Le tarif que vous avez créé précédemment détermine les facturations à venir. ## Gérer l'état de l'abonnement [Côté client] Lorsque le paiement initial est effectué avec succès, le état de l’abonnement est `active` et aucune autre action n’est nécessaire. Lorsque les paiements échouent, le état est modifié en fonction du **état d’abonnement** configuré dans vos [paramètres de recouvrement automatique](https://docs.stripe.com/invoicing/automatic-collection.md). Informez le client après un échec et [débiter-le avec un autre moyen de paiement](https://docs.stripe.com/billing/subscriptions/overview.md#requires-payment-method). ## Mettre un abonnement à jour [Côté serveur] Lorsque vous mettez à jour un abonnement, vous devez préciser `off_session=true`. Dans le cas contraire, tout nouveau paiement nécessite de rediriger l’utilisateur vers PayPal pour confirmation. Par exemple, si vous souhaitez modifier la quantité d’un article inclus dans l’abonnement, vous pouvez utiliser : ```curl curl https://api.stripe.com/v1/subscriptions \ -u "<>:" \ -d customer=cus_Gk0uVzT2M4xOKD \ -d default_payment_method=pm_1F0c9v2eZvKYlo2CJDeTrB4n \ -d "items[0][price]=price_F52b2UdntfQsfR" \ -d "items[0][quantity]=2" \ -d off_session=true ``` ## Tester l'intégration Testez votre intégration PayPal avec vos [clés API de test](https://docs.stripe.com/keys.md#test-live-modes) en accédant à la page de redirection. Vous pouvez tester l’aboutissement du paiement en l’authentifiant sur la page de redirection. Le PaymentIntent passera alors de l’état `requires_action` à `succeeded`. Pour tester un échec d’authentification de l’utilisateur, utilisez vos clés API de test et accédez à la page de redirection. Sur cette page, cliquez sur **Échec du paiement test**. Votre PaymentIntent bascule alors de l’état `requires_action` à `requires_payment_method`. ## Optional: Définir la période de facturation Lorsque vous créez un abonnement, le système définit automatiquement le cycle de facturation par défaut. Par exemple, si un client s’abonne à un plan mensuel le 7 septembre, il est ensuite facturé le 7 de chaque mois. Certaines entreprises préfèrent définir le cycle de facturation manuellement afin de pouvoir facturer leurs clients conjointement à chaque cycle. L’argument [billing cycle anchor](https://docs.stripe.com/api/subscriptions/create.md#create_subscription-billing_cycle_anchor) vous permet d’effectuer cette opération. ```curl curl https://api.stripe.com/v1/subscriptions \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "items[0][price]={{PRICE_ID}}" \ -d billing_cycle_anchor=1611008505 ``` La définition manuelle du cycle de facturation facture automatiquement au client un montant au prorata pour la période écoulée entre la création de l’abonnement et la date de début du cycle de facturation. Si vous ne souhaitez pas que les clients soient facturés pour cette période, vous pouvez définir l’argument [proration_behavior](https://docs.stripe.com/api/subscriptions/create.md#create_subscription-proration_behavior) sur `none`. Vous pouvez également combiner la date de début du cycle de facturation avec des [périodes d’essai](https://docs.stripe.com/billing/subscriptions/paypal.md#trial-periods) pour permettre aux clients d’accéder gratuitement à votre produit et ensuite leur facturer un montant au prorata. ## Optional: Périodes d'essai avant abonnement Les essais gratuits permettent aux clients d’accéder à votre produit gratuitement pendant une certaine période. L’utilisation d’essais gratuits est différente de la définition de [proration_behavior](https://docs.stripe.com/api/subscriptions/create.md#create_subscription-proration_behavior) sur `none`, car vous pouvez personnaliser la durée des périodes gratuites. Transmettez un horodatage dans [fin de l’essai](https://docs.stripe.com/api/subscriptions/create.md#create_subscription-trial_end) pour définir la période d’essai. ```curl curl https://api.stripe.com/v1/subscriptions \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "items[0][price]={{PRICE_ID}}" \ -d trial_end=1610403705 ``` Vous pouvez également combiner une [date de début du cycle de facturation](https://docs.stripe.com/billing/subscriptions/paypal.md#billing-cycle) avec un essai gratuit. Supposons par exemple que nous sommes le 15 septembre et que vous voulez offrir à votre client un essai gratuit de sept jours, puis lancer le cycle de facturation normal le 1er octobre. Vous pouvez définir la fin de l’essai gratuit le 22 septembre et l’ancre du cycle de facturation le 1er octobre. Ainsi, le client bénéficie d’un essai gratuit pendant sept jours et paye un montant au prorata pour la durée comprise entre la fin de l’essai et le 1er octobre. Le 1er octobre, vous facturez à ce client le montant normal de l’abonnement pour son premier cycle de facturation complet. ## Optional: Supprimer un compte PayPal enregistré Vous pouvez utiliser l’API [Detach](https://docs.stripe.com/api/payment_methods/detach.md) pour supprimer le compte PayPal enregistré d’un client de ses moyens de paiement. Quand vous dissociez un moyen de paiement PayPal, cela révoque le [mandat](https://docs.stripe.com/api/mandates.md) correspondant et génère un appel à l’API PayPal afin d’annuler le contrat de facturation PayPal associé. ```curl curl -X POST https://api.stripe.com/v1/payment_methods/{{PAYMENT_METHOD_ID}}/detach \ -u "<>:" ```