Falhas silenciosas de assinatura no plugin Subscriptions

Plugin: discourse-subscriptions Versão: Última (confirmada como atualizada) Versão do Discourse: 3.5.4

Resumo do Bug: Em certos casos extremos, o plugin cria um PaymentIntent sem anexar um método de pagamento válido, fazendo com que a assinatura falhe silenciosamente para o usuário final.

Passos para Reproduzir:

  1. O cliente possui um cartão expirado salvo em seu perfil de cliente no Stripe

  2. O cliente tenta assinar ou atualizar seu método de pagamento

  3. O plugin cria um PaymentIntent, mas falha ao passar os detalhes do novo cartão para o Stripe

  4. A transação falha com o erro resource_missing ou payment_intent_incompatible_payment_method

Logs de Erro do Stripe:

resource_missing: Este cliente não possui fonte de pagamento anexada ou método de pagamento padrão.

payment_intent_incompatible_payment_method: Esperava-se que um método de pagamento do tipo cartão estivesse presente, mas este PaymentIntent não possui um método de pagamento e nenhum foi fornecido.

O que o Stripe Confirmou:

  • A conta do Stripe está em dia, sem problemas do lado deles

  • Os PaymentIntents foram criados sem um método de pagamento anexado

  • O plugin está passando um objeto card_ em alguns casos, em vez de um objeto de Método de Pagamento pm_ — estes não são intercambiáveis na API atual do Stripe

Contexto Adicional:

  • Isso ocorre aproximadamente 2 vezes por mês em uma comunidade com ~18.000 membros ativos

  • O plugin é integrado e não pode ser modificado no nível do host (confirmado com a Communiteq)

  • O checkout normal funciona corretamente; a falha ocorre especificamente quando um cliente tem um cartão desatualizado/expirado cadastrado e tenta um novo pagamento

  • A solução alternativa é enviar manualmente uma fatura hospedada do Stripe, mas isso não aciona o webhook que atribui automaticamente o grupo do Discourse ao usuário, criando uma segunda etapa manual

Solicitação: Uma correção para a transferência do método de pagamento quando o cartão existente do cliente está expirado ou inválido, garantindo que a entrada do novo cartão gere um objeto de Método de Pagamento pm_ adequado, que seja corretamente anexado ao PaymentIntent antes do envio.

1 curtida

Obrigado pelo relatório de bug, Todd!

Movi-o para cá, para Contribute > Bug, onde ele provavelmente receberá a atenção que merece.

2 curtidas