# Migrer votre intégration de cartes de base Migrez vers une intégration capable de gérer les demandes d'authentification de carte émanant des institutions financières Si vous avez suivi les directives du guide sur les [paiements par carte sans authentification bancaire](https://docs.stripe.com/payments/without-card-authentication.md), votre intégration créera des paiements qui seront refusés lorsque l’institution financière demandera au client d’authentifier l’achat. Si vous commencez à voir de nombreux paiements qui ne réussissent pas, comme celui dans le Dashboard ci-dessous, ou associés à un code d’erreur `requires_action_not_handled` dans l’API, vous devez mettre à niveau votre intégration de base de façon à gérer ces paiements au lieu de les refuser. ![Dashboard montrant un paiement échoué qui indique que cette institution financière exigeait l'authentification pour ce paiement](https://b.stripecdn.com/docs-statics-srv/assets/failed-payment-dashboard.9e22ec31f3c7063665911e26e389c5dc.png) Utilisez ce guide pour apprendre comment mettre à niveau l’intégration que vous avez conçue à l’aide du guide précédent de façon à ajouter du code serveur et client qui invite l’utilisateur à authentifier le paiement en affichant une fenêtre modale. > Découvrez un [exemple complet](https://github.com/stripe-samples/accept-a-payment/tree/master/custom-payment-flow) de cette intégration sur GitHub. ## Vérifiez si le paiement nécessite une authentification [Côté serveur] Apportez deux modifications au endpoint sur votre serveur qui crée le PaymentIntent : 1. **Supprimez** le paramètre [error_on_requires_action](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-error_on_requires_action) de façon à ne plus faire échouer les paiements qui nécessitent une authentification. À la place, l’état du PaymentIntent passe à `requires_action`. 1. **Ajoutez** le paramètre `confirmation_method` pour indiquer explicitement que vous souhaitez reconfirmer le paiement manuellement sur le serveur après avoir traité les demandes d’authentification. #### curl ```bash curl https://api.stripe.com/v1/payment_intents \ -u <>: \ -d amount=1099 \ -d currency=usd \ -d payment_method_types[]=card \ -d confirm=true \-d payment_method="{{PAYMENT_METHOD_ID}}" \ -d confirmation_method=manual ``` Ensuite, mettez à jour votre fonction « generate response » pour traiter l’état `requires_action` au lieu qu’une erreur soit générée : #### curl ```bash # If the request succeeds, check the # PaymentIntent's `status` and handle # its `next_action`. ``` ## Demander au client de s'authentifier [Côté client] Modifiez ensuite votre code côté client pour que Stripe ouvre une fenêtre modale lorsque votre client doit s’authentifier. Utilisez [stripe.handleCardAction](https://docs.stripe.com/js.md#stripe-handle-card-action) lorsque l’état d’un PaymentIntent est `requires_action`. Lorsque le PaymentIntent réussit, son état passe à `requires_confirmation`. Vous devez alors reconfirmer le PaymentIntent sur votre serveur pour finaliser le paiement. ```javascript const handleServerResponse = async (responseJson) => { if (responseJson.error) { // Show error from server on payment form} else if (responseJson.requiresAction) { // Use Stripe.js to handle the required card action const { error: errorAction, paymentIntent } = await stripe.handleCardAction(responseJson.clientSecret); if (errorAction) { // Show error from Stripe.js in payment form } else { // The card action has been handled // The PaymentIntent can be confirmed again on the server const serverResponse = await fetch('/pay', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ payment_intent_id: paymentIntent.id }) }); handleServerResponse(await serverResponse.json()); } } else { // Show success message } } ``` ## Reconfirmez le PaymentIntent [Côté serveur] À l’aide du même point de terminaison configuré plus tôt, *confirmez de nouveau* (Confirming an intent indicates that the customer intends to use the current or provided payment method. Upon confirmation, the intent attempts to initiate the portions of the flow that have real-world side effects) le PaymentIntent pour finaliser le paiement et traiter la commande. La tentative de paiement échoue et revient à`requires_payment_method`si celle-ci n’est pas reconfirmée dans un délai d’une heure. #### curl ```bash curl https://api.stripe.com/v1/payment_intents/{{PAYMENT_INTENT_ID}}/confirm \ -u <>: \ -X "POST" ``` ## Testez l'intégration Utilisez nos cartes de test en bac à sable pour vérifier que votre intégration a été correctement mise à niveau. Stripe affiche une page d’authentification factice dans la fenêtre modale en bac à sable qui vous permet de simuler une tentative d’authentification réussie ou échouée. En mode production la banque contrôle l’interface utilisateur de ce qui est affiché à l’intérieur de la fenêtre modale. | Numéro | Description | | ---------------- | ----------------------------------------------------------------------------------------------------------------------------- | | 4242424242424242 | Transaction réussie et paiement effectué immédiatement. | | 4000000000009995 | Échoue toujours avec un code de refus de paiement `insufficient_funds`. | | 4000002500003155 | Exige l’authentification, qui dans cette intégration échouera avec un code de refus de paiement `authentication_not_handled`. |