# Accepter les paiements en stablecoins Commencez à accepter les stablecoins en activant le moyen de paiement en cryptomonnaie. Vous pouvez accepter les paiements en *stablecoins* (A cryptocurrency that's pegged to the value of a fiat currency or other asset in order to limit volatility) via *Payment Links* (A link to a secure, hosted payment page that you can generate without code. Share it directly with your customers, or point them to it with a button or QR code), *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), *Elements* (A set of UI components for building a web checkout flow. They adapt to your customer's locale, validate input, and use tokenization, keeping sensitive customer data from touching your server) ou l’*API Payment Intents* (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). Lorsqu’ils paient avec des stablecoins tels que l’USDC, les clients sont redirigés vers **crypto.stripe.com** pour connecter leur wallet de cryptomonnaies et finaliser la transaction. Les fonds sont versés sur votre solde Stripe dans USD. ## Before you begin > Vos clients peuvent utiliser des stablecoins comme moyen de paiement à l’échelle mondiale, mais seules les entreprises basées aux États-Unis peuvent accepter des paiements en stablecoins. Pour commencer à accepter les paiements en stablecoins: 1. Assurez-vous que [votre compte Stripe est bien configuré](https://dashboard.stripe.com/register). 2. Accédez aux paramètres [Moyens de paiement](https://dashboard.stripe.com/settings/payment_methods) dans le Dashboard et activez le moyen de paiement **Stablecoins et Cryptomonnaie**. 3. Stripe examine votre demande d’accès et vous contacte si des informations complémentaires sont nécessaires. Le moyen de paiement apparaît comme **Pending** pendant l’examen de votre demande. 4. Une fois votre requête approuvée, le moyen de paiement **Stablecoins et Cryptomonnaie** devient actif dans le Dashboard. ## Utiliser avec des moyens de paiement dynamiques (Recommended) Si vous utilisez les [moyens de paiement dynamiques](https://docs.stripe.com/payments/payment-methods/dynamic-payment-methods.md) par défaut de Stripe avec Payment Links, Paiement hébergé, Paiement intégré ou Elements, vous n’avez pas besoin d’effectuer d’autres mises à jour. Stripe affiche automatiquement les options de paiement en stablecoins aux clients admissibles. ## Utilisation avec une intégration Custom Si nécessaire, vous pouvez ajouter le moyen de paiement cryptomonnaie à votre intégration de paiement manuellement. # API directe Intégrez Pay with Crypto directement via l’{% glossary term="payment-intents » %}API Payment Intents**. ## Configurer Stripe [Côté serveur] Tout d’abord, [créez un compte Stripe](https://dashboard.stripe.com/register) ou [connectez-vous](https://dashboard.stripe.com/login). Les agents de codage doivent installer la CLI Stripe (`npm i -g @stripe/cli`) et exécuter la commande `stripe sandbox create --help` pour configurer un environnement de test Stripe anonyme avec des clés d’API fonctionnelles. Aucune inscription requise. 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 un PaymentIntent et récupérer la clé secrète du client [Côté serveur] L’objet [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) représente votre intention de collecter le paiement de votre client et suit le cycle de vie du processus de paiement. Créez un PaymentIntent sur votre serveur et spécifiez le montant à collecter ainsi qu’une devise prise en charge. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=usd \ -d "automatic_payment_methods[enabled]=true" ``` ### Récupérer la clé secrète du client Le PaymentIntent 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 PaymentIntent {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/payment_intents/object.md#payment_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 PaymentIntent : #### Ruby ```erb
``` ```ruby get '/checkout' do @intent = # ... Fetch or create the PaymentIntent erb :checkout end ``` ## Redirection vers la page des paiements en stablecoins Utilisez [Stripe.js](https://docs.stripe.com/js.md) pour envoyer le paiement à Stripe lorsqu’un client choisit **Cryptomonnaie** comme moyen de paiement. Stripe.js est la bibliothèque JavaScript de base pour créer des tunnels de paiement. Il gère automatiquement des situations complexes telles que la redirection décrite ci-dessous et vous permet d’étendre votre intégration à d’autres moyens de paiement. Intégrez le script Stripe.js à votre page de paiement en l’ajoutant entre les balises `` 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 la [clé secrète du client](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret) du PaymentIntent et appelez `stripe.confirmPayment` pour gérer la redirection vers Pay with Crypto. Ajoutez un `return_url` pour indiquer où Stripe redirige le client une fois qu’il a effectué le paiement. ```javascript const form = document.getElementById('payment-form'); form.addEventListener('submit', async function(event) { event.preventDefault(); // Set the clientSecret of the PaymentIntent const { error } = await stripe.confirmPayment({ clientSecret: clientSecret, confirmParams: { payment_method_data: { type: 'crypto', }, // Return URL where the customer should be redirected after the authorization return_url: `${window.location.href}`, }, }); if (error) { // Inform the customer that there was an error. const errorElement = document.getElementById('error-message'); errorElement.textContent = result.error.message; } }); ``` Le `return_url` correspond à une page de votre site Web qui affiche le résultat du paiement. Vous pouvez déterminer ce qu’il faut afficher en [vérifiant l’état](https://docs.stripe.com/payments/payment-intents/verifying-status.md#checking-status) du PaymentIntent. Pour vérifier l’état, la redirection Stripe vers le `return_url` inclut les paramètres de requête d’URL suivants. Vous pouvez également ajouter vos propres paramètres de requête au `return_url`. Ils persistent tout au long du processus de redirection. | | | | | `payment_intent` | L’identifiant unique du `PaymentIntent`. | | `payment_intent_client_secret` | La [clé secrète du client](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret) de l’objet `PaymentIntent`. | ## Optional: Gérer les événements post-paiement Une fois le paiement effectué, Stripe envoie un événement [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.succeeded). Utilisez le Dashboard, un [webhook](https://docs.stripe.com/webhooks.md) 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. Nous vous conseillons d’écouter ces événements plutôt que d’attendre un rappel de votre client. Côté client, il arrive en effet que l’utilisateur ferme la fenêtre de son navigateur ou quitte l’application avant l’exécution du rappel, et des tentatives de manipulation de la réponse par des clients malintentionnés ne sont par ailleurs pas à exclure. La configuration de votre intégration pour écouter les événements asynchrones peut également vous aider à accepter davantage de moyens de paiement à l’avenir. Pour connaître les différences entre tous les moyens de paiement pris en charge, consultez notre guide sur les [moyens de paiement](https://stripe.com/payments/payment-methods-guide). ### Recevoir des événements et exécuter des actions métier Plusieurs options s’offrent à vous pour recevoir et exécuter des actions : - **Manuellement** : utilisez le [Dashboard Stripe](https://dashboard.stripe.com/test/payments) pour afficher tous vos paiements Stripe, envoyer des reçus par e-mail, gérer les virements ou relancer les paiements en échec. - **Code personnalisé :** [créez un gestionnaire de webhooks](https://docs.stripe.com/webhooks/handling-payment-events.md#build-your-own-webhook) pour écouter les événements et construire des tunnels de paiement asynchrones personnalisés. Testez et déboguez votre intégration de webhook localement avec le Stripe CLI. - **Applications préconfigurées** : intégrez une application partenaire pour gérer les événements courants, comme l’[automatisation](https://stripe.partners/?f_category=automation), le [marketing ou les ventes](https://stripe.partners/?f_category=marketing-and-sales). ### Devises prises en charge Vous pouvez créer des paiements en cryptomonnaies dans les devises qui correspondent à votre pays. La devise locale par défaut pour la cryptomonnaie est l’USD. Les clients voient également le montant de leurs achats dans cette devise. ## Optional: Gérer la redirection manuellement [Côté serveur] Le meilleur moyen de gérer les redirections est d’utiliser Stripe.js avec `confirmPayment`. Si vous devez rediriger manuellement vos clients : 1. Indiquez l’URL vers laquelle vos clients seront redirigés une fois leur paiement terminé. ```curl curl https://api.stripe.com/v1/payment_intents/pi_1DRuHnHgsMRlo4MtwuIAUe6u/confirm \ -u "<>:" \ -d payment_method=pm_1EnPf7AfTbPYpBIFLxIc8SD9 \ --data-urlencode "return_url=https://shop.example.com/crtA6B28E1" ``` 1. Vérifiez que l’état du `PaymentIntent` est bien `requires_action`. Le type de `next_action` sera `redirect_to_url`. ```json "next_action": { "type": "redirect_to_url", "redirect_to_url": { "url": "https://hooks.stripe.com/...", "return_url": "https://example.com/checkout/complete" } } ``` 1. Redirigez le client vers l’URL indiquée dans la propriété `next_action`. À l’issue du processus de paiement, le client est redirigé vers la destination `return_url`. Les paramètres de requête d’URL `payment_intent` et `payment_intent_client_secret` sont inclus et vous pouvez par ailleurs transmettre vos propres paramètres de requête, comme indiqué plus haut. ## 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/payments/accept-stablecoin-payments.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. 2. Connectez votre wallet et votre réseau de paiement préférés. 3. 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. 2. [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. 2. Cliquez sur **Ajouter un réseau personnalisé**. 3. 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/` 4. Cliquez sur **Enregistrer**. #### Importez un token 1. Dans votre wallet MetaMask, sous **Tokens**, sélectionnez **Amoy** dans la liste déroulante du réseau. 2. Cliquez sur le menu de débordement (⋯) et sélectionnez **Importer des tokens**. 3. Cliquez sur **Sélectionner un réseau** > **Amoy**. 4. 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`. 5. Cliquez sur **Suivant**. 6. 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/) 2. Cliquez sur **USDC**. 3. Sous **Réseau**, sélectionnez **Polygon PDV Amoy**. 4. Sous l’onglet **Envoyer vers**, collez l’adresse de votre wallet. 5. 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/). 2. Sous **Sélectionner la chaîne et le Token**, sélectionnez **Polygon Amoy** et **POL**. 3. Sous **Vérifier votre identité**, cliquez sur la plateforme tierce avec laquelle vous souhaitez vous authentifier, puis suivez la procédure de connexion. 4. Sous **Saisir l’adresse wallet**, collez l’adresse de votre wallet. 5. 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/)