Fallos silenciosos de suscripción en el plugin Subscriptions

Plugin: discourse-subscriptions Versión: Última (confirmada como actualizada) Versión de Discourse: 3.5.4

Resumen del error: En ciertos casos extremos, el plugin crea un PaymentIntent sin adjuntar un método de pago válido, lo que provoca que la suscripción falle de manera silenciosa para el usuario final.

Pasos para reproducir:

  1. El cliente tiene una tarjeta expirada guardada en su perfil de cliente de Stripe.

  2. El cliente intenta suscribirse o actualizar su método de pago.

  3. El plugin crea un PaymentIntent, pero no logra pasar los detalles de la nueva tarjeta a Stripe.

  4. La transacción falla con el error resource_missing o payment_intent_incompatible_payment_method.

Registros de error de Stripe:

resource_missing: Este cliente no tiene una fuente de pago adjunta ni un método 
de pago predeterminado.

payment_intent_incompatible_payment_method: Se esperaba que estuviera presente 
un método de pago de tipo tarjeta, pero este PaymentIntent no tiene un método 
de pago y no se proporcionó ninguno.

Lo que confirmó Stripe:

  • La cuenta de Stripe está en buen estado; no hay problemas de su parte.

  • Los PaymentIntents se crearon sin un método de pago adjunto.

  • El plugin está pasando un objeto card_ en algunos casos en lugar de un objeto de Método de Pago pm_; estos no son intercambiables en la API actual de Stripe.

Contexto adicional:

  • Esto ocurre aproximadamente 2 veces al mes en una comunidad con ~18.000 miembros activos.

  • El plugin es nativo y no se puede modificar a nivel de host (confirmado con Communiteq).

  • El proceso de pago normal funciona correctamente; el fallo ocurre específicamente cuando un cliente tiene una tarjeta obsoleta/expirada registrada e intenta realizar un nuevo pago.

  • La solución alternativa es enviar manualmente una factura alojada de Stripe, pero esto no activa el webhook que asigna automáticamente el grupo de Discourse del usuario, lo que crea un segundo paso manual.

Solicitud: Una corrección para la transferencia del método de pago cuando la tarjeta existente de un cliente está expirada o es inválida, asegurando que la nueva entrada de tarjeta genere un objeto de Método de Pago pm_ adecuado que se adjunte correctamente al PaymentIntent antes de su envío.

1 me gusta

¡Gracias por el informe de error, Todd!

Lo he trasladado aquí a Contribute > Bug, donde espero que reciba la atención que merece.

2 Me gusta