Подписка не найдена из-за несоответствия адреса электронной почты

Описание проблемы

Мы получили жалобу от клиента, который оформил подписку, но не был добавлен в группу.

Краткая суть

Если адрес электронной почты пользователя (каким-то образом) не совпадает с адресом в 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?

Проблема заключается не только в отображении: в итоге пользователь так и не был добавлен в группу.

2 лайка