Accepter un paiement par prélèvement automatique ACH
Créez un formulaire de paiement personnalisé ou utilisez Stripe Checkout pour accepter des paiements à l'aide d'un compte bancaire américain.
Voici les différentes étapes nécessaires pour accepter des paiements par prélèvement automatique ACH sur votre application :
- Création d’un objet de suivi du paiement
- Collecte des informations du moyen de paiement
- Soumission du paiement à Stripe pour traitement
- Vérification du compte bancaire de votre client
Pour représenter le paiement, Stripe utilise un PaymentIntent, lequel permet de suivre et de gérer l’ensemble des états du paiement jusqu’à ce qu’il aboutisse.
Remarque
Le prélèvement automatique ACH est un moyen de paiement à notification différée, ce qui signifie que les fonds ne sont pas immédiatement disponibles après le paiement. Il faut généralement compter 4 jours ouvrables pour qu’un paiement arrive sur votre compte.
Configurer StripeCôté serveurCôté client
Côté serveur
Pour cette intégration, votre serveur doit être doté d’endpoints qui communiquent avec l’API Stripe. Utilisez nos bibliothèques officielles pour accéder à l’API Stripe depuis votre serveur :
Côté client
Le SDK React Native est disponible en open source et fait l’objet d’une documentation complète. En interne, il utilise des SDK Android et iOS natifs. Pour installer le SDK React Native de Stripe, exécutez l’une des commandes suivantes dans le répertoire de votre projet (selon le gestionnaire de paquets que vous utilisez) :
Ensuite, installez les autres dépendances nécessaires :
- Pour iOS, accédez au directeur ios et exécutez
pod installpour vous assurer que vous installez également les dépendances natives requises. - Pour Android, il n’y a plus de dépendances à installer.
Remarque
Nous vous recommandons de suivre le guide officiel de TypeScript pour ajouter la prise en charge de TypeScript.
Initialisation de Stripe
Pour initialiser Stripe dans votre application React Native, wrappez votre écran de paiement avec le composant StripeProvider ou utilisez la méthode d’initialisation initStripe. Seule la clé publiable de l’API dans publishableKey est nécessaire. L’exemple suivant montre comment initialiser Stripe à l’aide du composant StripeProvider.
import { useState, useEffect } from 'react'; import { StripeProvider } from '@stripe/stripe-react-native'; function App() { const [publishableKey, setPublishableKey] = useState(''); const fetchPublishableKey = async () => { const key = await fetchKey(); // fetch key from your server here setPublishableKey(key); }; useEffect(() => { fetchPublishableKey(); }, []); return ( <StripeProvider publishableKey={publishableKey} merchantIdentifier="merchant.identifier" // required for Apple Pay urlScheme="your-url-scheme" // required for 3D Secure and bank redirects > {/* Your app code here */} </StripeProvider> ); }
Remarque
Utilisez vos clés de test d’API lors de vos activités de test et de développement, et vos clés du mode production pour la publication de votre application.
Stripe vous permet de vérifier instantanément le compte bancaire d’un client. Si vous souhaitez récupérer des données supplémentaires sur un compte, inscrivez-vous pour accéder aux données avec Stripe Financial Connections.
Stripe Financial Connections permet à vos clients de partager de manière sécurisée leurs données financières en associant leurs comptes financiers à votre entreprise. Utilisez Financial Connections pour accéder aux données financières autorisées par les clients telles que les numéros de compte et de routage tokenisés, les données de solde, les informations sur la propriété et les données de transaction.
L’accès à ces données vous permet d’effectuer des actions comme la vérification des soldes avant d’initier un paiement afin de réduire le risque d’un échec du paiement dû à des fonds insuffisants.
Financial Connections permet à vos utilisateurs de connecter leurs comptes en moins d’étapes grâce à Link. Ils peuvent ainsi enregistrer et réutiliser facilement leurs coordonnées bancaires auprès des marchands Stripe.
Créer ou récupérer un objet CustomerRecommandéCôté serveur
Créez un objet Customer lorsque votre client crée un compte auprès de votre entreprise, ou récupérez l’objet Customer existant associé à cet utilisateur. L’association de l’ID de l’objet Customer à votre propre représentation interne d’un client vous permet de récupérer et d’utiliser ultérieurement les informations de paiement enregistrées. Ajoutez une adresse e-mail à l’objet Customer pour activer l’optimisation des utilisateurs connus de Financial Connections.
Créer un PaymentIntentCôté serveur
Un PaymentIntent est un objet qui représente votre intention d’encaisser le paiement d’un client et qui suit le cycle de vie du processus de paiement étape par étape.
Côté serveur
Tout d’abord, créez un PaymentIntent sur votre serveur et spécifiez le montant à collecter et la devise usd. Si vous possédez déjà une autre intégration utilisant l’API Payment Intents, ajoutez us_ à la liste des types de moyens de paiement de votre PaymentIntent. Précisez aussi l’ID de l’objet Customer.
Si vous souhaitez réutiliser le moyen de paiement dans le futur, fournissez le paramètre setup_future_usage avec la valeur off_.
Par défaut, lors de la collecte des coordonnées bancaires, Financial Connections est utilisé pour vérifier instantanément le compte de votre client. Une option de secours comprenant la saisie manuelle du numéro de compte et la vérification par microversement peut être utilisée. Consultez la documentation relative à Financial Connections pour savoir comment configurer Financial Connections et accéder à des données de compte supplémentaires de façon à optimiser votre intégration ACH. Par exemple, vous pouvez utiliser Financial Connections pour consulter le solde d’un compte avant d’initier le paiement ACH.
Remarque
Pour accéder à des données supplémentaires après qu’un client a authentifié son compte, celui-ci doit associer de nouveau son compte avec des autorisations étendues.
Côté client
Un PaymentIntent contient une clé secrète du client. Au lieu de transmettre la totalité de l’objet PaymentIntent, vous pouvez utiliser la clé secrète du client dans votre application React Native pour finaliser le processus de paiement en toute sécurité. Dans votre application, demandez un PaymentIntent auprès de votre serveur et sauvegardez sa clé secrète du client.
function PaymentScreen() { // ... const fetchIntentClientSecret = async () => { const response = await fetch(`${API_URL}/create-intent`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ // This is an example request body, the parameters you pass are up to you customer: '<CUSTOMER_ID>', product: '<PRODUCT_ID>', }), }); const {clientSecret} = await response.json(); return clientSecret; }; return <View>...</View>; }
Collecter les informations du moyen de paiementCôté client
Plutôt que d’envoyer la totalité de l’objet PaymentIntent au client, utilisez sa clé secrète provenant de l’étape précédente. Il ne s’agit pas de vos clés API qui authentifient les requêtes de l’API de Stripe.
Utilisez la clé secrète du client avec prudence, car elle peut servir à finaliser le paiement. Ne l’enregistrez pas, ne l’intégrez pas dans des URL et ne la dévoilez à personne d’autre que votre client.
Utilisez collectBankAccountForPayment pour recueillir les coordonnées bancaires, créer un PaymentMethod, et rattacher ce PaymentMethod au PaymentIntent. Vous devez inclure le nom du titulaire du compte dans le paramètre billingDetails pour créer un PaymentMethod ACH Direct Debit.
import {collectBankAccountForPayment} from '@stripe/stripe-react-native'; export default function MyPaymentScreen() { const [name, setName] = useState(''); const handleCollectBankAccountPress = async () => { // Fetch the intent client secret from the backend. // See `fetchIntentClientSecret()`'s implementation above. const {clientSecret} = await fetchIntentClientSecret(); const {paymentIntent, error} = await collectBankAccountForPayment( clientSecret, { paymentMethodType: 'USBankAccount', paymentMethodData: { billingDetails: { name: "John Doe", }, }, }, ); if (error) { Alert.alert(`Error code: ${error.code}`, error.message); } else if (paymentIntent) { Alert.alert('Payment status:', paymentIntent.status); if (paymentIntent.status === PaymentIntents.Status.RequiresConfirmation) { // The next step is to call `confirmPayment` } else if ( paymentIntent.status === PaymentIntents.Status.RequiresAction ) { // The next step is to call `verifyMicrodepositsForPayment` } } }; return ( <PaymentScreen> <TextInput placeholder="Name" onChange={(value) => setName(value.nativeEvent.text)} /> <Button onPress={handleCollectBankAccountPress} title="Collect bank account" /> </PaymentScreen> ); }
Cela charge une fenêtre modale sur la page qui gère la collecte et la vérification des informations du compte bancaire. Une fois le chargement terminé, le PaymentMethod est automatiquement rattaché au PaymentIntent.
FacultatifPersonnaliser le collecteur de comptes bancairesCôté client
Mode sombre
Par défaut, le collecteur de compte bancaire bascule automatiquement entre les couleurs compatibles avec le mode clair et sombre en fonction des paramètres de l’appareil. Si votre application ne prend pas en charge le mode clair ou sombre, vous pouvez définir style sur alwaysLight ou alwaysDark, respectivement.
const {session, error} = await collectBankAccountForPayment( clientSecret, { style: 'alwaysLight', }, );
Pour obtenir une apparence toujours claire ou toujours sombre dans votre application Android, utilisez la classeAppCompatDelegate d’Android. Notre interface utilisateur respecte automatiquement ce paramètre.
Configurer une URL de redirection (iOS uniquement)Côté client
Lorsqu’un client quitte votre application (par exemple, pour s’authentifier dans Safari ou dans son application bancaire), donnez-lui un moyen de revenir automatiquement dans votre application. De nombreux types de moyens de paiement nécessitent une URL de redirection. Si vous n’en fournissez pas, nous ne pourrons pas présenter à vos utilisateurs les moyens de paiement nécessitant une URL de redirection, même si vous les avez activés.
Pour fournir une URL de redirection :
- Enregistrez une URL personnalisée. Les liens universels ne sont pas pris en charge.
- Configurez votre URL personnalisée.
- Configurez votre composant racine pour qu’il transfère l’URL au SDK de Stripe, comme illustré ci-dessous.
Remarque
Si vous utilisez Expo, définissez votre schéma dans le fichier app..
import { useEffect, useCallback } from 'react'; import { Linking } from 'react-native'; import { useStripe } from '@stripe/stripe-react-native'; export default function MyApp() { const { handleURLCallback } = useStripe(); const handleDeepLink = useCallback( async (url: string | null) => { if (url) { const stripeHandled = await handleURLCallback(url); if (stripeHandled) { // This was a Stripe URL - you can return or add extra handling here as you see fit } else { // This was NOT a Stripe URL – handle as you normally would } } }, [handleURLCallback] ); useEffect(() => { const getUrlAsync = async () => { const initialUrl = await Linking.getInitialURL(); handleDeepLink(initialUrl); }; getUrlAsync(); const deepLinkListener = Linking.addEventListener( 'url', (event: { url: string }) => { handleDeepLink(event.url); } ); return () => deepLinkListener.remove(); }, [handleDeepLink]); return ( <View> <AwesomeAppComponent /> </View> ); }
Pour plus d’informations sur les schémas d’URL natifs, consultez la documentation Android et iOS.
FacultatifAccéder aux données sur un compte bancaire Financial ConnectionsCôté serveur
Vous ne pouvez accéder aux données Financial Connections que si vous demandez des autorisations d’accès supplémentaires lors de la création de votre PaymentIntent .
Une fois que votre client a terminé le flux d’authentification Stripe Financial Connections, l’objet PaymentMethod us_ renvoyé inclut un ID de financial_connections_account correspondant à un compte Financial Connections. Utilisez cet ID pour accéder aux données du compte.
Erreur fréquente
Les comptes bancaires que vos clients associent par saisie manuelle ou par le biais de microversements n’ont pas d’ID financial_ au niveau du moyen de paiement.
Pour déterminer l’ID du compte Financial Connections, récupérez le PaymentIntent et développez l’attribut payment_ :
{ "id": "{{PAYMENT_INTENT_ID}}", "object": "payment_intent", // ... "payment_method": { "id": "{{PAYMENT_METHOD_ID}}", // ... "type": "us_bank_account" "us_bank_account": { "account_holder_type": "individual", "account_type": "checking", "bank_name": "TEST BANK", "financial_connections_account": "{{FINANCIAL_CONNECTIONS_ACCOUNT_ID}}", "fingerprint": "q9qchffggRjlX2tb", "last4": "6789", "routing_number": "110000000" } } // ... }
Si vous avez choisi de recevoir des autorisations balances, nous vous recommandons de vérifier l’état du solde à ce moment-là afin de vous assurer de disposer de fonds suffisants avant de confirmer un paiement.
Découvrez comment utiliser des données de compte supplémentaires pour optimiser votre intégration ACH avec Financial Connections.
Collecter l'accusé de réception du mandat et effectuer le paiementCôté client
Avant de pouvoir initier le paiement, vous devez obtenir l’autorisation de votre client. Pour ce faire, présentez-lui les conditions du mandat et demandez-lui de les accepter.
Pour vous conformer aux règles de la Nacha, vous devez obtenir l’autorisation d’initier le paiement auprès de votre client. Pour ce faire, présentez-lui les conditions du mandat et demandez-lui de les accepter. Pour en savoir plus, consultez la page sur les mandats.
Lorsque le client accepte les conditions du mandat, vous devez confirmer le PaymentIntent. Utilisez confirmPayment pour confirmer l’intention de payement.
import {confirmPayment} from '@stripe/stripe-react-native'; export default function MyPaymentScreen() { const [name, setName] = useState(''); const handleCollectBankAccountPress = async () => { // See above }; const handlePayPress = async () => { // use the same clientSecret as earlier, see above const {error, paymentIntent} = await confirmPayment(clientSecret, { paymentMethodType: 'USBankAccount', }); if (error) { Alert.alert(`Error code: ${error.code}`, error.message); } else if (paymentIntent) { if (paymentIntent.status === PaymentIntents.Status.Processing) { // The debit has been successfully submitted and is now processing } else if ( paymentIntent.status === PaymentIntents.Status.RequiresAction && paymentIntent?.nextAction?.type === 'verifyWithMicrodeposits' ) { // The payment must be verified with `verifyMicrodepositsForPayment` } else { Alert.alert('Payment status:', paymentIntent.status); } } }; return ( <PaymentScreen> <TextInput placeholder="Name" onChange={(value) => setName(value.nativeEvent.text)} /> <Button onPress={handleCollectBankAccountPress} title="Collect bank account" /> <Button onPress={handlePayPress} title="Pay" /> </PaymentScreen> ); }
Sauf échec de l’opération, Stripe renvoie un objet PaymentIntent présentant l’un des états suivants :
| État | Description | Étapes suivantes |
|---|---|---|
RequiresAction | La vérification du compte bancaire requiert une action supplémentaire. | Étape 6 : Vérification des comptes bancaires à l’aide de microversements |
Processing | Le compte bancaire a été vérifié instantanément ou la vérification n’est pas nécessaire. | Étape 7 : Confirmation du succès du PaymentIntent |
Après avoir confirmé le PaymentIntent, un e-mail de confirmation du mandat et les coordonnées bancaires recueillies doivent être envoyés à votre client. Par défaut, Stripe gère cette étape, mais vous pouvez choisir d’envoyer des notifications personnalisées si vous préférez.
Vérifier le compte bancaire à l'aide de microversementsCôté client
Tous les clients ne peuvent pas instantanément vérifier leur compte bancaire. Stripe envoie alors automatiquement un microversement au compte bancaire. Ce versement peut apparaître après un à deux jours ouvrables sur le relevé bancaire en ligne du client. Ce versement peut prendre une des deux formes suivantes :
- Code de libellé : Stripe envoie un microversement unique de 0,01 USD sur le compte bancaire du client avec un
descriptorCodeunique à 6 chiffres qui commence par SM. Votre client utilise cette chaîne pour vérifier son compte bancaire. - Montant : Stripe envoie deux microversements distincts sur le compte bancaire du client avec un code de libellé indiquant
ACCTVERIFY. Votre client utilise les montants de ces versements pour vérifier son compte bancaire.
Si l’appel confirmPayment effectué à l’étape précédente renvoie un PaymentIntent avec l’état requiresAction, le champ nextAction du PaymentIntent contient des informations utiles à la vérification.
nextAction: { type: 'verifyWithMicrodeposits'; redirectUrl: "https://payments.stripe.com/…", microdepositType: "descriptor_code"; arrivalDate: "1647586800"; }
Si vous avez fourni une adresse e-mail de facturation, Stripe l’utilise pour notifier votre client de la date d’arrivée prévue des versements. L’e-mail envoyé inclut un lien vers la page de vérification hébergée par Stripe, sur laquelle il peut confirmer les montants des versements et effectuer la vérification.
Avertissement
Les tentatives de vérification sont limitées à dix pour les microversements basés sur des libellés et à trois pour ceux basés sur des montants. Si vous atteignez cette limite, nous ne pouvons plus vérifier le compte bancaire. En outre, les vérifications à l’aide de microversements expirent au bout de 10 jours. Si vous ne vérifiez pas les microversements pendant ce laps de temps, le PaymentIntent réitère sa demande d’informations sur le moyen de paiement. En informant clairement vos clients sur le fonctionnement de ces microversements, vous évitez d’éventuels problèmes liés à la vérification.
Lorsque vous savez que le payement a l’état requiresActionet que nextAction est de type verifyWithMicrodeposits, vous pouvez finaliser la vérification d’un compte bancaire de deux manières différentes :
- Contrôlez directement les versements dans votre application en appelant
verifyMicrodepositsForPaymentaprès avoir récupéré les montants ou le code du libellé.
import { verifyMicrodepositsForPayment } from '@stripe/stripe-react-native'; export default function MyPaymentScreen() { const [verificationText, setVerificationText] = useState(''); return ( <TextInput placeholder="Descriptor code or comma-separated amounts" onChange={(value) => setVerificationText(value.nativeEvent.text)} // Validate and store your user's verification input /> <Button title="Verify microdeposit" onPress={async () => { const { paymentIntent, error } = await verifyMicrodepositsForPayment(secret, { // Provide either the descriptorCode OR amounts, not both descriptorCode: verificationText, amounts: verificationText, }); if (error) { Alert.alert(`Error code: ${error.code}`, error.message); } else if (paymentIntent) { Alert.alert('Payment status:', paymentIntent.status); } }} /> ); }
- Utilisez la page de vérification hébergée par Stripe que nous vous fournissons automatiquement. Pour cela, utilisez l’URL
nextAction[redirectUrl]dans l’objetnextAction(voir ci-dessus) pour rediriger votre client vers la procédure de vérification.
const {error, paymentIntent} = await confirmPayment(clientSecret, { paymentMethodType: 'USBankAccount', }); if (error) { Alert.alert(`Error code: ${error.code}`, error.message); } else if (paymentIntent) { if ( paymentIntent.status === PaymentIntents.Status.RequiresAction && paymentIntent?.nextAction?.type === 'verifyWithMicrodeposits' ) { // Open the Stripe-hosted verification page Linking.openURL(paymentIntent.nextAction.redirectUrl); } }
Dès que le compte bancaire a été vérifié, Stripe renvoie l’objet PaymentIntent avec l’état status défini sur Processing, et envoie un événement webhook payment_intent.processing.
La vérification peut échouer pour plusieurs raisons. L’échec peut se produire de manière synchrone comme une réponse d’erreur directe, ou de manière asynchrone à travers un événement webhook payment_intent.payment_failed (voir les exemples ci-après).
| Code d’erreur | Synchrone ou asynchrone | Message | Changement d’état |
|---|---|---|---|
payment_ | De façon synchrone ou asynchrone via un événement webhook | Les microversements ont échoué. Veuillez vérifier la validité des numéros de compte, de l’établissement et de transit fournis. | status présente la valeur requires_, et le paramètre last_ est défini. |
payment_ | De façon synchrone | Les montants fournis ne correspondent pas à ceux envoyés au compte bancaire. Il vous reste {attempts_remaining} tentatives de vérification. | Inchangé |
payment_ | De façon synchrone ou asynchrone via un événement webhook | Nombre de tentatives de vérification autorisées dépassé | status présente la valeur requires_, et le paramètre last_ est défini. |
payment_ | De façon asynchrone via un événement webhook | Expiration des microversements. Le client n’a pas vérifié son compte bancaire dans le délai prévu de 10 jours. | status présente la valeur requires_, et le paramètre last_ est défini. |
Confirmer l'aboutissement du PaymentIntentCôté serveur
Le prélèvement automatique ACH est un moyen de paiement à notification différée. Ceci signifie que pour recevoir une notification du succès ou de l’échec d’un paiement, il faut compter jusqu’à quatre jours ouvrables après le déclenchement du prélèvement sur le compte du client.
Initialement, le PaymentIntent que vous créez présente l’état processing. Une fois le paiement abouti, l’état du PaymentIntent passe de processing à succeeded.
Nous vous recommandons d’utiliser des webhooks afin de confirmer que le paiement a réussi et d’informer le client que le paiement a été effectué. Vous pouvez également afficher les événements sur le Dashboard Stripe.
Tester votre intégration
Découvrez comment tester des scénarios avec des vérifications instantanées à l’aide de Financial Connections.
Envoyer des e-mails de transaction dans un environnement de test
Une fois que vous avez collecté les coordonnées bancaires et accepté un mandat, envoyez les courriels de confirmation du mandat et de vérification du microversement dans un environnement de bac à sable.
Si votre domaine est {domain} et votre nom d’utilisateur est {username}, utilisez le format d’adresse e-mail suivant pour envoyer des e-mails de transaction de test : {username}+test_email@{domain}.
Par exemple, si votre domaine est example.com et que votre nom d’utilisateur est info, utilisez le format info+test_email@example.com pour tester les paiements ACH Direct Debit. Ce format garantit que les e-mails sont acheminés correctement. Si vous n’incluez pas le suffixe +test_email, nous n’enverrons pas l’e-mail.
Erreur fréquente
Pour déclencher ces e-mails pendant le test, vous devez d’abord activer votre compte Stripe.
Numéros de comptes de test
Stripe fournit plusieurs numéros de compte de test et les tokens correspondants que vous pouvez utiliser pour vous assurer que votre intégration pour les comptes bancaires saisis manuellement est prête à passer en mode production.
| Numéro de compte | Token | Numéro de routage | Comportement |
|---|---|---|---|
000123456789 | pm_ | 110000000 | Le paiement aboutit. |
000111111113 | pm_ | 110000000 | Le paiement échoue parce que le compte est clôturé. |
000000004954 | pm_ | 110000000 | Le paiement est bloqué par Radar en raison d’un risque élevé de fraude. |
000111111116 | pm_ | 110000000 | Le paiement échoue car aucun compte n’est trouvé. |
000222222227 | pm_ | 110000000 | Le paiement échoue en raison de fonds insuffisants. |
000333333335 | pm_ | 110000000 | Le paiement échoue parce que les débits ne sont pas autorisés. |
000444444440 | pm_ | 110000000 | Le paiement échoue en raison d’une devise non valide. |
000666666661 | pm_ | 110000000 | Le paiement ne parvient pas à envoyer les microversements. |
000555555559 | pm_ | 110000000 | Le paiement déclenche un litige. |
000000000009 | pm_ | 110000000 | Le traitement du paiement est indéfini. Utile pour tester { % si $checkoutSessions %}Expiration de la session de paiement{ % else / %}Annulation de PaymentIntent{ % /if %}. |
000777777771 | pm_ | 110000000 | Le paiement échoue, car son montant entraîne un dépassement de la limite hebdomadaire de volume de paiement du compte. |
Avant d’effectuer les transactions de test, vous devez vérifier tous les comptes de test pour lesquels le paiement aboutit ou échoue automatiquement. Pour ce faire, utilisez les codes de libellé ou les montants de microversements de test ci-dessous.
Tester des codes de libellé et des montants de microversements
Pour simuler différents scénarios, utilisez ces montants de microversements ou ces codes de libellé 0.01.
| Valeurs de microversement | Valeurs de code de libellé 0.01 | Scénario |
|---|---|---|
32 et 45 | SM11AA | Simule la vérification du compte. |
10 et 11 | SM33CC | Simule le dépassement du nombre de tentatives de vérification autorisé. |
40 et 41 | SM44DD | Simule l’expiration du délai de validité d’un microversement. |
Comportement de règlement des tests
Les transactions de test sont réglées instantanément et ajoutées à votre solde de test disponible. Ce comportement diffère de celui du mode production, où les transactions peuvent prendre plusieurs jours pour être réglées dans votre solde disponible.
FacultatifVérification instantanée uniquementCôté serveur
Par défaut, le paiement à l’aide d’un compte bancaire américain permet à vos clients d’utiliser la vérification instantanée du compte bancaire ou les microversements. Vous pouvez aussi exiger la vérification instantanée du compte bancaire uniquement en utilisant le paramètre verification_method à la création du PaymentIntent.
Ainsi, vous n’avez pas besoin de gérer la vérification à l’aide de microversements. Cependant, si la vérification instantanée échoue, l’état du PaymentIntent est requires_, indiquant l’échec de la vérification instantanée du compte bancaire de votre client.
FacultatifVérification à l'aide de microversements uniquementCôté serveur
Par défaut, le paiement à l’aide d’un compte bancaire américain permet à vos clients d’utiliser la vérification instantanée du compte bancaire ou les microversements. Vous pouvez aussi exiger la vérification du compte bancaire à l’aide de microversements uniquement en utilisant le paramètre verification_method à la création du PaymentIntent.
Mise en garde
Si vous utilisez un formulaire de paiement personnalisé, vous devez développer votre propre interface utilisateur pour collecter les coordonnées bancaires des clients. De la même manière, si vous désactivez l’envoi d’e-mails par Stripe en cas de microversements, vous devez développer votre propre interface utilisateur pour que votre client puisse confirmer le code ou le montant du microversement.
FacultatifRéférence du paiement
Le numéro de référence du paiement est une valeur générée par la banque qui permet au titulaire du compte bancaire d’utiliser sa banque pour localiser des fonds. Lorsque le paiement aboutit, Stripe fournit le numéro de référence du paiement dans le Dashboard, ainsi que dans l’objet Charge.
| État du paiement | Valeur de référence du paiement |
|---|---|
| En attente | Indisponibles |
| En échec | Indisponibles |
| Réussi | Disponible (par exemple, 091000015001234) |
De plus, lorsque vous recevez le webhook charge., consultez le contenu de payment_ pour localiser la payment_reference.
L’exemple d’événement suivant montre le rendu d’un paiement ACH abouti avec un numéro de référence de paiement.
{ "id": "{{EVENT_ID}}", "object": "event", // omitted some fields in the example "type": "charge.succeeded", "data": { "object": { "id": "{{PAYMENT_ID}}", "object": "charge", //... "paid": true, "payment_intent": "{{PAYMENT_INTENT_ID}}", "payment_method": "{{PAYMENT_METHOD_ID}}", "payment_method_details": { "type": "us_bank_account", "us_bank_account": { "account_holder_type": "individual", "account_type": "checking", "bank_name": "TEST BANK", "fingerprint": "Ih3foEnRvLXShyfB", "last4": "1000", "payment_reference": "091000015001234", "routing_number": "110000000" } } // ... } } }
Consultez le contenu de destination_ pour localiser la référence du remboursement associée aux paiements ACH remboursés.
L’exemple d’événement suivant montre le rendu d’un remboursement de paiement ACH abouti avec un numéro de référence de remboursement. En savoir plus sur les remboursements.
{ "id": "{{EVENT_ID}}", "object": "event", "type": "charge.refund.updated", "data": { "object": { "id": "{{REFUND_ID}}", "object": "refund", //... "payment_intent": "{{PAYMENT_INTENT_ID}}", "destination_details": { "type": "us_bank_transfer", "us_bank_transfer": { "reference": "091000015001111", "reference_status": "available" } } // ... } } }