Assinatura não encontrada devido a incompatibilidade de e-mail

Descrição do problema

Recebemos uma reclamação de um cliente que obteve uma assinatura, mas não foi adicionado ao grupo.

TL;DR

Se o endereço de e-mail de um usuário (de alguma forma?) não corresponder ao seu endereço de e-mail no Stripe, ele não receberá uma assinatura. Alterar o endereço de e-mail no Stripe resolve o problema.

Investigação

Agora vimos o seguinte.

  • Na visão geral com todas as assinaturas, ela está lá

  • O usuário tem um pagamento em seu perfil

  • O usuário NÃO tem uma assinatura em seu perfil!!!

  • No banco de dados tudo parece ok. Redigi um pouco os IDs, pois não sei o quão confidenciais são os IDs do Stripe.
db0731=# select * from discourse_subscriptions_subscriptions where external_id='sub_1Lf285...9YA0';
-[ RECORD 1 ]-----------------------------
id          | 944
customer_id | 944
external_id | sub_1Lf285...9YA0
created_at  | 2022-09-06 13:47:57.074098
updated_at  | 2022-09-06 13:47:57.074098

db0731=# select * from discourse_subscriptions_customers where user_id=62443;
-[ RECORD 1 ]---------------------------
id          | 944
customer_id | cus_MN...sc
product_id  | prod_MH451u0JeKHoMv
user_id     | 62443
created_at  | 2022-09-06 13:47:57.057455
updated_at  | 2022-09-06 13:47:57.057455

O ID do usuário corresponde ao usuário em questão.

No Stripe, os metadados correspondem, mas o endereço de e-mail não!

Alterar o endereço de e-mail no Stripe para que corresponda ao endereço de e-mail do Discourse resolve o problema. A assinatura aparece imediatamente no perfil do usuário.

Por algum motivo, o plugin entra em contato com o Stripe tentando encontrar as assinaturas para este endereço de e-mail.

Não entendo por que funciona dessa maneira.

  • Os metadados estão lá, então por que não corresponder com os metadados?
  • Todas as informações já estão no banco de dados, então por que entrar em contato com o Stripe em primeiro lugar?

Não é apenas um problema de exibição, afinal o usuário também não foi adicionado ao grupo.

2 curtidas