Abonnements : Données supprimées dans Stripe, maintenant erreurs de plugin

Bonjour,

J’essaie actuellement ce plugin pour une utilisation future sur mon instance et j’ai rencontré un problème.

Mon compte Stripe est nouveau et non vérifié, ce qui signifie qu’il utilise des données de test que je peux effacer dans le tableau de bord Stripe > Développeurs.
Le problème est que l’effacement des données sur Stripe ne supprime pas les mêmes données sur l’instance du forum. Cela peut entraîner un plantage de la page Facturation > Paiement d’un utilisateur.

Étapes pour reproduire le problème

  1. Créez un plan d’abonnement.
  2. Abonnez un utilisateur à ce plan. Stripe lui attribuera un customer_id tel que cus_abcd1234567890.
  3. Effacez les données depuis le tableau de bord Stripe.
  4. Réessayez d’ouvrir la page de facturation de l’utilisateur : cela provoquera un plantage lors du chargement de /s/user/payment, avec le message suivant dans la console du navigateur :
    {\"errors\":[\"No such customer: 'cus_abcd1234567890'\"]}

Après avoir exploré la base de données de mon instance, j’ai trouvé des données résiduelles issues de plusieurs effacements dans les tables suivantes :

  • discourse_subscriptions_customers : provoque un plantage de la page de facturation de l’utilisateur.
  • discourse_subscriptions_products
  • discourse_subscriptions_subscriptions

Les deux dernières tables ne semblent pas provoquer de plantage. Cependant, elles contiennent toujours des données expirées.

La suppression manuelle de la ou des lignes problématiques dans discourse_subscriptions_customers corrige le plantage. Mais devoir le faire via une requête SQL est compliqué et dangereux, surtout pour les utilisateurs inexpérimentés.

Il est également à noter que ce problème ne se produit pas lorsque l’on supprime manuellement les informations de l’utilisateur depuis le tableau de bord Stripe. Stripe conserve toujours les informations archivées et les marque comme « définitivement supprimées ».

Solutions proposées

Si possible, permettre à Stripe d’informer Discourse que les données de test ont été effacées, afin que Discourse supprime automatiquement les données correspondantes dans ces tables.

Ou,

Dans les options du plugin, ajouter un bouton « Effacer les données de test » avec un gros avertissement rouge pour s’assurer que l’administrateur sait ce qu’il fait.

Cela semble être un cas limite et n’est pas quelque chose que je souhaite gérer pour l’instant dans le plugin. Pour corriger les erreurs que vous rencontrez, vous devez exécuter les commandes suivantes depuis l’intérieur du conteneur :

rails c
DiscourseSubscriptions::Customer.destroy_all
DiscourseSubscriptions::Products.destroy_all
DiscourseSubscriptions::Subscriptions.destroy_all

Cela réinitialisera tous les modèles locaux, qui sont utilisés pour la comparaison avec Stripe.

Ma recommandation pour la suite : supprimez les données dans Discourse plutôt que dans Stripe. Si les enregistrements de modèle n’existent pas dans Discourse, les données ne seront pas importées depuis Stripe.

4 « J'aime »

Un message a été divisé en un nouveau sujet : Problème avec /s/user/payments

Merci pour la suggestion. Je l’ai testé et cela fonctionne, sauf pour une petite faute de frappe : il n’y a pas de s à la fin de ::Product et ::Subscription. Sinon, ils ne peuvent pas être trouvés.

Commandes corrigées :

rails c
DiscourseSubscriptions::Customer.destroy_all
DiscourseSubscriptions::Product.destroy_all
DiscourseSubscriptions::Subscription.destroy_all
3 « J'aime »

Vous avez raison, c’est de ma faute !

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.