Описание проблемы
Мы получили жалобу от клиента, который оформил подписку, но не был добавлен в группу.
Краткая суть
Если адрес электронной почты пользователя (каким-то образом) не совпадает с адресом в Stripe, подписка не оформляется. Изменение адреса электронной почты в Stripe решает проблему.
Расследование
Мы обнаружили следующее.
- В обзоре всех подписок она отображается
- У пользователя есть запись об оплате в профиле
- Но в профиле пользователя подписка НЕ отображается!!!
- В базе данных всё выглядит корректно. Я немного скрыл ID, так как не знаю, насколько конфиденциальны идентификаторы 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
ID пользователя совпадает с ID проблемного пользователя.
В Stripe метаданные совпадают, но адрес электронной почты — нет!
Изменение адреса электронной почты в Stripe так, чтобы он совпадал с адресом в Discourse, решает проблему. Подписка немедленно появляется в профиле пользователя.
По какой-то причине плагин обращается к Stripe, пытаясь найти подписки для этого адреса электронной почты.
Я не понимаю, почему это работает именно так.
- Метаданные присутствуют, так почему бы не искать совпадение по ним?
- Вся информация уже есть в базе данных, так зачем вообще обращаться к Stripe?
Проблема заключается не только в отображении: в итоге пользователь так и не был добавлен в группу.



