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.



