Ok, je sais que je déterre ce fil de discussion, mais 1) cela continue de ne pas être résolu, et 2) j’ai trouvé le temps de m’y replonger… il s’avère que j’étais un idiot qui ne savait pas suivre les instructions. C’est ainsi que j’ai découvert que j’étais un imbécile, et pourquoi je suis maintenant prêt à résoudre ce problème (avec un peu d’aide).
Ce que j’ai fini par faire, c’est exporter un CSV de Stripe de tous les comptes annulés. Je me suis concentré sur l’utilisateur de Discourse mentionné ci-dessus dans ce fil de discussion, qui était un abonné, s’était désabonné, mais ne pouvait pas se réabonner car la page d’abonnement s’affichait comme “acheté” alors que sa page d’abonnements actifs n’affichait aucun abonnement. Dans les données CSV, son enregistrement était indiqué comme “annulé” avec les données suivantes ;
- id (sub_JNWejdDo4qhLG5)
- customer_id (cus_JmiMoqZNTzUNxt)
- user_id (id utilisateur Discourse 4981)
Ensuite, je me suis attaché au conteneur de l’application, je suis allé dans la console Ruby et j’ai commencé à explorer. D’abord, j’ai recherché son ID client dans DiscourseSubscriptions::Customer et je l’ai trouvé.
[3] pry(main)> DiscourseSubscriptions::Customer.where(customer_id: 'cus_JNWeiIWTs6YOwQ')
=> [#<DiscourseSubscriptions::Customer:0x000055db2d48eb40
id: 16,
customer_id: "cus_JNWeiIWTs6YOwQ",
product_id: "prod_JJbwYnKz0T5Z9h",
user_id: 3256,
created_at: Tue, 27 Apr 2021 07:45:07.455275000 UTC +00:00,
updated_at: Tue, 27 Apr 2021 07:45:07.455275000 UTC +00:00>]
Ensuite, j’ai recherché dans DiscourseSubscriptions::Subscription pour voir si cet utilisateur avait des abonnements et il s’avère que oui, il en avait ;
[1] pry(main)> DiscourseSubscriptions::Subscription.where(external_id: 'sub_JNWejdDo4qhLG5')
=> [#<DiscourseSubscriptions::Subscription:0x000055854e1e1620
id: 16,
customer_id: 16,
external_id: "sub_JNWejdDo4qhLG5",
created_at: Tue, 27 Apr 2021 07:45:07.459681000 UTC +00:00,
updated_at: Tue, 27 Apr 2021 07:45:07.459681000 UTC +00:00>]
Donc, il semble que je puisse simplement supprimer cet enregistrement d’abonnement et tout réparer… pour cet utilisateur. Le fait est que chaque utilisateur annulé que j’ai vérifié dans mon exportation CSV avait encore des abonnements restants dans le système. Il y a évidemment une déconnexion quelque part entre le webhook Stripe et le plugin d’abonnement… je ne sais juste pas où / comment.
-
Premièrement ; comment supprimer en toute sécurité l’enregistrement de l’abonnement pour un utilisateur particulier ? Expliquez-le-moi comme si j’avais 5 ans… Je suis à l’invite de la console Ruby… comment puis-je m’assurer que seules les données d’abonnement de l’utilisateur cible sont supprimées et que je ne supprime pas les données d’abonnement de tout le monde ?
-
Deuxièmement, comment dépanner le mécanisme du webhook d’annulation d’abonnement ?
Toute votre aide est très appréciée !
MISE À JOUR :
Ok, j’ai avancé un peu… j’ai réussi à trier comment utiliser .delete_by pour ne supprimer que les données d’abonnement de l’utilisateur cible ;
[1] pry(main)> DiscourseSubscriptions::Subscription.delete_by(external_id: 'sub_JNWejdDo4qhLG5')
[2] pry(main)> DiscourseSubscriptions::Subscription.where(external_id: 'sub_JNWejdDo4qhLG5')
=> []
Cependant, l’enregistrement client a toujours un product_id associé ;
[3] pry(main)> DiscourseSubscriptions::Customer.where(customer_id: 'cus_JNWeiIWTs6YOwQ')
=> [#<DiscourseSubscriptions::Customer:0x0000560ec18e4948
id: 16,
customer_id: "cus_JNWeiIWTs6YOwQ",
product_id: "prod_JJbwYnKz0T5Z9h",
user_id: 3256,
created_at: Tue, 27 Apr 2021 07:45:07.455275000 UTC +00:00,
updated_at: Tue, 27 Apr 2021 07:45:07.455275000 UTC +00:00>]
Cela signifie qu’ils voient toujours la coche verte et ne peuvent pas se réabonner… j’ai donc appliqué le “destroy_all” à l’objet Customer… et cela a fonctionné ! Mais seulement pour cet utilisateur, bien sûr…
[4] pry(main)> DiscourseSubscriptions::Customer.where(customer_id: 'cus_JNWeiIWTs6YOwQ').destroy_all
=> [#<DiscourseSubscriptions::Customer:0x0000560ec19770e0
id: 16,
customer_id: "cus_JNWeiIWTs6YOwQ",
product_id: "prod_JJbwYnKz0T5Z9h",
user_id: 3256,
created_at: Tue, 27 Apr 2021 07:45:07.455275000 UTC +00:00,
updated_at: Tue, 27 Apr 2021 07:45:07.455275000 UTC +00:00>]
Il ne reste donc plus qu’à diagnostiquer pourquoi le webhook Stripe pour les abonnements annulés ne fonctionne pas.