Plugin: discourse-subscriptions Version: Latest (confirmed up to date) Discourse Version: 3.5.4
Bug Summary: In certain edge cases, the plugin creates a PaymentIntent without attaching a valid payment method, causing the subscription to fail silently for the end user.
Steps to Reproduce:
-
Customer has an expired card saved to their Stripe customer profile
-
Customer attempts to subscribe or update their payment method
-
Plugin creates a PaymentIntent but fails to pass the new card details to Stripe
-
Transaction fails with
resource_missingorpayment_intent_incompatible_payment_methoderror
Stripe Error Logs:
resource_missing: This customer has no attached payment source or default
payment method.
payment_intent_incompatible_payment_method: A payment method of type card
was expected to be present, but this PaymentIntent does not have a payment
method and none was provided.
What Stripe Confirmed:
-
Stripe account is in good standing, no issues on their end
-
PaymentIntents were created without a payment method attached
-
The plugin is passing a
card_object in some cases rather than apm_Payment Method object — these are not interchangeable in Stripe’s current API
Additional Context:
-
This happens approximately 2x/month on a community with ~18,000 active members
-
The plugin is a built-in that cannot be modified at the host level (confirmed with Communiteq)
-
Normal checkout works correctly; the failure occurs specifically when a customer has a stale/expired card on file and attempts a new payment
-
Workaround is to manually send a hosted Stripe invoice, but this does not trigger the webhook that assigns the user’s Discourse group automatically, creating a second manual step
Request: A fix for the payment method handoff when a customer’s existing card is expired or invalid, ensuring the new card entry generates a proper pm_ Payment Method object that gets correctly attached to the PaymentIntent before submission.