# Prélèvement automatique ACH avec l'API Charges
Ancien guide relatif à l'acceptation des paiements ACH avec notre ancienne API Charges.
> #### Ancien
>
> Le contenu ci-dessous décrit une *ancienne* (Technology that's no longer recommended) méthode pour la collecte des paiements ACH.
>
> Si vous créez une nouvelle intégration, utilisez plutôt l’une de nos méthodes actuelles pour [accepter les paiements ACH](https://docs.stripe.com/payments/ach-direct-debit.md).
>
> Si vous disposez d’une intégration existante qui accepte les paiements ACH en utilisant l’API Charges, nous vous recommandons sa [migration vers l’API Payment Intents](https://docs.stripe.com/payments/ach-direct-debit/migrating-from-charges.md). L’API Payment Intents comprend une vérification instantanée intégrée.
Vous pouvez également recevoir des virements ACH de vos clients par [transfert bancaire en USD](https://docs.stripe.com/payments/bank-transfers.md)
Stripe vous permet d’accepter les paiements ACH quasiment comme des paiements par carte de crédit. Il suffit de fournir un compte bancaire vérifié comme argument `source` pour une demande de paiement. Cependant, l’acceptation des comptes bancaires nécessite un flux de vérification initial légèrement différent de celui employé pour accepter les cartes de crédit :
1. Les comptes bancaires doivent d’abord être [vérifiés](https://docs.stripe.com/ach-deprecated.md#verifying).
1. L’utilisation des comptes bancaires doit être [autorisée](https://docs.stripe.com/ach-deprecated.md#authorization) par les clients.
Une fois ces deux étapes franchies, le client peut utiliser son compte bancaire comme tout autre moyen de paiement, y compris pour les paiements récurrents et les applications [Connect](https://docs.stripe.com/ach-deprecated.md#connect). Les conditions d’utilisation d’un compte bancaire et d’une carte de crédit présentent deux différences essentielles :
- La confirmation du succès ou de l’échec des paiements ACH peut nécessiter jusqu’à cinq jours ouvrables. Il faut donc prévoir jusqu’à sept jours ouvrables pour qu’ils soient reportés sur votre solde Stripe disponible.
- Vous ne pouvez accepter que des fonds en USD et uniquement à partir de comptes bancaires américains. Par ailleurs, votre compte doit disposer d’un compte bancaire américain/en USD pour accepter les paiements ACH.
## Collecte et vérification des comptes bancaires
Avant de pouvoir créer un prélèvement ACH, vous devez d’abord collecter et vérifier le numéro de compte bancaire et le numéro de routage de votre client. Pour identifier correctement le compte bancaire, vous devez également collecter le nom de la personne ou de l’entreprise titulaire du compte, et savoir si le compte appartient à un particulier ou à une société. Stripe propose deux méthodes de collecte : la collecte et la vérification instantanées avec [Plaid](https://plaid.com/docs/auth/partnerships/stripe/), ou la collecte à l’aide de [Stripe.js](https://docs.stripe.com/payments/elements.md) avec vérification différée à l’aide de micro-versements. L’utilisation de Plaid peut entraîner des coûts supplémentaires, en fonction de la taille de votre entreprise. Tenez-en compte lorsque vous prenez votre décision.
Comme seuls les comptes bancaires vérifiés et dont l’utilisation est autorisée par le client peuvent être débités, il est recommandé de conserver le compte bancaire dans un objet `Customer` de Stripe pour pouvoir le réutiliser.
## Utilisation de Plaid

Plaid offre le moyen le plus rapide de collecter et de vérifier les informations bancaires de votre clientèle. Grâce à l’intégration Stripe + Plaid, vous disposez instantanément d’un compte bancaire vérifié qui vous permet de facturer immédiatement. Il suffit pour cela de suivre le [lien vers Plaid](https://plaid.com/docs/auth/partnerships/stripe/) afin de recevoir un token de compte bancaire Stripe directement à partir de Plaid.
**Étape 1 : Créer votre compte Plaid**
Si vous n’avez pas de compte Plaid, [créez-en un](https://plaid.com/docs/auth/partnerships/stripe). Votre compte est automatiquement activé pour pouvoir accéder à l’intégration. Pour vérifier que votre compte Plaid est bien activé pour intégrer Stripe, accédez à la section [Intégrations](https://dashboard.plaid.com/team/integrations) du Dashboard du compte. Vérifiez que votre compte Stripe y est bien connecté.
**Étape 2 : Récupérez un token Link**
Un `link_token` est un token à usage unique qui initialise Plaid Link. Vous pouvez créer un link_token et le configurer en fonction de vos flux Link en appelant l’endpoint [Create Link Token](https://plaid.com/docs/#create-link-token) depuis votre serveur.
#### curl
```bash
curl https://sandbox.plaid.com/link/token/create \
-H "Content-Type: application/json" \
-d "{\"client_id\": \"{{PLAID_CLIENT_ID}}\",\"secret\": \"{{PLAID_SECRET}}\",\"client_name\": \"My App\",\"user\": {\"client_user_id\": \"Stripe test\"},\"products\": [\"auth\"],\"country_codes\": [\"US\"],\"language\": \"en\", \"webhook\": \"https://webhook.sample.com/\"}"
```
**Étape 3 : Effectuer l’intégration avec Plaid Link**
L’intégration avec Link ne nécessite que quelques lignes de JavaScript côté client et d’un petit gestionnaire côté serveur pour échanger le `public_token` de Link contre un `access_token` de Plaid et un token de compte bancaire de Stripe.
```html
```
**Étape 4 : Écrire un gestionnaire côté serveur**
Le module Link gère l’ensemble du flux d’onboarding de manière sécurisée et rapide, mais ne récupère pas réellement les données de compte d’un utilisateur. À la place le module Link retourne une valeur `public_token` et un tableau `accounts`, qui est une propriété de l’objet `metadata`, et fait partie du rappel `onSuccess`.
Le tableau `accounts` contient des informations sur les comptes bancaires associés aux identifiants saisis par l’utilisateur. Il peut inclure plusieurs comptes si l’utilisateur possède plusieurs comptes bancaires dans l’établissement. Afin d’éviter toute confusion quant au compte que l’utilisateur souhaite employer avec Stripe, définissez [Sélectionner un compte](https://dashboard.plaid.com/link/account-select) sur **« Activé pour un compte »** dans le Dashboard du développeur de Plaid. Lorsque ce paramètre est sélectionné, le tableau des comptes contiendra toujours un seul élément.
Lorsque votre serveur possède un `public_token` et un `account_id`, vous devez effectuer deux appels au serveur Plaid pour obtenir le token du compte bancaire Stripe ainsi que le `access_token` de Plaid à utiliser pour les autres requêtes d’API de Plaid.
#### curl
```bash
curl https://sandbox.plaid.com/item/public_token/exchange \
-H "Content-Type: application/json" \
-d "{\"client_id\": \"{{PLAID_CLIENT_ID}}\", \"secret\": \"{{PLAID_SECRET}}\", \"public_token\": \"{{PLAID_LINK_PUBLIC_TOKEN}}\"}"
curl https://sandbox.plaid.com/processor/stripe/bank_account_token/create \
-H "Content-Type: application/json" \
-d "{\"client_id\": \"{{PLAID_CLIENT_ID}}\", \"secret\": \"{{PLAID_SECRET}}\", \"access_token\": \"{{PLAID_ACCESS_TOKEN}}\", \"account_id\": \"{{PLAID_ACCOUNT_ID}}\"}"
```
La réponse contient un ID de token de compte bancaire Stripe vérifié. Vous pouvez associer ce token à un objet `Customer` de Stripe, ou créer un paiement directement sur celui-ci.
```json
{
"stripe_bank_account_token": "btok_orWziM4j7CiRL8J4vQmX",
"request_id": "[Unique request ID]"
}
```
**Étape 5 : Se préparer au mode production**
Plaid emploie différents hôtes d’API pour gérer les requêtes de test et de production. La requête ci-dessus utilise l’environnement de test de Plaid, qui contient des données fictives. L’environnement de développement de Plaid vous permet de réaliser des essais avec des utilisateurs réels. Il prend en charge jusqu’à 100 objets, qui ne vous sont pas facturés. Au moment de passer en production, utilisez [l’environnement de production de Plaid](https://plaid.com/docs/auth/partnerships/stripe/#step4).
## Collecte et vérification manuelles des comptes bancaires
Plaid prend en charge la vérification instantanée pour la plupart des banques les plus connues. Toutefois, si ce n’est pas le cas pour la banque de votre client ou si vous ne souhaitez pas réaliser l’intégration avec Plaid, collectez et vérifiez les données bancaires du client uniquement à l’aide de Stripe.
Tout d’abord, utilisez [Stripe.js](https://docs.stripe.com/js/tokens/create_token?type=bank_account) pour collecter de manière sécurisée les informations relatives au compte bancaire de votre client et recevez en retour un token représentatif. Lorsque vous disposez de ce token, associez-le à un client Stripe sur votre compte. Pour respecter les [règles de Nacha](https://www.nacha.org/newrules), assurez-vous de fournir un nom de titulaire de compte valide pour le client.
#### curl
```bash
curl https://api.stripe.com/v1/customers \
-u <>: \
-d "name"="Jenny Rosen" \
-d "source"="btok_4XNshPRgmDRCVi"
```
Il est nécessaire de vérifier les comptes bancaires des *clients* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments). Lorsqu’il est utilisé sans Plaid, Stripe effectue automatiquement deux petits versements à cette fin. Ces versements apparaissent sur le relevé en ligne du client au bout d’un à deux jours ouvrables. Ce relevé comporte une description indiquant `ACCTVERIFY`. Votre client doit vous transmettre ces montants.
Lorsque vous acceptez ces montants, sachez que la limite est de trois tentatives de vérification infructueuses. Si cette limite est dépassée, il nous est impossible de vérifier le compte bancaire. Un message indiquant clairement en quoi consistent ces micro-versements et comment vous les utilisez peut aider vos clients à éviter des problèmes de vérification. Dès que vous disposez de ces montants, vous pouvez vérifier le compte bancaire.
#### curl
```bash
curl https://api.stripe.com/v1/customers/cus_AFGbOSiITuJVDs/sources/ba_17SHwa2eZvKYlo2CUx7nphbZ/verify \
-u <>: \
-d "amounts[]"=32 \
-d "amounts[]"=45
```
Une fois le compte bancaire vérifié, vous pouvez y imputer des paiements.
## Autorisation de paiement
Avant de créer un paiement ACH, demandez à votre client de vous autoriser à effectuer des prélèvements sur son compte. Cette démarche assure la conformité avec le réseau ACH et vous protège contre les litiges, les frais supplémentaires et les paiements annulés. Consultez la [page d’assistance](https://support.stripe.com/questions/collect-ach-authorization-from-customers) pour en savoir plus sur les conditions d’autorisation.
## Création d’un paiement ACH
Pour créer un paiement sur un compte bancaire vérifié, utilisez l’objet `Customer` sauvegardé tout comme vous le feriez avec une carte bancaire.
```curl
curl https://api.stripe.com/v1/charges \
-u "<>:" \
-d amount=1500 \
-d currency=usd \
-d customer=cus_AFGbOSiITuJVDs
```
Toute tentative de prélèvement d’un compte bancaire non vérifié entraîne une erreur assortie du message « La création d’un paiement ACH nécessite la vérification du compte bancaire du client ».
Si le client dispose de plusieurs sources sauvegardées (de tout type), indiquez le compte bancaire à utiliser en transmettant son ID en tant que paramètre [source](https://docs.stripe.com/api.md#create_charge-source).
## Test de cette intégration
Vous pouvez simuler des paiements ACH qui ont réussi ou échoué en utilisant les numéros de routage et de compte bancaires suivants :
- Numéro de routage : `110000000`
- Numéro de compte :
- `000123456789` (succès de l’opération)
- `000111111116` (échec de l’opération)
- `000111111113`(compte fermé)
- `000222222227` (NSF/fonds insuffisants)
- `000333333335` (débit non autorisé)
- `000444444440` (devise non valide)
Pour simuler les réussites et les échecs de la vérification des comptes bancaires, utilisez ces montants représentatifs :
- `[32, 45]` (succès)
- `[toute autre combinaison de montants]` (échec)
## Flux de vérification de paiements ACH
La confirmation du succès ou de l’échec d’un paiement ACH peut demander jusqu’à cinq jours ouvrables.
- Lors de leur création, les paiements ACH ont comme statut initial `pending`.
- Une opération sur solde *en attente* est immédiatement créée avec le montant du paiement, déduction faite de nos frais.
- Les paiements créés à partir de 22 h UTC sont actuellement traités le jour ouvrable suivant.
- Au cours des quatre jours ouvrables suivants, le paiement prend l’état `succeeded` ou `failed` en fonction de la banque du client.
- Les paiements ACH correctement exécutés sont reportés dans votre solde Stripe disponible après sept jours ouvrables, date à laquelle vous pouvez transférer automatiquement ou manuellement les fonds sur votre compte bancaire.
- L’échec d’un paiement ACH entraîne l’annulation de l’opération sur solde *en attente* créée.
- Le paiement apparaîtra sur le relevé bancaire de votre client un à deux jours après sa création. (Votre client sera informé de l’aboutissement du paiement avant que la banque ne le notifie à Stripe.)
Un paiement peut échouer pour différentes raisons : des fonds insuffisants, un numéro de compte erroné ou encore la décision du client de désactiver les prélèvements sur son compte bancaire.
Il peut parfois arriver que Stripe reçoive un échec de paiement ACH de la banque alors que le paiement est déjà passé à l’état `succeeded`. Quand cela se produit, Stripe créée un litige dont le paramètre `reason` (motif) peut être :
- `insufficient_funds`
- `incorrect_account_details`
- `bank_cannot_process`
Dans ce cas de figure, Stripe prélève des frais d’échec de paiement.
## Gestion des litiges dans cette intégration
Un litige sur un paiement ACH ne ressemble en rien à un litige portant sur un paiement par carte bancaire. Si la banque d’un client accepte de restituer les fonds correspondant à un paiement contesté, nous débitons immédiatement les fonds de votre compte Stripe. Contrairement à ce qu’il est possible de faire dans le cadre d’un litige sur un paiement par carte bancaire, vous ne pouvez pas contester une annulation ACH. Pour résoudre le problème, vous devez contacter votre client.
Le client dispose généralement de 60 jours calendaires pour contester un paiement auprès de sa banque si le prélèvement ACH a été effectué sur un compte personnel, ou de 2 jours ouvrables s’il s’agit d’un compte commercial. Les paiements par prélèvement peuvent parfois être contestés après ces délais.
### Risque de versements en double en cas de remboursements et de litiges ACH
Si vous remboursez votre client de manière proactive alors que sa banque a parallèlement lancé une procédure de litige, il est possible que votre client reçoive deux virements pour la même transaction.
Lorsque vous effectuez un remboursement au titre d’un paiement ACH, vous devez en informer immédiatement votre client et lui préciser qu’il devra patienter entre 2 et 5 jours ouvrables pour voir figurer les fonds sur son compte bancaire.
## Remboursements
Vous pouvez rembourser les paiements ACH jusqu’à 90 jours à compter de la date du paiement initial à l’aide de l’[endpoint de remboursement](https://docs.stripe.com/api.md#refunds). Les délais et les risques associés à ces remboursements ACH diffèrent de ceux des remboursements par carte. Stripe ne vous informe pas des remboursements ACH réussis, mais envoie l’événement `refund.failed` si le traitement d’un remboursement ACH n’a pas été effectué. En cas d’échec, vous devez restituer les fonds à votre client en dehors de Stripe. Cette situation ne survient généralement que lorsqu’un blocage du compte intervient entre le paiement initial et la demande de remboursement.
## Notifications webhook spécifiques à ACH
Avec ACH, vous recevrez la plupart des notifications *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) classiques relatives à des paiements, avec quelques différences notables :
- Après avoir créé le paiement, vous recevez une notification `charge.pending`. Cependant, il faudra prévoir jusqu’à cinq jours ouvrables avant de recevoir la notification `charge.succeeded` ou `charge.failed`.
- La notification `charge.succeeded` vous est envoyée une fois que le paiement est passé à l’état `succeeded` et que les fonds sont disponibles sur votre solde.
- Une notification `charge.failed` est transmise en cas d’échec du transfert ACH, quelle qu’en soit la raison. Les attributs `failure_code` et `failure_message` correspondant au paiement sont définis et, à ce stade, les fonds sont retirés de votre solde Stripe en attente.
- Une notification `customer.source.updated` est envoyée lorsque le compte bancaire a été dûment vérifié. L’attribut `status` du compte bancaire prend alors la valeur `verified`.
- Si le compte bancaire n’a pas pu être vérifié à cause de l’échec de l’un des deux petits versements, la notification `customer.source.updated` vous est envoyée. L’attribut `status` du compte bancaire prend alors la valeur `verification_failed`.
## Assistance Connect
Grâce à *Connect* (Connect is Stripe's solution for multi-party businesses, such as marketplace or software platforms, to route payments between sellers, customers, and other recipients), votre plateforme peut gagner de l’argent tout en [traitant les paiements](https://docs.stripe.com/connect/charges.md). Vous pouvez :
- Créer le client sur le compte connecté, puis créer un [paiement direct](https://docs.stripe.com/connect/direct-charges.md)
- Créer le client [sur le compte de la plateforme](https://docs.stripe.com/connect/cloning-customers-across-accounts.md), puis créer un [paiement indirect](https://docs.stripe.com/connect/destination-charges.md) en utilisant le paramètre `transfer_data` (comme dans le code ci-dessous)
```curl
curl https://api.stripe.com/v1/charges \
-u "<>:" \
-d amount=1500 \
-d currency=usd \
-d customer=cus_AFGbOSiITuJVDs \
-d "transfer_data[amount]=850" \
-d "transfer_data[destination]={{CONNECTED_STRIPE_ACCOUNT_ID}}"
```
## Conditions d’utilisation du service
L’utilisation de l’API en mode production est soumise au [Contrat d’utilisation du service](https://stripe.com/legal/ssa) Stripe. N’hésitez pas à nous contacter si vous avez des questions concernant cet accord.