2

Rails nouveauB ici, il faut donc ajouter autant de détails à la réponse que vous le souhaitez et ne hésitez pas à me dire que je fais mal.Rails + Stripe: où stocker quel type d'abonnement a un utilisateur?

Contexte: Je construis un SaaS rails app et un plan pour ajouter l'intégration de bande (paiement) bientôt. Je voudrais construire la fonctionnalité qui différencie les différents types de compte (plans d'abonnement) avant d'intégrer stripe.

J'utilise beaucoup si/déclarations sur d'autre par l'application selon le type de compte (par exemple, libre, niveau 1, niveau 2) pour afficher/masquer la fonctionnalité appropriée à l'utilisateur. Mes déclarations de base ressemblent à ceci:

<% if current_user.account_level == "1" %> 
    your account level is 1 
<% elsif current_user.account_level == "2" %> 
    your account level is 2 
<% else %> 

<% end %> 

Cela suppose que je vais garder trace de ce « niveau du compte » l'utilisateur dans le modèle utilisateur (ou un autre modèle). Est-ce l'endroit approprié pour le faire? Techniquement, Stripe a les données les plus récentes (c'est-à-dire si la carte a été annulée, le niveau du compte serait différent). Dois-je utiliser l'API Stripe directement pour déterminer le niveau du compte? Il semble que je devrais avoir un enregistrement de cela quelque part dans mes données.

Y a-t-il d'autres bonnes pratiques que je devrais garder à l'esprit tout en développant en sachant que je vais pour l'intégrer Stripe à l'avenir?

Répondre

9

Alors que vous avez raison Stripe stockera les données les plus récentes, je recommande le maintien d'un cache local de tout ce que vous allez utiliser souvent (comme l'état d'abonnement).

Il existe deux approches principales que vous pourriez utiliser pour vous assurer que votre base de données a le dernier état:

  • Dans votre code qui fait des appels d'API à rayure, assurez-vous de mettre à jour également votre copie locale, ou

  • Utilisez notre webhooks pour écouter les événements liés à vos clients (par exemple, customer.subscription.updated). En faisant cela, vous pouvez être sûr que votre base de données locale correspond toujours avec Stripe - même si vous changez le plan de votre client via le tableau de bord, votre point de terminaison webhook recevra la mise à jour.

Le principal avantage de stocker ces données est localement vitesse: vous avez très probablement ne voulez pas que vos clients en attente sur un appel API pour chaque requête qui accède à ces données, en particulier car il semble que vous en avez besoin tout au long de votre site Internet.

Vous voulez vous assurer que vous stockez le customer ID dans votre base de données afin que vous puissiez faire correspondre le client Stripe avec votre utilisateur local.

Questions connexes