Управление жизненным циклом выставления счетов клиентам с помощью клиентского портала

Как только вы полностью оформите процесс привлечения клиентов и правильно предоставите доступ к платным услугам и функциям, вы неизбежно начнете слышать запросы в службу поддержки, в которых клиенты хотят обновить имеющиеся способы оплаты, повысить или понизить тарифный план, просмотреть историю выставления счетов и многое другое. Мы называем это «управлением жизненным циклом клиента».

Два основных варианта поддержки управления биллингом — создать его самостоятельно или использовать портал для клиентов Stripe. Подобно Stripe Checkout, портал клиента — это страница, размещенная Stripe, куда вы перенаправляете существующих клиентов с активными подписками. С портала они могут выполнять такие действия, как обновление методов оплаты, обновление, отмена, обновление или приостановка подписки. Портал клиента настраивается с помощью API или через настройки в Stripe Dashboard.

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

Самый быстрый способ интеграции — это один вызов API для создания сессии портала клиента, который вернет URL, на который вы сможете перенаправить клиентов. Самая простая сессия требует только передачи ID клиента (который мы создали во время регистрации, помните?):

session = Stripe::BillingPortal::Session.create({
  customer: 'cus_F6sbKqBiA0Ms4g',
})
redirect_to session.url, allow_other_hosts: true, status: :see_other
Вход в полноэкранный режим Выход из полноэкранного режима

Обработка изменений с помощью веб-крючков

Когда клиенты вносят изменения в свои подписки на портале клиента, важно, чтобы наше приложение отражало эти изменения. В предыдущей статье о предоставлении доступа к SaaS с помощью webhooks мы обсудили несколько типов событий webhook, которые важно обрабатывать для предоставления доступа. Вам также необходимо убедиться, что вы обрабатываете событие веб-крючка customer.subscription.deleted, которое представляет собой отмену подписки клиентом. В этом случае мы находим подписку в базе данных по идентификатору и обновляем ее статус до состояния, указанного в полезной нагрузке события webhook: canceled.

def handle_subscription_deleted(event)
  subscription = event.data.object
  sub = Subscription.find_by(stripe_id: subscription.id)
  sub.update!(
    status: subscription.status,
  )
end
Вход в полноэкранный режим Выход из полноэкранного режима

Настройка сеансов портала

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

Например, вы можете предложить клиентам на устаревших тарифных планах возможность перейти на более высокий уровень устаревшего тарифного плана, но потребовать, чтобы новые клиенты использовали стандартный набор уровней с разными ценами. Одним из решений может быть создание пользовательской конфигурации портала для старых пользователей, которая включает список старых продуктов и цен в массиве features.subscription_update.products.

Учитывая ID объекта конфигурации портала клиента, вы можете создавать новые сессии портала клиента, передавая конфигурацию для изменения функций, которые видит клиент, использующий эту сессию портала.

config = Stripe::BillingPortal::Configuration.create({
  features: {
    customer_update: {
      allowed_updates: ['email', 'tax_id'],
      enabled: true,
    },
    invoice_history: {enabled: true},
    payment_method_update: {enabled: true},
    subscription_update: {
      enabled: true,
      default_allowed_updates: ['quantity', 'price'],
      products: [{
        product: 'prod_MBsdZlqD3StDZo', # Legacy product
        prices: [
          'price_1LTUryCZ6qsJgndJl0mhzex1', # Legacy monthly
          'price_1LXWGHCZ6qsJgndJBOEgbbxs', # Legacy annual
        ],
      }],
    },
  },
  business_profile: {
    privacy_policy_url: 'https://example.com/privacy',
    terms_of_service_url: 'https://example.com/terms',
  },
})

portal_session = Stripe::BillingPortal::Session.create({
  customer: 'cus_La7iFhdBoBP29t',
  configuration: config.id
})

redirect_to portal_session.url, allow_other_host: true, status: :see_other
Вход в полноэкранный режим Выход из полноэкранного режима

Что видят клиенты

В зависимости от конфигурации, клиенты будут видеть двухпанельный пользовательский интерфейс, показывающий их текущий тарифный план, способ оплаты, информацию о выставлении счетов и действия, которые они могут предпринять.

Следующие шаги

Если вы дошли до этой серии статей, то вы молодцы! Теперь у вас есть все фундаментальные строительные блоки для запуска повторяющегося SaaS-приложения с Stripe. Мы будем рады услышать ваши отзывы о схемах интеграции и лучших практиках, описанных в этой серии. Пожалуйста, напишите мне, чтобы я знал, что вы создаете: @cjav_dev в Twitter.

Об авторе

CJ Avilla (@cjav_dev) является адвокатом разработчиков в Stripe, разработчиком на Ruby on Rails и YouTuber. Он любит изучать и преподавать новые языки программирования и веб-фреймворки. Когда он не за компьютером, он проводит время с семьей или катается на велосипеде 🚲.

Оцените статью
devanswers.ru
Добавить комментарий