Ok, sé que estoy reviviendo este hilo, pero 1) esto sigue sin resolverse y 2) encontré tiempo para investigar esto de nuevo… resulta que era un imbécil que no sabía seguir instrucciones. Así es como descubrí que soy un tonto y por qué ahora estoy listo para resolver esto (con algo de ayuda).
Lo que terminé haciendo fue exportar un CSV de Stripe de todas las cuentas canceladas. Me centré en el mismo usuario de Discourse al que se hace referencia anteriormente en este hilo, que era suscriptor, se había cancelado, pero luego no pudo volver a suscribirse porque la página de suscripción aparecía como “comprada” a pesar de que su página de suscripciones activas no mostraba ninguna suscripción. En los datos del CSV, su registro aparecía como “cancelado” con los siguientes datos:
- id (sub_JNWejdDo4qhLG5)
- customer_id (cus_JmiMoqZNTzUNxt)
- user_id (id de usuario de Discourse 4981)
Luego me adjunté al contenedor de la aplicación, entré en la consola de Ruby y comencé a investigar. Primero busqué su ID de cliente en DiscourseSubscriptions::Customer y lo encontré.
[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>]
A continuación, busqué en DiscourseSubscriptions::Subscription para ver si este usuario tenía alguna suscripción y resulta que sí, sí la tenía;
[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>]
Entonces, parece que simplemente puedo eliminar este registro de suscripción y arreglar todo… para este usuario. El hecho es que cada usuario cancelado que revisé en mi exportación CSV todavía tenía suscripciones restantes en el sistema. Obviamente, hay una desconexión de alguna manera / en algún lugar entre el webhook de Stripe y el plugin de suscripción… simplemente no sé dónde / cómo.
-
Primero; ¿cómo elimino de forma segura el registro de suscripción de un usuario en particular? Explícamelo como si tuviera 5 años. Estoy en el prompt de la consola de Ruby… ¿cómo me aseguro de que solo se eliminen los datos de suscripción del usuario objetivo y no se borren los datos de suscripción de todos?
-
Segundo, ¿cómo soluciono el mecanismo del webhook de cancelación de suscripción?
¡Toda tu ayuda es muy apreciada!
ACTUALIZACIÓN:
Ok, avancé un poco más… logré averiguar cómo usar .delete_by para eliminar solo los datos de suscripción del usuario objetivo;
[1] pry(main)> DiscourseSubscriptions::Subscription.delete_by(external_id: 'sub_JNWejdDo4qhLG5')
[2] pry(main)> DiscourseSubscriptions::Subscription.where(external_id: 'sub_JNWejdDo4qhLG5')
=> []
Sin embargo, el registro del cliente todavía tiene un product_id asociado;
[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>]
Esto significa que todavía ven la marca verde y no pueden volver a suscribirse… así que apliqué el “destroy_all” al objeto Customer… ¡y funcionó! Pero solo para ese usuario, por supuesto…
[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>]
Así que ahora solo queda diagnosticar por qué el webhook de Stripe para suscripciones canceladas no está funcionando.