# Créer des paiements directs Créez des paiements directement sur le compte connecté et prélevez des frais. Créez des *paiements directs* lorsque des clients effectuent des transactions directement avec un compte connecté, souvent sans connaître l’existence de votre plateforme. Grâce aux paiements directs : - Le paiement apparaît comme un débit sur le compte connecté, et non sur le compte de votre plateforme. - Le solde du compte connecté augmente à chaque prélèvement. - Le solde de votre compte augmente avec les commissions de la plateforme sur chaque paiement. Ce type de paiement est le mieux adapté aux plateformes SaaS. Par exemple, Shopify fournit des outils pour créer des vitrines en ligne et Thinkific permet aux enseignants de proposer des cours en ligne. ## Limites de visibilité de la plateforme Les paiements directs ont une visibilité limitée au niveau de la plateforme. Lorsque vous créez des paiements directs : - Les objets de transaction tels que `PaymentIntents` et `Charges` existent sur le compte connecté, et non sur la plateforme. - Pour accéder aux données relatives aux paiements directs, vous devez interroger l’API Stripe en utilisant l’identifiant du compte connecté [dans l’en-tête Stripe-Account](https://docs.stripe.com/connect/authentication.md). Ce comportement de cadrage affecte les services de synchronisation des données, tels que Fivetran, ainsi que d’autres intégrations tierces qui s’appuient sur des requêtes API au niveau de la plateforme. Pour récupérer les données relatives aux paiements directs, ils doivent interroger le compte connecté, et non la plateforme. > Nous vous recommandons d’utiliser les paiements directs pour les comptes connectés qui ont accès à l’intégralité du Dashboard Stripe. Créez une intégration de paiement personnalisée en intégrant des composants d’interface utilisateur sur votre site à l’aide de [Stripe Elements](https://docs.stripe.com/payments/elements.md). Le code côté client et côté serveur permet de créer un formulaire de paiement qui accepte différents moyens de paiement. [Comparez les différents types d’intégration proposés par Stripe](https://docs.stripe.com/payments/online-payments.md#compare-features-and-availability). #### Effort d'intégration Complexity: 3/5 #### Type d'intégration Combiner les composants de l’interface utilisateur dans un tunnel de paiement personnalisé #### Personnalisation de l'interface utilisateur Personnalisation au niveau CSS avec l’[API Appearance](https://docs.stripe.com/elements/appearance-api.md) Tout d’abord, [inscrivez-vous](https://dashboard.stripe.com/register) pour créer un Compte Stripe. 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 [Côté serveur] Pour représenter votre intention d’encaisser le paiement d’un client, Stripe utilise un objet [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) qui suit vos tentatives de débit et les changements d’état du paiement tout au long du processus. Vue d'ensemble de l'intégration des paiements illustrée par ce document. (See full diagram at https://docs.stripe.com/connect/direct-charges) Les moyens de paiement présentés aux clients lors du processus de paiement sont également inclus dans le PaymentIntent. Vous pouvez laisser Stripe extraire automatiquement les moyens de paiement des paramètres du Dashboard, ou bien les répertorier manuellement. À moins que votre intégration ne nécessite un code pour proposer des moyens de paiement, ne listez pas les moyens de paiement manuellement. Stripe évalue la devise, les restrictions des moyens de paiement et d’autres paramètres pour dresser la liste des moyens de paiement pris en charge. Stripe privilégie les moyens de paiement qui contribuent à augmenter la conversion et qui sont les plus pertinents par rapport à la devise et à l’emplacement du client. Stripe masque les moyens de paiement moins prioritaires dans un menu de débordement. #### Gérer les moyens de paiement dans le Dashboard Créez un PaymentIntent sur votre serveur avec un montant et une devise. Dans la dernière version de l’API, la spécification du paramètre `automatic_payment_methods` est facultative car Stripe active ses fonctionnalités par défaut. Vous pouvez gérer les moyens de paiement à partir du [Dashboard](https://dashboard.stripe.com/settings/payment_methods). Stripe gère le renvoi des moyens de paiement admissibles en fonction de facteurs tels que le montant de la transaction, la devise et le tunnel de paiement. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d amount=1000 \ -d currency=usd \ -d "automatic_payment_methods[enabled]=true" \ -d application_fee_amount=123 ``` #### Répertorier manuellement les moyens de paiement ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d amount=1099 \ -d currency=eur \ -d "payment_method_types[]=bancontact" \ -d "payment_method_types[]=card" \ -d "payment_method_types[]=eps" \ -d "payment_method_types[]=ideal" \ -d "payment_method_types[]=p24" \ -d "payment_method_types[]=sepa_debit" \ -d "payment_method_types[]=sofort" \ -d application_fee_amount=123 ``` Lors de la création d’un PaymentIntent, vous devez spécifier certains paramètres : - `amount` : créez un PaymentIntent sur votre serveur avec un montant spécifié. Déterminez toujours le montant à débiter côté serveur, car il s’agit d’un environnement sécurisé. Cette approche permet d’éviter que des clients malveillants ne choisissent eux-mêmes leurs tarifs. - `currency` : la devise que vous incluez dans le PaymentIntent filtre les moyens de paiement présentés au client, et le choix de la devise doit donc s’opérer en fonction des moyens de paiement que vous souhaitez proposer. Par exemple, si vous transmettez `eur` et que vous avez activé OXXO dans votre Dashboard, votre client ne verra pas ce moyen de paiement, car OXXO ne prend pas en charge les paiements libellés en `eur`. Certains moyens de paiement prennent en charge plusieurs devises et pays. Les exemples de code donnés dans ce guide implémentent les moyens de paiement suivants : Bancontact, les cartes de crédit, EPS, iDEAL, Przelewy24, le prélèvement automatique SEPA et Sofort. - `"payment_method_types[]"` : dressez manuellement la liste de tous les moyens de paiement que vous souhaitez prendre en charge. - (Facultatif) `payment_intent_data[application_fee_amount]` : cet argument spécifie le montant que votre plateforme prévoit de prélever sur la transaction. Si vous utilisez l’[outil de tarification pour plateforme](https://docs.stripe.com/connect/platform-pricing-tools.md) de Stripe pour gérer la tarification de vos frais de plateforme à partir du [Dashboard](https://dashboard.stripe.com/test/settings/connect/platform_pricing/payments), n’incluez pas cet argument, car il remplacerait toute logique de tarification définie par l’outil. Une fois le paiement traité sur le compte connecté, le `application_fee_amount` est transféré à la plateforme et les frais de Stripe sont déduits du solde du compte connecté. > Chacun des moyens de paiement doit prendre en charge la devise transmise dans le PaymentIntent et votre activité doit par ailleurs être basée dans l’un des pays pris en charge par chaque moyen de paiement. Veuillez consulter la page consacrée aux [options d’intégration des moyens de paiement](https://docs.stripe.com/payments/payment-methods/integration-options.md) pour en savoir plus. ### 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 ``` ## Collecter les informations de paiement [Côté client] Collectez les informations de paiement du client avec le [Payment Element](https://docs.stripe.com/payments/payment-element.md). Le Payment Element est un composant d’interface utilisateur préconfiguré qui simplifie la collecte des informations pour de nombreux moyens de paiement. Le Payment Element contient un iframe qui envoie les informations de paiement à Stripe de manière sécurisée via une connexion HTTPS. Évitez de placer le Payment Element à l’intérieur d’un autre iframe, car certains moyens de paiement nécessitent une redirection vers une autre page pour la confirmation du paiement. Si vous choisissez d’utiliser un iframe et que vous souhaitez accepter Apple Pay ou Google Pay, l’attribut [allow](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-allowpaymentrequest) de l’iframe doit être `"payment *"`. Pour que votre intégration fonctionne, l’adresse de la page de paiement doit commencer par `https://` et non par `http://`. Vous pouvez tester votre intégration sans utiliser le protocole HTTPS, mais n’oubliez pas de l’[activer](https://docs.stripe.com/security/guide.md#tls) lorsque vous souhaitez commencer à accepter des paiements réels. #### HTML + JS ### Configurer Stripe.js Le Payment Element est automatiquement disponible en tant que fonctionnalité de Stripe.js. Intégrez le script Stripe.js à votre page de paiement en l’ajoutant au `head` votre fichier HTML. Chargez toujours Stripe.js directement à partir de js.stripe.com pour rester conforme aux normes PCI. N’incluez pas le script dans un lot et n’en hébergez pas de copie. ```html Checkout ``` Sur votre page de paiement, créez une instance de `Stripe` avec le code JavaScript suivant : ```javascript // Initialize Stripe.js with the same connected account ID used when creating // the PaymentIntent. const stripe = Stripe('<>', { stripeAccount: '{{CONNECTED_ACCOUNT_ID}}' }); ``` ### Ajouter Stripe Elements et Payment Element à votre page de paiement Le PaymentElement doit avoir un emplacement dédié dans votre page de paiement. Créez un nœud DOM (conteneur) vide avec un ID unique dans votre formulaire de paiement. ```html
``` Une fois que le formulaire a été chargé, créez une instance du Payment Element et intégrez-la au nœud DOM conteneur. Lorsque vous créez l’instance [Elements](https://docs.stripe.com/js/elements_object/create), transmettez la [clé secrète du client](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret) obtenue à l’étape précédente en tant qu’option. La clé secrète du client doit être manipulée avec précaution car elle peut servir à finaliser un paiement. Ne l’enregistrez pas, ne l’intégrez pas dans une URL et ne la dévoilez à personne d’autre qu’au client. ```javascript const options = { clientSecret: '{{CLIENT_SECRET}}', // Fully customizable with the Appearance API appearance: {/*...*/}, }; // Set up Stripe.js and Elements to use in checkout form using the client secret const elements = stripe.elements(options); // Create and mount the Payment Element const paymentElement = elements.create("payment"); paymentElement.mount("#payment-element"); ``` Le Payment Element affiche un formulaire dynamique qui permet à votre client de choisir un moyen de paiement. Ce formulaire recueille automatiquement toutes les informations nécessaires pour le moyen de paiement sélectionné par le client. Vous pouvez [personnaliser l’apparence du Payment Element](https://docs.stripe.com/elements/appearance-api.md) pour qu’il corresponde au design de votre site lorsque vous configurez l’objet `Elements`. #### React ### Configurer Stripe.js Installez [React Stripe.js](https://www.npmjs.com/package/@stripe/react-stripe-js) et le [chargeur Stripe.js](https://www.npmjs.com/package/@stripe/stripe-js) à partir du registre public npm : ```bash npm install --save @stripe/react-stripe-js @stripe/stripe-js ``` ### Ajouter et configurer le fournisseur Elements sur votre page de paiement Pour utiliser Payment Element, incluez le composant de votre page de paiement dans un [fournisseur Elements](https://docs.stripe.com/sdks/stripejs-react.md#elements-provider). Appelez `loadStripe` avec votre clé publique, puis transmettez le paramètre `Promise` renvoyé ainsi que la [clé secrète du client](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret) définie à l’étape précédente en tant qu’`options` dans le fournisseur `Elements`. ```jsx import React from 'react'; import ReactDOM from 'react-dom'; import {Elements} from '@stripe/react-stripe-js'; import {loadStripe} from '@stripe/stripe-js'; import CheckoutForm from './CheckoutForm'; // Make sure to call `loadStripe` outside of a component's render to avoid // recreating the `Stripe` object on every render. const stripePromise = loadStripe("<>", { stripeAccount: '{{CONNECTED_ACCOUNT_ID}}' }); function App() { const options = { // pass the client secret from the previous step clientSecret: '{{CLIENT_SECRET}}', // Fully customizable with the Appearance API appearance: {/*...*/}, }; return ( ); }; ReactDOM.render(, document.getElementById('root')); ``` ### Ajouter le composant PaymentElement Utilisez le composant `PaymentElement` pour créer votre formulaire. ```jsx import React from 'react'; import {PaymentElement} from '@stripe/react-stripe-js'; const CheckoutForm = () => { return (
); }; export default CheckoutForm; ``` Le Payment Element affiche un formulaire dynamique qui permet à votre client de choisir un type de moyen de paiement. Ce formulaire collecte automatiquement toutes les informations requises pour le moyen de paiement sélectionné par le client. Vous pouvez [personnaliser l’apparence du Payment Element](https://docs.stripe.com/elements/appearance-api.md) pour qu’il corresponde au design de votre site lorsque vous configurez le fournisseur `Elements`. ## Envoyer le paiement à Stripe [Côté client] Utilisez [stripe.confirmPayment](https://docs.stripe.com/js/payment_intents/confirm_payment) pour effectuer le paiement à l’aide des informations du composant Payment Element. Ajoutez un paramètre [return_url](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-return_url) à cette fonction pour indiquer la page vers laquelle Stripe doit rediriger l’utilisateur à l’issue du paiement. Votre utilisateur peut être redirigé en premier lieu vers un site intermédiaire, comme une page d’autorisation bancaire, avant d’être redirigé vers la page spécifiée par le paramètre `return_url`. L’utilisateur sera immédiatement redirigé vers la page `return_url` après un paiement réussi par carte. Si vous ne souhaitez pas effectuer de redirection à la fin des paiements par carte, vous pouvez assigner au paramètre [redirect](https://docs.stripe.com/js/payment_intents/confirm_payment#confirm_payment_intent-options-redirect) la valeur `if_required`. De cette manière, seuls les clients qui choisissent un moyen de paiement avec redirection seront redirigés. #### HTML + JS ```javascript const form = document.getElementById('payment-form'); form.addEventListener('submit', async (event) => { event.preventDefault(); const {error} = await stripe.confirmPayment({ //`Elements` instance that was used to create the Payment Element elements, confirmParams: { return_url: 'https://example.com/order/123/complete', }, }); if (error) { // This point will only be reached if there is an immediate error when // confirming the payment. Show error to your customer (for example, payment // details incomplete) const messageContainer = document.querySelector('#error-message'); messageContainer.textContent = error.message; } else { // Your customer will be redirected to your `return_url`. For some payment // methods like iDEAL, your customer will be redirected to an intermediate // site first to authorize the payment, then redirected to the `return_url`. } }); ``` #### React Pour appeler [stripe.confirmPayment](https://docs.stripe.com/js/payment_intents/confirm_payment) depuis votre composant de formulaire de paiement, utilisez les hooks [useStripe](https://docs.stripe.com/sdks/stripejs-react.md#usestripe-hook) et [useElements](https://docs.stripe.com/sdks/stripejs-react.md#useelements-hook). Si vous préférez les composants de classe traditionnels aux hooks, vous pouvez utiliser un [ElementsConsumer](https://docs.stripe.com/sdks/stripejs-react.md#elements-consumer). ```jsx import React, {useState} from 'react'; import {useStripe, useElements, PaymentElement} from '@stripe/react-stripe-js'; const CheckoutForm = () => { const stripe = useStripe(); const elements = useElements(); const [errorMessage, setErrorMessage] = useState(null); const handleSubmit = async (event) => { // We don't want to let default form submission happen here, // which would refresh the page. event.preventDefault(); if (!stripe || !elements) { // Stripe.js hasn't yet loaded. // Make sure to disable form submission until Stripe.js has loaded. return; } const {error} = await stripe.confirmPayment({ //`Elements` instance that was used to create the Payment Element elements, confirmParams: { return_url: 'https://example.com/order/123/complete', }, }); if (error) { // This point will only be reached if there is an immediate error when // confirming the payment. Show error to your customer (for example, payment // details incomplete) setErrorMessage(error.message); } else { // Your customer will be redirected to your `return_url`. For some payment // methods like iDEAL, your customer will be redirected to an intermediate // site first to authorize the payment, then redirected to the `return_url`. } }; return (
{/* Show error message to your customers */} {errorMessage &&
{errorMessage}
} ); }; export default CheckoutForm; ``` Veillez à ce que le paramètre `return_url` corresponde à une page de votre site web qui indique l’état du paiement. Lorsque Stripe redirige le client vers la page `return_url`, nous fournissons les paramètres de requête d’URL suivants : | Paramètre | Description | | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------- | | `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`. | > Si vous disposez d’outils qui assurent le suivi de la session navigateur du client, vous devrez peut-être ajouter le domaine `stripe.com` à la liste d’exclusion des sites référents. Les redirections font que certains outils créent de nouvelles sessions, ce qui empêche le suivi de la session dans son ensemble. Utilisez l’un des paramètres de requête pour récupérer le PaymentIntent. Consultez l’[état du PaymentIntent](https://docs.stripe.com/payments/paymentintents/lifecycle.md) pour déterminer les informations à présenter à vos clients. Vous pouvez également ajouter vos propres paramètres de requête lorsque vous ajoutez l’URL `return_url` ; ils seront conservés tout au long du processus de redirection. #### HTML + JS ```javascript // Initialize Stripe.js using your publishable key const stripe = Stripe('<>'); // Retrieve the "payment_intent_client_secret" query parameter appended to // your return_url by Stripe.js const clientSecret = new URLSearchParams(window.location.search).get( 'payment_intent_client_secret' ); // Retrieve the PaymentIntent stripe.retrievePaymentIntent(clientSecret).then(({paymentIntent}) => { const message = document.querySelector('#message') // Inspect the PaymentIntent `status` to indicate the status of the payment // to your customer. // // Some payment methods will [immediately succeed or fail][0] upon // confirmation, while others will first enter a `processing` state. // // [0]: https://stripe.com/docs/payments/payment-methods#payment-notification switch (paymentIntent.status) { case 'succeeded': message.innerText = 'Success! Payment received.'; break; case 'processing': message.innerText = "Payment processing. We'll update you when payment is received."; break; case 'requires_payment_method': message.innerText = 'Payment failed. Please try another payment method.'; // Redirect your user back to your payment page to attempt collecting // payment again break; default: message.innerText = 'Something went wrong.'; break; } }); ``` #### React ```jsx import React, {useState, useEffect} from 'react'; import {useStripe} from '@stripe/react-stripe-js'; const PaymentStatus = () => { const stripe = useStripe(); const [message, setMessage] = useState(null); useEffect(() => { if (!stripe) { return; } // Retrieve the "payment_intent_client_secret" query parameter appended to // your return_url by Stripe.js const clientSecret = new URLSearchParams(window.location.search).get( 'payment_intent_client_secret' ); // Retrieve the PaymentIntent stripe .retrievePaymentIntent(clientSecret) .then(({paymentIntent}) => { // Inspect the PaymentIntent `status` to indicate the status of the payment // to your customer. // // Some payment methods will [immediately succeed or fail][0] upon // confirmation, while others will first enter a `processing` state. // // [0]: https://stripe.com/docs/payments/payment-methods#payment-notification switch (paymentIntent.status) { case 'succeeded': setMessage('Success! Payment received.'); break; case 'processing': setMessage("Payment processing. We'll update you when payment is received."); break; case 'requires_payment_method': // Redirect your user back to your payment page to attempt collecting // payment again setMessage('Payment failed. Please try another payment method.'); break; default: setMessage('Something went wrong.'); break; } }); }, [stripe]); return message; }; export default PaymentStatus; ``` ## Gérer les événements post-paiement [Côté serveur] 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 l’[outil de webhook du Dashboard](https://dashboard.stripe.com/webhooks) ou suivez le [guide consacré aux webhooks](https://docs.stripe.com/webhooks/quickstart.md) 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 flux de livraison. Plutôt que d’attendre un rappel de votre client, écoutez ces événements. 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. Certains clients malintentionnés peuvent d’autre part tenter de manipuler la réponse. En configurant votre intégration de manière à ce qu’elle écoute les événements asynchrones, vous pourrez accepter [plusieurs types de moyens de paiement](https://stripe.com/payments/payment-methods-guide) avec une seule et même intégration. En plus de l’événement `payment_intent.succeeded`, nous vous recommandons de gérer ces autres événements lorsque vous encaissez des paiements à l’aide de l’Element Payment : | Événement | Description | Action | | ------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md?lang=php#event_types-payment_intent.succeeded) | Envoyé lorsqu’un client effectue un paiement avec succès. | Envoyez au client une confirmation de commande et *traitez* (Fulfillment is the process of providing the goods or services purchased by a customer, typically after payment is collected) sa commande. | | [payment_intent.processing](https://docs.stripe.com/api/events/types.md?lang=php#event_types-payment_intent.processing) | Envoyé lorsqu’un client initie un paiement, mais qu’il ne l’a pas encore finalisé. Dans la plupart des cas, cet événement est envoyé lorsque le client initie un prélèvement bancaire. Il est suivi par un événement `payment_intent.succeeded` ou `payment_intent.payment_failed`. | Envoyez au client une confirmation de commande qui indique que son paiement est en attente. Pour des marchandises dématérialisées, vous pourrez traiter la commande sans attendre que le paiement soit effectué. | | [payment_intent.payment_failed](https://docs.stripe.com/api/events/types.md?lang=php#event_types-payment_intent.payment_failed) | Envoyé lorsqu’un client effectue une tentative de paiement qui se solde par un échec. | Si un paiement passe de l’état `processing` à `payment_failed`, proposez au client de retenter le paiement. | ## Tester l'intégration #### Cartes bancaires | Numéro de carte | Scénario | Méthode de test | | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 4242424242424242 | Le paiement par carte bancaire aboutit et ne nécessite pas d’authentification. | Remplissez le formulaire de paiement par carte bancaire en saisissant le numéro de carte ainsi que la date d’expiration, le CVC et le code postal de votre choix. | | 4000002500003155 | Le paiement par carte bancaire requiert une *authentification* (Strong Customer Authentication (SCA) is a regulatory requirement in effect as of September 14, 2019, that impacts many European online payments. It requires customers to use two-factor authentication like 3D Secure to verify their purchase). | Remplissez le formulaire de paiement par carte bancaire en saisissant le numéro de carte ainsi que la date d’expiration, le CVC et le code postal de votre choix. | | 4000000000009995 | La carte est refusée avec un code de refus de type `insufficient_funds`. | Remplissez le formulaire de paiement par carte bancaire en saisissant le numéro de carte ainsi que la date d’expiration, le CVC et le code postal de votre choix. | | 6205500000000000004 | La carte UnionPay a un numéro d’une longueur variable, allant de 13 à 19 chiffres. | Remplissez le formulaire de paiement par carte bancaire en saisissant le numéro de carte ainsi que la date d’expiration, le CVC et le code postal de votre choix. | #### Portefeuilles | Moyen de paiement | Scénario | Méthode de test | | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Alipay | Le montant dû est réglé via un moyen de paiement avec redirection et à [notification immédiate](https://docs.stripe.com/payments/payment-methods.md#payment-notification). | Choisissez un moyen de paiement avec redirection, renseignez les informations demandées, puis confirmez le paiement. Enfin, cliquez sur **Finaliser le paiement test** sur la page qui s’affiche. | #### Virements avec redirection bancaire | Moyen de paiement | Scénario | Méthode de test | | ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Prélèvement automatique BECS | Le montant dû est réglé par prélèvement automatique BECS. | Remplissez le formulaire à l’aide du numéro de compte `900123456` et du BSB `000000`.La confirmation de la demande de PaymentIntent passe d’abord à l’état `processing`, puis à l’état `succeeded` trois minutes plus tard. | | Prélèvement automatique BECS | Le paiement de votre client échoue avec un code d’erreur `account_closed`. | Remplissez le formulaire à l’aide du numéro de compte `111111113` et du BSB `000000`. | | Bancontact, EPS, iDEAL et Przelewy24 | Votre client ne parvient pas à s’authentifier sur la page de redirection en utilisant un moyen de paiement avec redirection et à notification immédiate. | Choisissez un moyen de paiement avec redirection, renseignez les informations demandées, puis confirmez le paiement. Enfin, cliquez sur **Faire échouer le paiement test** sur la page qui s’affiche. | | Pay by Bank | Le montant dû est réglé via un moyen de paiement avec redirection et à [notification différée](https://docs.stripe.com/payments/payment-methods.md#payment-notification). | Choisissez le moyen de paiement, renseignez les informations demandées, puis confirmez le paiement. Enfin, cliquez sur **Finaliser le paiement test** sur la page qui s’affiche. | | Pay by Bank | Votre client ne parvient pas à s’authentifier sur la page de redirection en utilisant un moyen de paiement avec redirection et à notification différée. | Choisissez le moyen de paiement, renseignez les informations demandées, puis confirmez le paiement. Enfin, cliquez sur **Faire échouer le paiement test** sur la page qui s’affiche. | | BLIK | Les paiements BLIK échouent de diverses manières : échecs immédiats (par exemple, code expiré ou non valide), erreurs différées (refus de la banque) ou expirations du délai (le client n’a pas répondu à temps). | Utiliser des modèles d’e-mail pour [simuler les différents échecs.](https://docs.stripe.com/payments/blik/accept-a-payment.md#simulate-failures) | #### Prélèvements bancaires | Moyen de paiement | Scénario | Méthode de test | | ---------------------------- | -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Prélèvement automatique SEPA | Le montant dû est réglé par prélèvement automatique SEPA. | Remplissez le formulaire à l’aide du numéro de compte `AT321904300235473204`. Le PaymentIntent confirmé passe d’abord à l’état processing, puis à l’état succeeded trois minutes plus tard. | | Prélèvement automatique SEPA | L’intention de paiement de votre client passe de l’état `processing` à l’état `requires_payment_method`. | Remplissez le formulaire à l’aide du numéro de compte `AT861904300235473202`. | #### Coupons | Moyen de paiement | Scénario | Méthode de test | | ----------------- | -------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | | Boleto, OXXO | Le montant dû est réglé par coupon Boleto ou OXXO. | Sélectionnez Boleto ou OXXO comme moyen de paiement, puis envoyez le paiement. Fermez la boîte de dialogue qui s’affiche. | Consultez la section consacrée aux [tests](https://docs.stripe.com/testing.md) pour obtenir des informations supplémentaires sur la manière de tester votre intégration. ## Optional: Activer d'autres moyens de paiement Naviguez vers la page [Gérer les moyens de paiement pour vos comptes connectés](https://dashboard.stripe.com/settings/payment_methods/connected_accounts) dans le Dashboard pour configurer les moyens de paiement acceptés par vos comptes connectés. Les modifications apportées aux paramètres par défaut s’appliqueront à tous les comptes connectés, nouveaux et existants. Consultez les ressources suivantes pour obtenir des informations sur les moyens de paiement : - [Un guide des moyens de paiement](https://stripe.com/payments/payment-methods-guide#choosing-the-right-payment-methods-for-your-business) pour vous aider à choisir les moyens de paiement adaptés à votre plateforme. - [Fonctionnalités du compte](https://docs.stripe.com/connect/account-capabilities.md) pour vérifier que les moyens de paiement que vous avez choisis sont compatibles avec vos comptes connectés. - Les tableaux des [moyens de paiement pris en charge par produit](https://docs.stripe.com/payments/payment-methods/payment-method-support.md#product-support) pour vérifier que les moyens de paiement que vous avez choisis sont compatibles avec vos produits et tunnels de paiement Stripe. Pour chaque moyen de paiement, vous pouvez sélectionner l’une des options suivantes de la liste déroulante : | | | | | **Activé par défaut** | Vos comptes connectés acceptent ce moyen de paiement lors du paiement. Si certains moyens de paiement peuvent uniquement être désactivés ou bloqués, cela signifie que vos comptes connectés qui ont *accès au Dashboard* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) doivent les activer depuis leur page des paramètres. | | **Désactivé par défaut** | Vos comptes connectés n’acceptent pas ce moyen de paiement lors du paiement. Si vous autorisez vos comptes connectés avec *accès au Dashboard Stripe* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) à gérer leurs propres moyens de paiement, ils ont la possibilité de l’activer. | | **Bloqué** | Vos comptes connectés n’acceptent pas ce moyen de paiement lors du paiement. Si vous autorisez vos comptes connectés avec *accès au Dashboard Stripe* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) à gérer leurs propres moyens de paiement, ils n’ont pas la possibilité de l’activer. | ![Options de liste déroulante pour les moyens de paiement, chacune affichant une option disponible (Bloqué, Activé par défaut, Désactivé par défaut)](https://b.stripecdn.com/docs-statics-srv/assets/dropdowns.ef651d721d5939d81521dd34dde4577f.png) Options des moyens de paiement Si vous apportez une modification à un moyen de paiement, vous devez cliquer sur **Vérifier les modifications** dans la barre en bas de l’écran, puis sur **Enregistrer et appliquer** pour mettre à jour vos comptes connectés. ![Boîte de dialogue qui s'affiche après avoir cliqué sur le bouton Enregistrer, avec une liste des modifications apportées par l'utilisateur](https://b.stripecdn.com/docs-statics-srv/assets/dialog.a56ea7716f60db9778706790320d13be.png) Boîte de dialogue d’enregistrement ### Autoriser vos comptes connectés à gérer leurs moyens de paiement Stripe recommande d’autoriser vos comptes connectés à personnaliser leurs propres moyens de paiement. Cette option permet à chaque compte connecté ayant *accès au Dashboard Stripe* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) d’afficher et de mettre à jour leur page de [Moyens de paiement](https://dashboard.stripe.com/settings/payment_methods). Seuls les propriétaires des comptes connectés peuvent personnaliser leurs moyens de paiement. Le Dashboard Stripe affiche l’ensemble des moyens de paiement par défaut que vous avez appliqués à tous les comptes connectés, nouveaux comme existants. Vos comptes connectés peuvent remplacer ces valeurs par défaut, à l’exception des moyens de paiement que vous avez bloqués. Cochez la case **Personnalisation de compte** pour activer cette option. Vous devez cliquer sur **Vérifier les modifications** dans la barre en bas de l’écran, puis sélectionner **Enregistrer et appliquer** pour mettre à jour ce paramètre. ![Capture d'écran de la case à cocher pour permettre aux propriétaires connectés de personnaliser leurs moyens de paiement](https://b.stripecdn.com/docs-statics-srv/assets/checkbox.275bd35d2a025272f03af029a144e577.png) Case à cocher Personnalisation de compte ### Fonctionnalités liées aux moyens de paiement Pour permettre à vos comptes connectés d’accepter des moyens de paiement supplémentaires, leurs `Accounts` doivent disposer de fonctionnalités de moyens de paiement actives. Si vous avez sélectionné l’option Activé par défaut pour un moyen de paiement dans [Gérer les moyens de paiement pour vos comptes connectés](https://dashboard.stripe.com/settings/payment_methods/connected_accounts), Stripe demande automatiquement la fonctionnalité nécessaire pour les nouveaux comptes connectés et les comptes existants qui remplissent les exigences de vérification. Si le compte connecté ne répond pas aux exigences ou si vous souhaitez en garder le contrôle, vous pouvez demander la fonctionnalité manuellement dans le Dashboard ou via l’API. La plupart des moyens de paiement ont les mêmes exigences de vérification que la fonctionnalité `card_payments`, avec certaines restrictions et exceptions. Le [tableau des fonctionnalités de moyens de paiement](https://docs.stripe.com/connect/account-capabilities.md#payment-methods) répertorie les moyens nécessitant une vérification supplémentaire. #### Dashboard [Recherchez un compte connecté](https://docs.stripe.com/connect/dashboard/managing-individual-accounts.md#finding-accounts) dans le Dashboard pour modifier ses fonctionnalités et consulter les exigences de vérification en attente. #### API Vous pouvez [lister](https://docs.stripe.com/api/capabilities/list.md) les fonctionnalités actuelles d’un compte connecté existant afin de déterminer s’il est nécessaire de demander des fonctionnalités supplémentaires. ```curl curl https://api.stripe.com/v1/accounts/{{CONNECTEDACCOUNT_ID}}/capabilities \ -u "<>:" ``` Demandez des fonctionnalités supplémentaires en [mettant à jour](https://docs.stripe.com/api/capabilities/update.md) les fonctionnalités de chaque compte connecté. ```curl curl https://api.stripe.com/v1/accounts/{{CONNECTEDACCOUNT_ID}}/capabilities/us_bank_account_ach_payments \ -u "<>:" \ -d requested=true ``` Il peut y avoir un délai avant que la fonctionnalité demandée ne devienne active. Si la fonctionnalité a des exigences d’activation, la réponse les inclut dans les tableaux `requirements`. ## Encaisser des commissions En tant que plateforme, vous avez la possibilité de prélever sur vos comptes connectés un pourcentage de chaque transaction sous forme de commission de la plateforme. Vous pouvez définir le tarif de cette commission de plusieurs façons : - Utilisez les [outils de tarification de la plateforme](https://docs.stripe.com/connect/platform-pricing-tools.md) pour définir des règles de tarification et les tester. Cette fonctionnalité no-code du Dashboard Stripe n’est actuellement disponible que pour les plateformes responsables du paiement des frais Stripe. - Vous pouvez définir les commissions de la plateforme directement dans un [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md). Ces commissions remplacent la logique de tarification définie dans l’outil de tarification de la plateforme. Votre plateforme peut accepter une commission de plateforme avec les limites suivantes : - La valeur de `application_fee_amount` doit être positive et inférieure au montant débiter. La commission de la plateforme percevoir est capturer au montant débiter. - Aucune commission Stripe supplémentaire n’est appliquée à la commission de la plateforme. - Pour respecter la réglementation et les obligations de conformité au Brésil, les plateformes basées à l’étranger avec des comptes connectés brésiliens ne sont pas autorisées à prélever des commissions de la plateforme via Stripe. - La devise de `application_fee_amount` dépend de quelques facteurs de [plusieurs devises](https://docs.stripe.com/connect/currencies.md). La [BalanceTransaction](https://docs.stripe.com/api.md#balance_transaction_retrieve) de la transaction fournit une répartition détaillée des frais, incluant ceux de Stripe et la commission de la plateforme. Pour un rapport optimisé, le prélèvement d’une commission crée un objet [ApplicationFee](https://docs.stripe.com/api/application_fees/object.md). Servez-vous de la propriété `amount` de l’objet `ApplicationFee` pour vos rapports. Les commissions de la plateforme sont visibles dans la section [Frais perçus](https://dashboard.stripe.com/connect/application_fees) de votre Dashboard. > Par défaut, les commissions de plateforme pour les paiements directs sont créées de façon asynchrone. Si vous développez l’objet `application_fee` dans une demande de création de paiement, la commission de plateforme est créée de façon synchrone dans le cadre de cette demande. Ne développez l’objet `application_fee` que si cela est nécessaire, car cela augmente la latence de la demande. > > Pour recevoir des notifications concernant les objets `ApplicationFee` créés de manière asynchrone, écoutez l’événement webhook [application_fee.created](https://docs.stripe.com/api/events/types.md#event_types-application_fee.created). ## Effectuer des remboursements De la même façon que les plateformes peuvent créer des paiements sur les comptes connectés, elles peuvent également créer des remboursements. [Créez un remboursement](https://docs.stripe.com/api.md#create_refund) à l’aide de la clé secrète de votre plateforme en [étant identifié](https://docs.stripe.com/connect/authentication.md#stripe-account-header) avec un compte connecté. Les commissions de la plateforme ne sont pas automatiquement remboursées lorsqu’un remboursement est effectué. Votre plateforme doit explicitement rembourser la commission de la plateforme. Dans le cas contraire, le compte connecté, celui sur lequel le paiement a été créé, perd ce montant. Pour rembourser une commission de la plateforme, transmettez la valeur **true** pour `refund_application_fee` dans la requête de remboursement : ```curl curl https://api.stripe.com/v1/refunds \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d "charge={{CHARGE_ID}}" \ -d refund_application_fee=true ``` Par défaut, la totalité du paiement est remboursée, mais vous pouvez créer un remboursement partiel en définissant le paramètre `amount` sur un nombre entier positif. Si le remboursement entraîne le remboursement de la totalité du paiement, la totalité de la commission de plateforme est remboursée. Dans le cas contraire, un montant proportionnel de la commission de la plateforme est remboursé. Vous pouvez également indiquer la valeur **false** pour `refund_application_fee` et [rembourser la commission de la plateforme](https://docs.stripe.com/api.md#create_fee_refund) séparément. ## Composants intégrés Connect Les [composants intégrés de Connect](https://docs.stripe.com/connect/get-started-connect-embedded-components.md) prennent en charge les paiements directs. En utilisant le [composant de paiement intégré](https://docs.stripe.com/connect/supported-embedded-components/payments.md), vous pouvez permettre à vos comptes connectés de voir les informations de paiement, de capturer des frais et de gérer des litiges depuis votre site. Note: The following is a preview/demo component that behaves differently than live mode usage with real connected accounts. The actual component has more functionality than what might appear in this demo component. For example, for connected accounts without Stripe dashboard access (custom accounts), no user authentication is required in production. Les composants suivants affichent des informations pour les paiements directs : - [Composant de paiement](https://docs.stripe.com/connect/supported-embedded-components/payments.md) : Affiche tous les paiements et litiges d’un compte. - [Informations des paiements](https://docs.stripe.com/connect/supported-embedded-components/payment-details.md) : Affichent des informations pour un paiement spécifique. - [Composant de la liste des litiges](https://docs.stripe.com/connect/supported-embedded-components/disputes-list.md) : Affiche tous les litiges d’un compte. - [Litiges pour un composant de paiement](https://docs.stripe.com/connect/supported-embedded-components/disputes-for-a-payment.md) : Affiche les litiges pour un seul paiement spécifié. Vous pouvez l’utiliser pour inclure la fonctionnalité de gestion des litiges sur une page avec votre interface utilisateur. ## See also - [Gérer plusieurs devises](https://docs.stripe.com/connect/currencies.md) - [Libellés de relevé bancaire avec Connect](https://docs.stripe.com/connect/statement-descriptors.md)