web-dev-qa-db-fra.com

Stripe - Comment gérer l'abonnement avec un plan gratuit et aucune carte de crédit requise au moment de l'inscription

Nous avons commencé à implémenter Stripe sur Redsmin (un de nos projets) et je pense que nous avons peut-être raté quelque chose. Voici comment cela fonctionne:

  1. Pour utiliser notre produit, l'utilisateur doit sélectionner un forfait (gratuit, s, m, xl, xxl ...) puis saisir son identifiant/mot de passe et il est alors bon de partir pour un essai gratuit de 30 jours. Lorsque l'utilisateur soumet le formulaire, notre serveur appelle Stripe create_customer avec le plan spécifié et sans carte de crédit (car nous voulons offre 30 jours gratuits sans carte de crédit requise) et nous mettons à jour le modèle utilisateur de notre côté avec le customer_id et subscription_id.

  2. Nous avons mis en place un webhook pour recevoir les événements stripe donc après 30 jours notre webhook devrait recevoir un customer.subscription.updated événement avec un object.status == active. Ai-je raison?

  3. Cependant, comme nous n'avons pas spécifié de carte associée pour l'utilisateur au moment de l'inscription, nous devrions recevoir rapidement après un autre customer.subscription.updated événement avec object.status == unpaid droite? De notre côté, nous désactivons le compte utilisateur et le forçons à accéder à notre page de sélection de forfait.

  4. À partir de là, l'utilisateur peut sélectionner soit le plan gratuit, soit l'un de nos plans premium:

  5. # Scénario 1 Si l'utilisateur sélectionne le plan gratuit, nous réactivons simplement son compte de notre côté et ne faisons rien d'autre car nous avons configuré le plan gratuit sur stripe pour coûte 0 $. Avons-nous mis en place le bon processus avec notre forfait gratuit? Y a-t-il de meilleures façons?

  6. # Scénario 2 Si l'utilisateur sélectionne un plan premium, nous le redirigeons vers un formulaire de carte de crédit, qui sera ensuite envoyé à Stripe, et nous mettons à jour le rayez le compte client avec le jeton de carte temporaire. Que devons-nous faire ensuite? :

    • Faut-il attendre que stripe nous envoie un événement? Si oui, quel événement? customer.subscription.updated? charge.succeeded? Quelle sera la valeur de object.status puis ?
    • Faut-il réactiver directement le compte utilisateur de notre côté et attendre une confirmation de stripe? Si oui, quels seraient le nom de l'événement et les données que nous devrions attendre?

66
FGRibreau

Dans la partie 2 où vous faites cela:

Nous avons mis en place un webhook pour recevoir les événements stripe donc après 30 jours, notre webhook devrait recevoir un événement customer.subscription.updated avec un object.status == actif, ai-je raison?

Vous pouvez également envisager d'implémenter le customer.subscription.trial_will_end webhook, ce webhook sera envoyé trois jours avant la fin de l'essai client et vous permettra d'envoyer une notification au client pour mettre à jour ses informations de paiement.

De cette façon, si l'utilisateur décide d'aller mettre à jour ses informations de paiement, Stripe pourra prendre le paiement dès la fin de l'essai client et pourra continuer à utiliser votre service sans interruption.

# Scénario 1 Si l'utilisateur sélectionne le forfait gratuit, nous réactivons simplement son compte de notre côté et ne faisons rien d'autre car nous avons configuré le forfait gratuit sur stripe pour un coût de 0 $. Avons-nous mis en place le bon processus avec notre forfait gratuit? existe-t-il de meilleures façons?

Pour autant que je sache que c'est la meilleure façon de mettre en œuvre des plans gratuits à l'aide de Stripe, je m'assurerais probablement que les clients ne reçoivent aucune facture, sauf si cela est nécessaire. Je doute que les utilisateurs s'attendent à recevoir une facture pour chaque période de facturation s'ils utilisent un forfait gratuit.

#Scenario 2 Si l'utilisateur sélectionne un plan premium, nous le redirigeons vers un formulaire de carte de crédit, qui sera ensuite envoyé à Stripe, et nous mettons à jour le compte client stripe avec le jeton de carte temporaire. Que devrions-nous faire ensuite?:

  • Faut-il attendre que stripe nous envoie un événement, si oui, quel événement? customer.subscription.updated? charge.a réussi? Quelle sera alors la valeur de object.status?
  • Faut-il réactiver directement le compte utilisateur de notre côté et attendre une confirmation de stripe? Si oui, quels seraient le nom de l'événement et les données que nous devrions attendre?

Une fois que l'utilisateur a sélectionné un plan et mis à jour ses informations de paiement, j'activerais immédiatement son compte à condition que la réponse à la mise à jour de l'abonnement de Stripe soit réussie.

Tant que vous avez configuré vos préférences d'abonnement à partir de votre tableau de bord Stripe, vous devriez pouvoir laisser Stripe gérer ce qu'il fera en cas d'échec du paiement. Assurez-vous simplement d'implémenter le customer.subscription.updated webhook car ce sera le webhook que Stripe vous enverra s'il marque un abonnement comme non payé ou annulé vous permettant de mettre à jour vos propres enregistrements en conséquence.

41
Mike