# Configurer un abonnement avec des paiements en stablecoins Découvrez comment créer et facturer un abonnement avec des stablecoins. 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) qui prélève des paiements récurrents en *stablecoins* (A cryptocurrency that's pegged to the value of a fiat currency or other asset in order to limit volatility) depuis le portefeuille de cryptomonnaie d’un client. # Page hébergée par Stripe > This is a Page hébergée par Stripe for when api-integration is checkout. View the full page at https://docs.stripe.com/billing/subscriptions/stablecoins?api-integration=checkout. ## 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 portefeuille de cryptomonnaie pour les paiements futurs via Stripe. Ajoutez sur 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]=crypto" \ -d mode=subscription ``` ## Confirmer que le paiement a abouti 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`. En général, il s’agit d’une page de votre site Web qui l’informe que son paiement a abouti. Une fois le paiement réussi, l’état sous-jacent de la *PaymentIntent* (The Payment Intents API tracks the lifecycle of a customer checkout flow and triggers additional authentication steps when required by regulatory mandates, custom Radar fraud rules, or redirect-based payment methods) passe de `processing` à `succeeded`. Vous pouvez confirmer la réussite du paiement de différentes manières : #### 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 des détails de ce paiement. La section **Récapitulatif du Checkout** contient les informations de facturation et la liste des articles achetés, que vous pouvez utiliser pour traiter manuellement la commande. ![](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 Nous envoyons les événements de paiement suivants lorsque l’état du paiement change : | Nom de l’événement | Description | Prochaines étapes | | ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ----------------------------------------------------------------------- | | [checkout.session.completed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.completed) | Le client a autorisé le paiement en envoyant le formulaire Checkout. | Attendez que le paiement aboutisse ou échoue. | | [invoice.paid](https://docs.stripe.com/api/events/types.md#event_types-invoice.paid) | Le paiement du client a abouti. | Traitez la commande de biens ou de services du client. | | [invoice.payment_failed](https://docs.stripe.com/api/events/types.md#event_types-invoice.payment_failed) | Le paiement du client a été refusé, ou il a échoué pour une autre raison. | Contactez le client par e-mail et demandez-lui de retenter le paiement. | Votre code webhook doit gérer tous ces événements Checkout. Chaque charge utile de webhook Checkout inclut l’[objet Checkout Session](https://docs.stripe.com/api/checkout/sessions.md) et les webhooks de facture incluent l’objet [Invoice](https://docs.stripe.com/api/invoices/object.md). Les deux contiennent des informations sur le *client* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) et le *PaymentIntent* (The Payment Intents API tracks the lifecycle of a customer checkout flow and triggers additional authentication steps when required by regulatory mandates, custom Radar fraud rules, or redirect-based payment methods). Stripe envoie le webhook `checkout.session.completed` à votre serveur avant de rediriger votre client. Votre confirmation du webhook (tout code d’état `2xx`) déclenche la redirection du client vers l’URL `success_url`. Si Stripe ne reçoit pas de confirmation dans les 10 secondes suivant la réussite d’un paiement, votre client est automatiquement redirigé vers la page `success_url`. Nous vous recommandons [d’utiliser des webhooks](https://docs.stripe.com/webhooks.md) pour confirmer que le paiement a abouti et exécuter les biens et services que le client a acheté. Ci-dessous est un exemple d’endpoint de webhook qui gère la réussite et l’échec d’un paiement : #### 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. client = Stripe::StripeClient.new('<>') # 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 case event['type'] when 'checkout.session.completed' session = event['data']['object'] subscription_id = session.subscription # Find the subscription or save it to your database. # invoice.paid may have fired before this so there # could already be a subscription. find_or_create_subscription(subscription_id) when 'invoice.paid' invoice = event['data']['object'] subscription_id = invoice.parent.subscription_details.subscription # Find the subscription or save it to your database. # checkout.session.completed may not have fired yet # so we may need to create the subscription. subscription = find_or_create_subscription(subscription_id) # Fulfill the purchase fulfill_order(invoice) # Record that the subscription has been paid for # this payment period. invoice.paid will fire every # time there is a payment made for this subscription. record_as_paid_for_this_period(subscription) when 'invoice.payment_failed' invoice = event['data']['object'] # Send an email to the customer asking them to retry their payment email_customer_about_failed_payment(invoice) end status 200 end ``` Vous pouvez obtenir des informations concernant le client, le paiement et l’abonnement en récupérant les objets `Customer`, `PaymentIntent`, o `Subscription` référencés par les propriétés `customer`, `payment_intent`, et `subscription` dans la charge utile du webhook. ### Récupération des postes de facture à partir d’un webhook Par défaut, les webhooks Checkout ne renvoient pas de `line_items`. Pour récupérer les postes créés avec la session Checkout, effectuez une autre requête avec l’ID de session Checkout : #### curl ```bash curl https://api.stripe.com/v1/checkout/sessions/{{CHECKOUT_SESSION_ID}}/line_items \ -u <>: ``` #### Interface de ligne de commande Stripe ```bash stripe get /v1/checkout/sessions/{{CHECKOUT_SESSION_ID}}/line_items ``` ### Test des webhooks en local Pour tester des webhooks localement, vous pouvez utiliser l’[interface de ligne de commande Stripe](https://docs.stripe.com/stripe-cli.md). Après l’avoir installée, vous pouvez transférer les événements à votre serveur : ```bash stripe listen --forward-to localhost:4242/webhook Ready! Your webhook signing secret is '{{WEBHOOK_SIGNING_SECRET}}' (^C to quit) ``` En savoir plus sur la [configuration des webhooks](https://docs.stripe.com/webhooks.md). #### Plugins tiers Vous pouvez utiliser des plugins comme [Zapier](https://stripe.com/works-with/zapier) pour automatiser la mise à jour de vos systèmes de réalisation des achats avec les informations provenant des paiements Stripe. Voici quelques exemples d’automatisations prises 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 votre intégration Testez votre intégration de paiement en cryptomonnaie en ouvrant la page de redirection des paiements à l’aide de vos clés API de test. Vous pouvez tester gratuitement un tunnel de paiement réussi à l’aide des [ressources de testnet](https://docs.stripe.com/billing/subscriptions/stablecoins.md#testnet-assets). 1. Dans un *environnement de test* (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), créez une nouvelle transaction avec la méthode d’intégration choisie, puis ouvrez l’URL de redirection. 1. Connectez votre wallet et votre réseau de paiement préférés. 1. Effectuez le paiement et vérifiez que vous pouvez accéder à l’URL attendue. ### Paiements tests avec des actifs testnet La plupart des cryptomonnaies proposent des actifs testnet, ou des tokens qui n’ont aucune valeur monétaire, que vous pouvez utiliser pour tester les transactions blockchain. Stripe recommande le wallet MetaMask, le testnet Polygon Amoy et le faucet Circle pour les tests, mais vous pouvez utiliser vos propres services préférés. #### Installez un wallet 1. [Téléchargez l’extension MetaMask](https://metamask.io/download) pour votre navigateur Web. 1. [Créez un wallet](https://support.metamask.io/start/creating-a-new-wallet/) ou [importez un wallet existant](https://support.metamask.io/start/use-an-existing-wallet/). #### Activer un testnet 1. Dans votre wallet MetaMask, sélectionnez **Réseaux** dans le menu principal. 1. Cliquez sur **Ajouter un réseau personnalisé**. 1. Saisissez les informations suivantes : - **Nom du réseau** : `Amoy` - **URL RPC par défaut** : `https://rpc-amoy.polygon.technology/` - **ID de chaîne** : `80002` - **Symbole devise** : `POL` - **Bloquer l’URL de l’explorateur** : `https://amoy.polygonscan.com/` 1. Cliquez sur **Enregistrer**. #### Importez un token 1. Dans votre wallet MetaMask, sous **Tokens**, sélectionnez **Amoy** dans la liste déroulante du réseau. 1. Cliquez sur le menu de débordement (⋯) et sélectionnez **Importer des tokens**. 1. Cliquez sur **Sélectionner un réseau** > **Amoy**. 1. Sous **Adresse du contrat token**, collez l’adresse du contrat testnet Polygon Amoy : ``` 0x41E94Eb019C0762f9Bfcf9Fb1E58725BfB0e7582 ``` Le champ **Symbole du token** se met automatiquement à jour avec `USDC` et le champ **Décimales** avec `6`. 1. Cliquez sur **Suivant**. 1. Vérifiez que vous importez le token `USDC`, puis cliquez sur **Importer**. Votre wallet MetaMask affiche désormais **POL** et **USDC** dans la liste des tokens. Lors des tests de remboursements, le token envoyé à votre wallet peut avoir un contrat différent de celui utilisé pour le paiement. Nous vous recommandons de vérifier le [transaction_hash](https://docs.stripe.com/api/refunds/object.md?rds=1#refund_object-destination_details-crypto-reference) de votre remboursement sur un explorateur de blocs et d’ajouter le contrat de ce token à votre wallet. Par exemple, vous pourriez voir l’adresse de contrat de token `0x58277ebcabbe2a6694fbca8daf9e23163dbacf3e` pour les remboursements Sepolia ETH USDC. #### Obtenir des ressources testnet > Pour utiliser certains faucets de testnet, vous pourriez avoir besoin de détenir une petite quantité de tokens du mainnet. 1. Ouvrir le paramètre [faucet.circle.com](https://faucet.circle.com/) 1. Cliquez sur **USDC**. 1. Sous **Réseau**, sélectionnez **Polygon PDV Amoy**. 1. Sous l’onglet **Envoyer vers**, collez l’adresse de votre wallet. 1. Cliquez sur **Envoyer 20 USDC**. En plus de l’USDC pour effectuer des paiements, vous avez besoin de POL pour payer les frais de transaction : 1. Ouvrir [faucet.polygon.technology](https://faucet.polygon.technology/). 1. Sous **Sélectionner la chaîne et le Token**, sélectionnez **Polygon Amoy** et **POL**. 1. Sous **Vérifier votre identité**, cliquez sur la plateforme tierce avec laquelle vous souhaitez vous authentifier, puis suivez la procédure de connexion. 1. Sous **Saisir l’adresse wallet**, collez l’adresse de votre wallet. 1. Cliquez sur **Réclamer**. La finalisation des transactions Testnet peut prendre quelques minutes. Vérifiez votre wallet pour confirmer que l’USDC et le POL ont bien été transférés. ### Plus de faucets testnet Consultez ces sites de faucets pour plus d’options de tokens de test : - [Paxos USDP](https://faucet.paxos.com/) - [Devnet SOL](https://faucet.solana.com/) - [Sepolia ETH](https://faucets.chain.link/sepolia) - [Amoy POL](https://faucet.polygon.technology/) # l'API Payment Intents > This is a l'API Payment Intents for when api-integration is paymentintents. View the full page at https://docs.stripe.com/billing/subscriptions/stablecoins?api-integration=paymentintents. ## 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 USDC 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 avec un prix et un client. Attribuez à la valeur [payment_behavior](https://docs.stripe.com/api/subscriptions/create.md#create_subscription-payment_behavior) la valeur `default_incomplete` afin que l’état de l’abonnement reste `incomplete` jusqu’à ce que l’utilisateur effectue le paiement. Attribuez la valeur `on_subscription` au paramètre `payment_settings.save_default_payment_method` pour enregistrer le moyen de paiement une fois l’abonnement activé. ```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]=crypto" \ -d "expand[0]=latest_invoice.payments" \ -d "expand[1]=latest_invoice.confirmation_secret" ``` La réponse de l’API comprend la première [facture](https://docs.stripe.com/api/invoices.md) de l’abonnement. Utilisez l’ID PaymentIntent inclus dans le paramètre `latest_invoice.payments` pour confirmer l’abonnement à l’étape suivante. ## Créer un PaymentIntent [Côté serveur] Call the [Payment Intents API](https://docs.stripe.com/api/payment_intents.md) to initiate payment. Set the value of `payment_intents_id` to the PaymentIntents ID returned by the Subscriptions API in the previous step. Set the value of the `payment_method_types` parameter to `crypto`: ```curl curl https://api.stripe.com/v1/payment_intents/:id/confirm \ -u "<>:" \ -d "payment_method_data[type]=crypto" \ --data-urlencode "return_url=https://www.example.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" ``` L’objet de réponse de l’API comprend l’état `requires_action` et une URL de redirection dans le paramètre [next_action.redirect_to_url.url](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-redirect_to_url-url). Redirigez le client vers cette URL pour terminer la configuration du paiement de l’abonnement. Une fois le processus de paiement terminé, il est redirigé vers l’URL [return_url](https://docs.stripe.com/api/payment_intents/create.md#create_setup_intent-return_url) que vous avez fournie. ## Gérer les événements post-paiement Stripe envoie un événement [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.succeeded) à l’issue du paiement. 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 une solution partenaire pour recevoir ces événements et exécuter des actions, 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. Plutôt que d’attendre un rappel de votre client, écoutez ces événements. En effet, côté client, l’acheteur pourrait fermer la fenêtre de son navigateur ou quitter l’application avant l’exécution du rappel. Des personnes malveillantes peuvent en profiter pour manipuler la réponse. Si vous configurez votre intégration de manière à écouter les événements asynchrones, cela vous permettra également d’accepter de nouveaux moyens de paiement plus facilement à l’avenir. Apprenez-en davantage sur les [différences entre les différents moyens de paiement pris en charge](https://stripe.com/payments/payment-methods-guide). - **Gérer les événements manuellement dans le Dashboard** Utilisez le Dashboard pour [afficher vos paiements de test dans le Dashboard](https://dashboard.stripe.com/test/payments), envoyer des reçus par e-mail, gérer les virements ou réessayer les paiements échoués. - **Créer un webhook personnalisé** [Build a custom webhook](https://docs.stripe.com/webhooks/handling-payment-events.md#build-your-own-webhook) handler to listen for events and build custom asynchronous payment flows. Test and debug your webhook integration locally with the Stripe CLI. - **Intégrer une application prédéfinie** Gérez les événements commerciaux courants, tels que l’[automatisation](https://stripe.partners/?f_category=automation) ou le [marketing et les ventes](https://stripe.partners/?f_category=marketing-and-sales), en intégrant une application partenaire. ## Tester votre intégration Testez votre intégration de paiement en cryptomonnaie en ouvrant la page de redirection des paiements à l’aide de vos clés API de test. Vous pouvez tester gratuitement un tunnel de paiement réussi à l’aide des [ressources de testnet](https://docs.stripe.com/billing/subscriptions/stablecoins.md#testnet-assets). 1. Dans un *environnement de test* (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), créez une nouvelle transaction avec la méthode d’intégration choisie, puis ouvrez l’URL de redirection. 1. Connectez votre wallet et votre réseau de paiement préférés. 1. Effectuez le paiement et vérifiez que vous pouvez accéder à l’URL attendue. ### Paiements tests avec des actifs testnet La plupart des cryptomonnaies proposent des actifs testnet, ou des tokens qui n’ont aucune valeur monétaire, que vous pouvez utiliser pour tester les transactions blockchain. Stripe recommande le wallet MetaMask, le testnet Polygon Amoy et le faucet Circle pour les tests, mais vous pouvez utiliser vos propres services préférés. #### Installez un wallet 1. [Téléchargez l’extension MetaMask](https://metamask.io/download) pour votre navigateur Web. 1. [Créez un wallet](https://support.metamask.io/start/creating-a-new-wallet/) ou [importez un wallet existant](https://support.metamask.io/start/use-an-existing-wallet/). #### Activer un testnet 1. Dans votre wallet MetaMask, sélectionnez **Réseaux** dans le menu principal. 1. Cliquez sur **Ajouter un réseau personnalisé**. 1. Saisissez les informations suivantes : - **Nom du réseau** : `Amoy` - **URL RPC par défaut** : `https://rpc-amoy.polygon.technology/` - **ID de chaîne** : `80002` - **Symbole devise** : `POL` - **Bloquer l’URL de l’explorateur** : `https://amoy.polygonscan.com/` 1. Cliquez sur **Enregistrer**. #### Importez un token 1. Dans votre wallet MetaMask, sous **Tokens**, sélectionnez **Amoy** dans la liste déroulante du réseau. 1. Cliquez sur le menu de débordement (⋯) et sélectionnez **Importer des tokens**. 1. Cliquez sur **Sélectionner un réseau** > **Amoy**. 1. Sous **Adresse du contrat token**, collez l’adresse du contrat testnet Polygon Amoy : ``` 0x41E94Eb019C0762f9Bfcf9Fb1E58725BfB0e7582 ``` Le champ **Symbole du token** se met automatiquement à jour avec `USDC` et le champ **Décimales** avec `6`. 1. Cliquez sur **Suivant**. 1. Vérifiez que vous importez le token `USDC`, puis cliquez sur **Importer**. Votre wallet MetaMask affiche désormais **POL** et **USDC** dans la liste des tokens. Lors des tests de remboursements, le token envoyé à votre wallet peut avoir un contrat différent de celui utilisé pour le paiement. Nous vous recommandons de vérifier le [transaction_hash](https://docs.stripe.com/api/refunds/object.md?rds=1#refund_object-destination_details-crypto-reference) de votre remboursement sur un explorateur de blocs et d’ajouter le contrat de ce token à votre wallet. Par exemple, vous pourriez voir l’adresse de contrat de token `0x58277ebcabbe2a6694fbca8daf9e23163dbacf3e` pour les remboursements Sepolia ETH USDC. #### Obtenir des ressources testnet > Pour utiliser certains faucets de testnet, vous pourriez avoir besoin de détenir une petite quantité de tokens du mainnet. 1. Ouvrir le paramètre [faucet.circle.com](https://faucet.circle.com/) 1. Cliquez sur **USDC**. 1. Sous **Réseau**, sélectionnez **Polygon PDV Amoy**. 1. Sous l’onglet **Envoyer vers**, collez l’adresse de votre wallet. 1. Cliquez sur **Envoyer 20 USDC**. En plus de l’USDC pour effectuer des paiements, vous avez besoin de POL pour payer les frais de transaction : 1. Ouvrir [faucet.polygon.technology](https://faucet.polygon.technology/). 1. Sous **Sélectionner la chaîne et le Token**, sélectionnez **Polygon Amoy** et **POL**. 1. Sous **Vérifier votre identité**, cliquez sur la plateforme tierce avec laquelle vous souhaitez vous authentifier, puis suivez la procédure de connexion. 1. Sous **Saisir l’adresse wallet**, collez l’adresse de votre wallet. 1. Cliquez sur **Réclamer**. La finalisation des transactions Testnet peut prendre quelques minutes. Vérifiez votre wallet pour confirmer que l’USDC et le POL ont bien été transférés. ### Plus de faucets testnet Consultez ces sites de faucets pour plus d’options de tokens de test : - [Paxos USDP](https://faucet.paxos.com/) - [Devnet SOL](https://faucet.solana.com/) - [Sepolia ETH](https://faucets.chain.link/sepolia) - [Amoy POL](https://faucet.polygon.technology/) # 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/stablecoins?api-integration=setupintents. ## 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 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 paiements ultérieurs. Le SetupIntent permet de suivre les étapes de ce processus de configuration. Créez un SetupIntent sur votre serveur avec le paramètre [payment_method_types](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-payment_method_types) défini sur `crypto` et spécifiez l’identifiant du client et le paramètre [utilisation=off_session](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-usage). ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d confirm=true \ --data-urlencode "return_url=https://www.example.com" \ -d usage=off_session \ -d customer=cus_00000000000000 \ -d "payment_method_data[type]=crypto" \ -d "payment_method_types[]=crypto" \ -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 de réponse API comprend un identifiant [payment_method](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-payment_method) et une URL de redirection dans [next_action.redirect_to_url.url](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-next_action-redirect_to_url-url). Redirigez le client vers cette URL pour terminer la configuration du paiement de l’abonnement. Une fois le processus de paiement terminé, il est redirigé vers l’URL fournie dans [votre return_url](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-return_url). ## 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’identifiant du `payment_method` figurant dans la réponse du 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 entraîne automatiquement la facturation aux clients selon le moyen de paiement prédéfini par défaut. Une fois le paiement effectué, le statut dans le Dashboard Stripe passe à **Actif**. Le prix que vous avez défini précédemment détermine le montant des facturations futures. ## Gérer les événements post-paiement Stripe envoie un événement [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.succeeded) à l’issue du paiement. 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 une solution partenaire pour recevoir ces événements et exécuter des actions, 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. Plutôt que d’attendre un rappel de votre client, écoutez ces événements. En effet, côté client, l’acheteur pourrait fermer la fenêtre de son navigateur ou quitter l’application avant l’exécution du rappel. Des personnes malveillantes peuvent en profiter pour manipuler la réponse. Si vous configurez votre intégration de manière à écouter les événements asynchrones, cela vous permettra également d’accepter de nouveaux moyens de paiement plus facilement à l’avenir. Apprenez-en davantage sur les [différences entre les différents moyens de paiement pris en charge](https://stripe.com/payments/payment-methods-guide). - **Gérer les événements manuellement dans le Dashboard** Utilisez le Dashboard pour [afficher vos paiements de test dans le Dashboard](https://dashboard.stripe.com/test/payments), envoyer des reçus par e-mail, gérer les virements ou réessayer les paiements échoués. - **Créer un webhook personnalisé** [Build a custom webhook](https://docs.stripe.com/webhooks/handling-payment-events.md#build-your-own-webhook) handler to listen for events and build custom asynchronous payment flows. Test and debug your webhook integration locally with the Stripe CLI. - **Intégrer une application prédéfinie** Gérez les événements commerciaux courants, tels que l’[automatisation](https://stripe.partners/?f_category=automation) ou le [marketing et les ventes](https://stripe.partners/?f_category=marketing-and-sales), en intégrant une application partenaire. ## Tester votre intégration Testez votre intégration de paiement en cryptomonnaie en ouvrant la page de redirection des paiements à l’aide de vos clés API de test. Vous pouvez tester gratuitement un tunnel de paiement réussi à l’aide des [ressources de testnet](https://docs.stripe.com/billing/subscriptions/stablecoins.md#testnet-assets). 1. Dans un *environnement de test* (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), créez une nouvelle transaction avec la méthode d’intégration choisie, puis ouvrez l’URL de redirection. 1. Connectez votre wallet et votre réseau de paiement préférés. 1. Effectuez le paiement et vérifiez que vous pouvez accéder à l’URL attendue. ### Paiements tests avec des actifs testnet La plupart des cryptomonnaies proposent des actifs testnet, ou des tokens qui n’ont aucune valeur monétaire, que vous pouvez utiliser pour tester les transactions blockchain. Stripe recommande le wallet MetaMask, le testnet Polygon Amoy et le faucet Circle pour les tests, mais vous pouvez utiliser vos propres services préférés. #### Installez un wallet 1. [Téléchargez l’extension MetaMask](https://metamask.io/download) pour votre navigateur Web. 1. [Créez un wallet](https://support.metamask.io/start/creating-a-new-wallet/) ou [importez un wallet existant](https://support.metamask.io/start/use-an-existing-wallet/). #### Activer un testnet 1. Dans votre wallet MetaMask, sélectionnez **Réseaux** dans le menu principal. 1. Cliquez sur **Ajouter un réseau personnalisé**. 1. Saisissez les informations suivantes : - **Nom du réseau** : `Amoy` - **URL RPC par défaut** : `https://rpc-amoy.polygon.technology/` - **ID de chaîne** : `80002` - **Symbole devise** : `POL` - **Bloquer l’URL de l’explorateur** : `https://amoy.polygonscan.com/` 1. Cliquez sur **Enregistrer**. #### Importez un token 1. Dans votre wallet MetaMask, sous **Tokens**, sélectionnez **Amoy** dans la liste déroulante du réseau. 1. Cliquez sur le menu de débordement (⋯) et sélectionnez **Importer des tokens**. 1. Cliquez sur **Sélectionner un réseau** > **Amoy**. 1. Sous **Adresse du contrat token**, collez l’adresse du contrat testnet Polygon Amoy : ``` 0x41E94Eb019C0762f9Bfcf9Fb1E58725BfB0e7582 ``` Le champ **Symbole du token** se met automatiquement à jour avec `USDC` et le champ **Décimales** avec `6`. 1. Cliquez sur **Suivant**. 1. Vérifiez que vous importez le token `USDC`, puis cliquez sur **Importer**. Votre wallet MetaMask affiche désormais **POL** et **USDC** dans la liste des tokens. Lors des tests de remboursements, le token envoyé à votre wallet peut avoir un contrat différent de celui utilisé pour le paiement. Nous vous recommandons de vérifier le [transaction_hash](https://docs.stripe.com/api/refunds/object.md?rds=1#refund_object-destination_details-crypto-reference) de votre remboursement sur un explorateur de blocs et d’ajouter le contrat de ce token à votre wallet. Par exemple, vous pourriez voir l’adresse de contrat de token `0x58277ebcabbe2a6694fbca8daf9e23163dbacf3e` pour les remboursements Sepolia ETH USDC. #### Obtenir des ressources testnet > Pour utiliser certains faucets de testnet, vous pourriez avoir besoin de détenir une petite quantité de tokens du mainnet. 1. Ouvrir le paramètre [faucet.circle.com](https://faucet.circle.com/) 1. Cliquez sur **USDC**. 1. Sous **Réseau**, sélectionnez **Polygon PDV Amoy**. 1. Sous l’onglet **Envoyer vers**, collez l’adresse de votre wallet. 1. Cliquez sur **Envoyer 20 USDC**. En plus de l’USDC pour effectuer des paiements, vous avez besoin de POL pour payer les frais de transaction : 1. Ouvrir [faucet.polygon.technology](https://faucet.polygon.technology/). 1. Sous **Sélectionner la chaîne et le Token**, sélectionnez **Polygon Amoy** et **POL**. 1. Sous **Vérifier votre identité**, cliquez sur la plateforme tierce avec laquelle vous souhaitez vous authentifier, puis suivez la procédure de connexion. 1. Sous **Saisir l’adresse wallet**, collez l’adresse de votre wallet. 1. Cliquez sur **Réclamer**. La finalisation des transactions Testnet peut prendre quelques minutes. Vérifiez votre wallet pour confirmer que l’USDC et le POL ont bien été transférés. ### Plus de faucets testnet Consultez ces sites de faucets pour plus d’options de tokens de test : - [Paxos USDP](https://faucet.paxos.com/) - [Devnet SOL](https://faucet.solana.com/) - [Sepolia ETH](https://faucets.chain.link/sepolia) - [Amoy POL](https://faucet.polygon.technology/)