# Configurer un abonnement avec Amazon Pay Découvrez comment créer et facturer un abonnement avec Amazon Pay. Utilisez 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 le moyen de paiement [Amazon Pay](https://docs.stripe.com/payments/amazon-pay.md). # API Setup Intents > This is a API Setup Intents for when api-integration is setupintents. View the full page at https://docs.stripe.com/billing/subscriptions/amazon-pay?api-integration=setupintents. Créez et confirmez un abonnement à l’aide de deux appels à l’API. Le [premier appel à l’API](https://docs.stripe.com/billing/subscriptions/amazon-pay.md#create-setup-intent)billing/subscriptions/afterpay-clearpay#create-setup-intent) utilise l’[API Setup Intents](https://docs.stripe.com/api/setup_intents.md) pour définir Amazon Pay comme moyen de paiement. Le [deuxième appel à l’API](https://docs.stripe.com/billing/subscriptions/amazon-pay.md#create-subscription) envoie les informations relatives au client, au produit et au moyen de paiement à [l’API Subscriptions](https://docs.stripe.com/api/subscriptions.md) pour créer un objet Subscription et confirmer un paiement en un seul appel. ## 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 USD 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 [Côté serveur] Pour enregistrer un moyen de paiement Amazon Pay en vue de paiements ultérieurs, vous devez l’associer à 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` une fois que votre client a créé un compte auprès de votre entreprise. En associant l’ID de l’objet `Customer` à votre propre représentation interne du client, vous pourrez par la suite récupérer et utiliser les informations du moyen de paiement pour les conserver. Si votre client n’a pas créé de compte, vous pouvez toujours créer un objet `Customer` et l’associer à votre représentation interne de ce compte client plus tard. ```curl curl https://api.stripe.com/v1/customers \ -u "<>:" \ --data-urlencode "description=My First Test Customer (created for API docs)" ``` ## Créer un SetupIntent [Côté serveur] Créez un [SetupIntent](https://docs.stripe.com/api/setup_intents.md) pour enregistrer le moyen de paiement d’un client en vue de futurs paiements. Un [SetupIntent](https://docs.stripe.com/api/setup_intents.md) est un objet qui représente votre intention de configurer le moyen de paiement d’un client en vue de futurs paiements. Le SetupIntent suit les étapes de ce processus de configuration. Créez un SetupIntent sur votre serveur avec [payment_method_types](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-payment_method_types) défini sur `amazon_pay`, indiquez l’ID du client et configurez [usage=off_session](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-usage) ou `usage=on_session`. ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d confirm=true \ --data-urlencode "return_url=https://www.stripe.com" \ -d usage=off_session \ -d customer=cus_ODQluYFNl44ODI \ -d "payment_method_data[type]=amazon_pay" \ -d "payment_method_types[]=amazon_pay" \ -d "mandate_data[customer_acceptance][type]=online" \ -d "mandate_data[customer_acceptance][online][ip_address]=127.0.0.0" \ -d "mandate_data[customer_acceptance][online][user_agent]=device" ``` L’objet SetupIntent contient un `client_secret`, une clé unique que vous devez transmettre à Stripe.js côté client afin de rediriger votre acheteur vers Amazon Pay et autoriser le mandat. ### Récupérer la clé secrète du client Le SetupIntent contient une *clé secrète* (The client secret is a unique key returned from Stripe as part of a PaymentIntent. This key lets the client access important fields from the PaymentIntent (status, amount, currency) while hiding sensitive ones (metadata, customer)) à utiliser côté client pour finaliser le processus de paiement en toute sécurité. Vous pouvez adopter différentes approches pour transmettre cette clé secrète côté client. #### Application monopage Récupérez la clé secrète du client à partir d’un endpoint sur votre serveur, à l’aide de la fonction `fetch` du navigateur. Cette approche est recommandée si votre côté client est une application d’une seule page, en particulier si elle repose sur un framework front-end moderne tel que React. Créez l’endpoint de serveur qui gère la clé secrète du client : #### Ruby ```ruby get '/secret' do intent = # ... Create or retrieve the SetupIntent {client_secret: intent.client_secret}.to_json end ``` Récupérez ensuite la clé secrète du client à l’aide JavaScript côté client : ```javascript (async () => { const response = await fetch('/secret'); const {client_secret: clientSecret} = await response.json(); // Render the form using the clientSecret })(); ``` #### Rendu côté serveur Transmettez la clé secrète à votre client depuis votre serveur. Cette approche fonctionne mieux si votre application génère du contenu statique sur le serveur avant de l’envoyer sur le navigateur. Ajoutez le [client_secret](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-client_secret) à votre formulaire de paiement. Dans votre code côté serveur, récupérez la clé secrète du client à partir du SetupIntent : #### Ruby ```erb
``` ```ruby get '/checkout' do @intent = # ... Fetch or create the SetupIntent erb :checkout end ``` Ensuite, enregistrez Amazon Pay côté client avec [Stripe.js](https://docs.stripe.com/payments/elements.md). Intégrez le script Stripe.js à votre page de paiement en l’ajoutant entre les balises `head` de votre fichier HTML. ```html Checkout ``` Lorsqu’un client clique pour payer avec Amazon Pay, utilisez Stripe.js pour soumettre le paiement à Stripe. [Stripe.js](https://docs.stripe.com/payments/elements.md) est la bibliothèque JavaScript de base pour créer les tunnels de paiement : elle gère automatiquement les opérations complexes telles que la redirection décrite ci-dessous, et facilite l’extension de votre intégration à d’autres moyens de paiement. Incluez le script Stripe.js sur votre page de paiement en l’ajoutant à la section `head` 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('<>'); ``` Utilisez `stripe.confirmAmazonPaySetup` pour confirmer le SetupIntent côté client, avec une URL [return_url](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-return_url) et un attribut [mandate_data](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-mandate_data). Utilisez l’URL [return_url](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-return_url) pour rediriger les clients vers une page spécifique une fois le SetupIntent réussi. ```javascript // Redirects away from the client const {error} = await stripe.confirmAmazonPaySetup( '{{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. } ``` ## Créer un abonnement [Côté serveur] Créez un abonnement avec un tarif et un client. Définissez la valeur du paramètre `default_payment_method` sur l’ID de PaymentMethod contenu dans la réponse SetupIntent. ```curl curl https://api.stripe.com/v1/subscriptions \ -u "<>:" \ -d customer={{CUSTOMER_ID}} \ -d "items[0][price]={{PRICE_ID}}" \ -d default_payment_method={{PAYMENT_METHOD_ID}} \ -d off_session=true ``` La création d’abonnements facture automatiquement les clients en fonction du moyen de paiement par défaut prédéfini. Après un paiement réussi, l’état dans le Dashboard Stripe passe à **Active**. Le prix que vous avez défini détermine le montant des prochaines facturations. Découvrez comment [créer un abonnement avec une période d’essai gratuite](https://docs.stripe.com/billing/subscriptions/trials.md). # API Payment Intents > This is a API Payment Intents for when api-integration is subscription. View the full page at https://docs.stripe.com/billing/subscriptions/amazon-pay?api-integration=subscription. Créez et confirmez un objet Subscription à l’aide de deux appels à l’API. Le [premier appel à l’API](https://docs.stripe.com/billing/subscriptions/amazon-pay.md#pi-create-subscription) envoie les informations concernant le client et le produit à l’[API Subscriptions](https://docs.stripe.com/api/subscriptions.md) pour créer à la fois un objet Subscription et un objet PaymentIntent. La réponse contient un ID de PaymentIntent, que vous devez utiliser dans un appel à l’[API Payment Intents](https://docs.stripe.com/api/payment_intents.md) pour [confirmer un paiement](https://docs.stripe.com/billing/subscriptions/amazon-pay.md#pi-confirm-payment). ## 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 USD 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 un abonnement [Côté serveur] Créez un [abonnement](https://docs.stripe.com/api/subscriptions.md) avec un tarif et un client avec l’état `incomplete` en attribuant au paramètre [payment_behavior](https://docs.stripe.com/api/subscriptions/create.md#create_subscription-payment_behavior) la valeur `default_incomplete`. Définissez le paramétrage `payment_settings.save_default_payment_method=on_subscription` pour enregistrer un moyen de paiement lors de l’activation de l’abonnement. ```curl curl https://api.stripe.com/v1/subscriptions \ -u "<>:" \ -d customer={{CUSTOMER_ID}} \ -d payment_behavior=default_incomplete \ -d "items[0][price]={{PRICE_ID}}" \ -d "payment_settings[save_default_payment_method]=on_subscription" \ -d "payment_settings[payment_method_types][0]=amazon_pay" \ -d "payment_settings[payment_method_types][1]=card" \ -d "expand[0]=latest_invoice.payments" \ -d "expand[1]=latest_invoice.confirmation_secret" ``` La réponse inclut la première [Invoice](https://docs.stripe.com/api/invoices.md) de l’*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). Elle contient les paiements de la facture, y compris un PaymentIntent par défaut généré par Stripe pour cette facture, ainsi que le secret de confirmation que vous pouvez utiliser côté client pour finaliser le paiement en toute sécurité, sans transmettre l’objet PaymentIntent complet. Récupérez l’ID du PaymentIntent à utiliser pour confirmer le paiement depuis `latest_invoice.payments`. Renvoyez `latest_invoice.confirmation_secret.client_secret` au front-end pour finaliser le paiement. Découvrez comment [créer un abonnement avec une période d’essai gratuite](https://docs.stripe.com/billing/subscriptions/trials.md). ## Confirmer un paiement [Côté serveur] Confirmez un paiement avec l’API [PaymentIntents](https://docs.stripe.com/api/payment_intents.md) à l’aide de l’ID de PaymentIntent contenu dans la réponse de l’objet Subscription. Ajoutez l’ID de PaymentIntent à l’URL et définissez la valeur du paramètre `payment_method_types` sur `amazon_pay` : ```curl curl https://api.stripe.com/v1/payment_intents/:id/confirm \ -u "<>:" \ -d "payment_method_data[type]=amazon_pay" \ --data-urlencode "return_url=https://www.stripe.com" \ -d "mandate_data[customer_acceptance][type]=online" \ -d "mandate_data[customer_acceptance][online][ip_address]=127.0.0.0" \ -d "mandate_data[customer_acceptance][online][user_agent]=device" \ -d "mandate_data[customer_acceptance][accepted_at]=1660000000" ``` La réponse du PaymentIntent inclut l’état `requires_action`, qui indique que vos utilisateurs doivent s’identifier auprès d’Amazon Pay pour effectuer le PaymentIntent. Une fois le paiement abouti, l’abonnement devient actif et le moyen de paiement est enregistré comme moyen de paiement par défaut. # Une page hébergée par Stripe > This is a Une page hébergée par Stripe for when api-integration is checkout. View the full page at https://docs.stripe.com/billing/subscriptions/amazon-pay?api-integration=checkout. Vous pouvez utiliser l’[API Checkout](https://docs.stripe.com/api/checkout/sessions.md) pour créer et confirmer un abonnement avec une page de paiement préconfigurée. ## 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 USD 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 une session Checkout [Côté serveur] Votre client doit vous autoriser à utiliser son compte Amazon pour de futurs paiements via Stripe Checkout. Vous pourrez ensuite accepter les paiements Amazon. Ajoutez à votre site Web un bouton de paiement qui appelle un endpoint côté serveur afin de créer une [session Checkout](https://docs.stripe.com/api/checkout/sessions.md). ```html Checkout
``` Créez une session Checkout en mode `subscription` pour collecter les informations requises. 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 curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ --data-urlencode "success_url=https://example.com/success" \ -d "line_items[0][price]={{RECURRING_PRICE_ID}}" \ -d "line_items[0][quantity]=1" \ -d "payment_method_types[0]=card" \ -d "payment_method_types[1]=amazon_pay" \ -d mode=subscription ``` ## Tester votre intégration [Côté serveur] Sélectionnez le moyen de paiement Amazon Pay et appuyez sur S’abonner. Vous pouvez tester qu’il fonctionne en authentifiant le paiement sur la page de redirection. Le PaymentIntent passe de `requires_action` à `succeeded`.