Как разрешить клиенту изменить данные своей кредитной карты

Одна из проблем, с которой я сталкивался, — это возможность для клиента изменить данные своей кредитной карты. В последний раз, когда возникла такая ситуация, я отменил их подписку и попросил оформить новую. Наконец, я узнал, как создать ссылку на страницу Stripe, где клиенты могут просмотреть историю счетов, добавить способ оплаты и обновить платежную информацию (адрес электронной почты).

Я хотел бы отправить PR в плагин подписок, чтобы добавить эту ссылку, но прямо сейчас у меня нет нескольких часов, необходимых для этого. Поэтому вот как сделать это вручную в Rails:

user = User.find_by_username('=USERNAME=');
sub=DiscourseSubscriptions::Customer.where(user_id: user.id).first;

Stripe.api_key = SiteSetting.discourse_subscriptions_secret_key
session=Stripe::BillingPortal::Session.create({
  customer: sub.customer_id,
  return_url: '=SITE_URL=/my/billing/subscriptions',
});
puts session.url

Вот документация:

А по адресу Stripe Login | Sign in to the Stripe Dashboard можно сгенерировать ссылку, которую клиент сможет посетить и ввести адрес электронной почты.

9 лайков

Я не знал, что в Discourse Subscriptions отсутствует этот функционал, но это обязательная функция.

2 лайка

Да, я тоже этого не понимал. Это кажется срочным.

1 лайк

Отлично! Где должен быть добавлен этот код?

1 лайк

Привет, не могли бы вы подробнее рассказать о приведённом коде и о том, как его использовать?

Мне также нужно, чтобы мои пользователи могли получать доступ к порталу Stripe, так как по закону я обязан предоставлять им счёт-фактуру, который не отправляется автоматически при создании подписки через API:

Я нашёл обходное решение: использовать компонент темы «Ссылки в пользовательском гамбургер-меню» и добавить ссылку на портал Stripe. Это работает, но не очень удобно для пользователей, которым приходится входить через ссылку из письма.

1 лайк

Вам нужно будет встроить его в плагин, который генерирует ссылку и добавляет её в сериализатор, а затем разместить эту ссылку в интерфейсе пользователя (UX). У меня пока не нашлось на это времени. Это работает из консоли Rails, но это не очень практично.

Похоже, что код всё ещё работает.

Самый простой вариант — форкнуть плагин и добавить код. Более сложный, но гораздо лучший путь — добавить код и тесты так, чтобы его приняли в виде PR. Если у вас есть бюджет, вы можете написать в канал Marketplace или связаться со мной напрямую. Золотая середина — создать плагин, который, например, добавляет ссылку в сериализатор, чтобы вы могли затем разместить её в интерфейсе пользователя, например, в меню-бургере, как вы делаете сейчас.

2 лайка

Спасибо за ваш ответ и объяснение. К сожалению, у меня нет опыта разработки плагинов, и я могу выполнять лишь незначительные правки в HTML/CSS, а также, при необходимости, некоторые команды в консоли Rails.

Пока что я, пожалуй, останусь на своём обходном пути. Также я добавлю ссылку на Stripe Portal везде, где это возможно, при подписке пользователя (Администрирование > Настройка > Текст).

2 лайка

Эта ссылка имеет ограниченный срок действия, поэтому, на мой взгляд, правильным решением будет добавить маршрут, выполняющий редирект. Это избавит от необходимости отслеживать, когда нужно получить новую ссылку, и избавит от лишних запросов для получения ссылок, на которые всё равно никто не перейдёт.

Это всё ещё плагин, но, думаю, это будет гораздо более простой PR.

1 лайк

Ах, я думаю, мы говорим не об одной и той же ссылке… Вы, вероятно, имеете в виду ссылку, сгенерированную из предоставленного вами кода. Я говорю о ссылке для клиентского портала без кода, которую я могу активировать в панели управления Stripe. Я полагаю, что эта ссылка действительна, пока портал активирован.

Да. Если я правильно помню, мой код просто не дает им ввести адрес электронной почты и получить ссылку самостоятельно по почте (и знать, какой адрес они использовали). Если этого достаточно, то вы полностью готовы.

Стоит отметить, что сейчас это, похоже, поддерживается напрямую в плагине:

3 лайка

Действительно! И это большая помощь (и во многом именно поэтому я ничего не делал по поводу magic link). Однако это не решает проблему доступа к истории платежей и ссылкам на счета.

3 лайка