Плагин: discourse-subscriptions Версия: Последняя (подтверждено, что актуальна) Версия Discourse: 3.5.4
Краткое описание ошибки: В некоторых пограничных случаях плагин создает PaymentIntent без привязки действительного способа оплаты, что приводит к тихому сбою подписки для конечного пользователя.
Шаги для воспроизведения:
-
У клиента в профиле Stripe сохранена просроченная карта.
-
Клиент пытается оформить подписку или обновить способ оплаты.
-
Плагин создает PaymentIntent, но не передает данные новой карты в Stripe.
-
Транзакция завершается с ошибкой
resource_missingилиpayment_intent_incompatible_payment_method.
Логи ошибок Stripe:
resource_missing: У данного клиента нет прикрепленных источников оплаты или способа оплаты по умолчанию.
payment_intent_incompatible_payment_method: Ожидается наличие способа оплаты типа card, но у этого PaymentIntent нет способа оплаты, и он не был предоставлен.
Что подтвердил Stripe:
-
Аккаунт Stripe находится в хорошем состоянии, проблем с их стороны нет.
-
PaymentIntents создавались без привязанного способа оплаты.
-
Плагин в некоторых случаях передает объект
card_, а не объект способа оплатыpm_— в текущем API Stripe эти объекты не взаимозаменяемы.
Дополнительный контекст:
-
Это происходит примерно 2 раза в месяц в сообществе с ~18 000 активных участников.
-
Плагин является встроенным и не может быть изменен на уровне хостинга (подтверждено в Communiteq).
-
Обычная оплата проходит корректно; сбой возникает именно тогда, когда у клиента на файле есть устаревшая/просроченная карта и он пытается совершить новую оплату.
-
Обходной путь — вручную отправить хостированный счет от Stripe, но это не запускает вебхук для автоматического назначения группы пользователя в Discourse, что требует второго ручного шага.
Запрос: Исправление передачи способа оплаты, когда существующая карта клиента просрочена или недействительна, чтобы ввод новой карты корректно генерировал объект способа оплаты pm_, который правильно прикреплялся к PaymentIntent перед отправкой.