Gérer les abonnements avec paiement différé
Découvrez comment gérer les abonnements qui ne nécessitent pas de paiement immédiat.
Les abonnements qui prévoient une période d’essai, une facturation à l’usage ou l’application aux factures de bons de réduction ou du solde créditeur du client donnent souvent lieu à des factures sans paiement. Ceci signifie que vous ne débitez pas immédiatement le client lorsque vous créez l’abonnement.
Bien que vous ne débitiez pas les clients pour la première facture, l’authentification et l’autorisation de leur carte peuvent contribuer à améliorer la réussite du premier paiement non nul. Ces types de paiements sont connus sous le nom de { % glossary term="off-session » %}paiements off-session{ % /glossary %}. Pour gérer ces scénarios, Stripe utilise SetupIntents.
Utiliser SetupIntents
Vous pouvez utiliser SetupIntents pour :
- Collecter les informations de paiement.
- Authentifiez la carte de votre client pour réclamer exemptions plus tard.
- Autorisez la carte de votre client sans la débiter.
L’authentification des paiements permet à votre client d’autoriser le débit de sa carte. Cette opération est nécessaire pour une authentification forte du client et est souvent menée à bien avec 3DS. La collecte des informations du moyen de paiement et son autorisation sont nécessaires pour que vous puissiez débiter le moyen de paiement.
Dans les scénarios hors session, SetupIntents vous permet de débiter les clients pour leur premier paiement non nul sans avoir à les renvoyer vers votre site Web ou votre application pour l’authentification. Cela réduit les frictions pour vos clients.
Stripe crée automatiquement des SetupIntents pour les abonnements qui ne nécessitent pas de paiement initial. Le processus d’authentification et d’autorisation s’achève également à ce stade, si nécessaire. Si les deux étapes aboutissent ou ne sont pas requises, aucune action n’est nécessaire et le champ subscription.
est nul
. Si l’une des deux étapes échoue, Stripe recommande d’utiliser le SetupIntent sur votre interface utilisateur pour résoudre le problème pendant que votre client est connecté.
Le champ pending_setup_intent d’un abonnement ne s’annule pas automatiquement à la fin de l’abonnement. Écoutez les événements customer.subscription.deleted et annuler un abonnement SetupIntent manuellement si nécessaire.
Les deux sections suivantes expliquent comment gérer les scénarios d’échec de l’authentification ou de l’autorisation.
Gérer les échecs d’authentification Client-side
Les échecs d’authentification se produisent lorsque Stripe ne parvient pas à authentifier votre client auprès de l’émetteur de sa carte bancaire. Dans ce cas, le status
du SetupIntent est défini sur requires_
.
Pour résoudre ces scénarios, appelez confirmCardSetup sur votre front-end afin que votre client puisse effectuer le flux d’authentification manuellement. L’exemple de code ci-dessous expand le pending_setup_intent pour terminer le flux.
const {pending_setup_intent} = subscription; if (pending_setup_intent) { const {client_secret, status} = subscription.pending_setup_intent; if (status === "requires_action") { const {setupIntent, error} = await stripe.confirmCardSetup(client_secret); if (error) { // Display error.message in your UI. } else { // The setup has succeeded. Display a success message. } } }
Une fois ce flux terminé, l’autorisation est exécutée si nécessaire. Si l’autorisation aboutit ou si elle n’est pas nécessaire, pending_
est mis à jour sur nul
une fois le processus terminé.
Gérer les échecs d’autorisation Client-side
Les échecs d’autorisation de paiement se produisent lorsque Stripe ne peut pas vérifier qu’une carte peut être débitée. Cela définit le status de la SetupIntent sur requires_
, ce qui signifie généralement que les frais ultérieurs avec cette carte échouent.
Pour résoudre ces scénarios, collecter un nouveau mode de paiement, puis mettez à jour le mode de paiement par défaut de votre client ou de l’abonnement. L’exemple de code ci-dessous expand le pending_setup_intent pour terminer le flux.
const {pending_setup_intent, latest_invoice} = subscription; if (pending_setup_intent) { const {client_secret, status} = subscription.pending_setup_intent; if (status === "requires_action") { const {setupIntent, error} = await stripe.confirmCardSetup(client_secret); if (error) { // Display error.message in your UI. } else { // The setup has succeeded. Display a success message. } } else if (status === "requires_payment_method") { // Collect new payment method. } }