고객 포털을 사용하여 고객 청구 수명 주기 관리
청구 관리를 지원하는 두 가지 기본 옵션은 직접 구축하거나 Stripe 고객 포털을 사용하는 것입니다. Stripe Checkout과 마찬가지로 고객 포털은 활성 구독이 있는 기존 고객을 리디렉션하는 Stripe에서 호스팅하는 페이지입니다. 포털에서 결제 방법 업데이트, 구독 업그레이드, 취소, 업그레이드 또는 일시 중지와 같은 작업을 수행할 수 있습니다. 고객 포털은 API 또는 Stripe 대시보드의 설정을 통해 구성할 수 있습니다.
모든 청구 관리 기능을 직접 구현하는 데 막대한 투자를 하는 대신 고객 포털을 구현하는 것이 좋습니다. 고객 포털은 기능이 풍부하고 여러 언어로 현지화되어 있으며 계속해서 개선될 것입니다. 모든 청구 관리를 처음부터 구축하기로 결정한 경우 각 변경 사항에 대한 개발 시간을 투자해야 합니다.
통합하는 가장 빠른 방법은 고객을 리디렉션할 수 있는 URL을 반환하는 create a customer portal session에 대한 단일 API 호출을 사용하는 것입니다. 가장 기본적인 세션에서는 고객의 ID만 전달하면 됩니다( 에서 만든 것 기억하시나요?).
session = Stripe::BillingPortal::Session.create({
customer: 'cus_F6sbKqBiA0Ms4g',
})
redirect_to session.url, allow_other_hosts: true, status: :see_other
웹후크로 변경 사항 처리
고객이 고객 포털에서 구독을 변경하면 애플리케이션에 이러한 변경 사항이 반영되는 것이 중요합니다. 웹후크를 사용하여 SaaS에 대한 액세스 권한을 프로비저닝하는 방법에 대한 이전 기사에서 액세스 권한을 부여하기 위해 처리해야 하는 몇 가지 웹후크 이벤트 유형에 대해 설명했습니다. 또한 고객의 구독 취소를 나타내는
customer.subscription.deleted
webhook 이벤트를 처리하고 있는지 확인해야 합니다. 이 경우 데이터베이스에서 ID로 구독을 찾고 웹후크 이벤트 페이로드: 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 의 고객 포털 설정을 사용합니다. 또한 다양한 고객에 대해 포털 경험을 개별화할 수 있습니다create portal configurations.
예를 들어 레거시 플랜 고객에게 레거시 플랜의 상위 계층으로 업그레이드할 수 있는 옵션을 제공할 수 있지만 신규 고객은 가격이 다른 기본 계층 집합을 사용해야 합니다. 한 가지 솔루션은
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
고객이 보는 것
구성에 따라 고객은 현재 요금제, 결제 방법, 청구 정보 및 취할 수 있는 조치를 보여주는 2개의 패널 UI를 보게 됩니다.
다음 단계
시리즈에서 여기까지 하셨다면 수고하셨습니다! 이제 Stripe로 반복 SaaS 애플리케이션을 시작하기 위한 모든 기본 구성 요소가 있습니다. 시리즈에 설명된 통합 패턴 및 모범 사례에 대한 피드백을 듣고 싶습니다. 무엇을 만들고 있는지 알려주려면 Twitter에 한 줄을 남겨주세요.
저자 소개
CJ Avilla ( )은 Stripe의 Developer Advocate, Ruby on Rails 개발자 및 . 그는 새로운 프로그래밍 언어와 웹 프레임워크를 배우고 가르치는 것을 좋아합니다. 컴퓨터 앞에 있지 않을 때는 가족과 함께 시간을 보내거나 자전거를 타고 🚲.
Reference
이 문제에 관하여(고객 포털을 사용하여 고객 청구 수명 주기 관리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/stripe/managing-the-customer-billing-lifecycle-using-the-customer-portal-307j텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)