料金プランによる高度な従量課金を導入非公開プレビュー
使用状況と継続課金に基づいて顧客に請求します。
さまざまな料金コンポーネントを 1 つの料金プランにグループ化できます。例えば、 従量課金のレートカード、継続支払いのライセンス手数料、継続クレジット付与の割り当てのサービスアクションが含まれます。 顧客が料金プランに登録すると、すべての継続コンポーネントが自動的に登録され、設定した頻度に従って請求されます。
サポートされる価格モデルは以下のとおりです:
- 従量課金
- トップアップによるリアルタイムのクレジットバーンダウンモデル (初期金額を使用量に応じて段階的に消費)
- 定額手数料と超過料金
プライベートプレビュー
現在、料金プランは プライベートプレビュー 段階にあり、すべての Stripe ユーザーに一般提供される前に、機能と導入パスが変更される可能性があります。アクセスをリクエストするには、こちらからアクセスしてください からお問い合わせください。
はじめに
このガイドの ガイド付き API (ブループリント) バージョンをダッシュボードで使用することもできます。
料金プランは /v2 API エンドポイントを使用しています。/v2 および /v1 ネームスペースの詳細をご確認ください。
サンドボックスを使用して料金プランの導入をテストします。/v2 API でテスト環境を使用することはできません。
料金プランを作成
Stripe ダッシュボードまたは API を使用して、料金体系モデルの関連するすべての請求コンポーネントを含む料金プランを作成します。
料金プランごとに、以下を設定できます。
- 通貨: 料金プランのすべてのコンポーネントの通貨を指定します。
- 価格に税金を含める: 価格に税金を含めるか (内税)、請求書の小計に税金を含めるか (外税) するかを指定します。詳細は Billing の内税と外税をご覧ください。
- メタデータ: オプションで料金プランに独自のメタデータを追加します。
通貨と税金のパラメーターを設定したら、プランの関連コンポーネントを定義します。どのコンポーネントを含めるかは、料金体系モデルによって異なります。このガイドでは、3 つのコンポーネント ((レートカード、ライセンス手数料、サービスアクション) をすべて使用しますが、使用するコンポーネントは料金体系モデルによって異なります。たとえば、従量課金制料金体系とチャージによるリアルタイムクレジットバーンダウンでは、レートカードとサービスアクションのみが必要です。定額手数料と超過料金では、レートカードとライセンス手数料、継続クレジットにはレートカードとライセンス手数料が必要です。また、継続クレジットと超過料金にはレートカードとサービスアクションが必要です。
顧客を料金プランに登録する
料金プランを設定後、顧客をサブスクライブできます。Stripe がホストするページまたは組み込みコンポーネントを決済 UI として、Checkout セッション API を使用して、サブスクリプションを作成できます (Checkout セッションでは顧客も作成されます)。API を使用して、料金プランのサブスクリプションを直接作成することもできます。ダイレクト API 方式を使用する場合は、顧客、回収設定、請求ケイデンス、請求インテント を作成して、料金プランのサブスクリプションを作成する必要があります。
顧客の使用状況を記録する
顧客をレートカードで構成される料金プランに登録した後は、従量制イベントを送信し、顧客のサービス利用状況を記録します。
請求書プレビューを作成する
プレビュー請求書を作成して、顧客の請求書のプレビューを確認します。プレビューには、さまざまな料金プランのコンポーネントに対応する該当の明細項目が含まれます。
サービスイベントを監視する
料金プランサブスクリプションは、サービスと回収の状態が変わるたびにイベント通知を送信します。
これらのイベントをリッスンし、それらを使用してビジネスロジックを構築します。
v2. | ユーザーはサブスクリプションを支払い、サービスを有効にします。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
v2. | ユーザーはサブスクリプションを一時停止します。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
v2. | ユーザーがサービスをキャンセルしました。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
v2. | サブスクリプションの回収が進行中です。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
v2. | この請求は、顧客の対応待ちの状態です。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
v2. | 回収は一時停止されています。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
v2. | 回収の期日経過。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
v2. | 回収は未払いと見なされます。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
これらの v2 イベントを処理するには、Event Destination を設定し、Webhook エンドポイントを指定します。次のいずれかを実行できます。
- Workbench で Event Destination を作成します。
- Stripe API を使用してイベント送信先を作成します。
送信先を作成したら、次のイベントを処理するように Webhook エンドポイントを設定します。
require 'stripe' post '/v2_webhook_endpoint' do payload = request.body.read sig_header = request.env['HTTP_STRIPE_SIGNATURE'] event = nil begin event = Stripe::Webhook.construct_event( payload, sig_header, endpoint_secret ) rescue JSON::ParserError => e status 400 return rescue Stripe::SignatureVerificationError => e status 400 return end client = Stripe::StripeClient() case event.type when 'v2.billing.pricing_plan_subscription.servicing_activated' # The customer clicked Pay on Stripe Checkout, which activates the service. subscription_id = event.related_object.id subscription = client.v2.billing.pricing_plan_subscriptions .retrieve(subscription_id) # Look up your user in the database using the metadata passed into # Checkout Session create user_id = subscription.metadata["my_user_id"] user = User.find_by_id(user_id) # Fill in your logic here: mark_subscription_active(user, subscription) when 'v2.billing.pricing_plan_subscription.servicing_paused' # The customer paused the subscription. subscription_id = event.related_object.id subscription = client.v2.billing.pricing_plan_subscriptions .retrieve(subscription_id) # Look up your user in the database using the metadata passed into # Checkout Session create user_id = subscription.metadata["my_user_id"] user = User.find_by_id(user_id) # Fill in your logic here: mark_subscription_paused(user, subscription) when 'v2.billing.pricing_plan_subscription.servicing_canceled' # The customer canceled the subscription. subscription_id = event.related_object.id subscription = client.v2.billing.pricing_plan_subscriptions .retrieve(subscription_id) # Look up your user in the database using the metadata passed into # Checkout Session create user_id = subscription.metadata["my_user_id"] user = User.find_by_id(user_id) # Fill in your logic here: mark_subscription_canceled(user, subscription) end status 200 end"sk_test_BQokikJOvBiI2HlWgH4olfQ2"
組み込みをテストする
以下の手順に従って、実装をテストします。
- サンドボックスを作成するを参照してください。
- サンドボックスに、テスト用の料金プランと少なくとも 1 つの基礎となる料金構成要素を作成してください。
- テストカードを使用して、成功した支払いと失敗した支払いをシミュレートします。
- 使用状況をシミュレーションするテストメーターイベントを作成します。
- テストクロックを使用して請求をシミュレートします。
過去の時点にテストクロックを作成しない
料金プランのサブスクリプション用にテストクロックを作成する場合は、必ず未来の日付でクロックを作成してください。過去の日付でクロックを作成すると、請求金額が正しく表示されません。
UNIX タイムスタンプでテストクロックを作成します。
テストクロックの ID をメモします。次に、クロックを使用してテスト顧客を作成します。
請求プロファイルの作成
請求期間を作成して、顧客に請求書を発行するタイミングを定義します。ID を保存します。
テスト顧客の料金プランサブスクリプションを作成します。
請求インテント を作成し、料金プランサブスクリプションのステータスを追跡します。まず、請求インテントのドラフトを作成します。インテントの ID を保存します。
次に、請求インテントを予約します。
次に、その請求インテントを確定して料金プランのサブスクリプションを有効にし、プランと請求頻度に従って顧客に請求を行います(コレクション設定を automatic に設定している場合、インテントを確定するには成功した PaymentIntent が必要です。コレクション設定を send_ に設定している場合は、Payment Intent を渡す必要はありません)。
テスト用に、payment_ を「pm_card_visa」に設定してみましょう。
サブスクリプションによって生成された請求書を支払います。請求書の支払い後、使用量をシミュレートしてクロックを進めると、翌月の請求がトリガーされます。Checkout を使用している場合は、返された Checkout セッションの url をブラウザーで開き、テストカードを使用して支払いを完了します。
テスト用の使用量を記録します。
テストクロックの凍結時間を 1 か月進めます。この例では、テストクロックの現在のタイムスタンプは 1577836800 です。月を追加するには、30 * 24 * 60 * 60、または 2592000 秒を追加します。今から 1 か月後の新しいタイムスタンプは 1580428800 です。
オプション税金を徴収する
税金を自動的に徴収するには、checkout_items を含む Checkout セッションを作成し、automatic_ を true に設定します。
このページには料金プランの詳細が表示され、顧客の支払い情報が収集されます。顧客はセッションを完了すると、success_に指定された URL にリダイレクトされます。
オプションカスタマーポータルを設定します
カスタマーポータル を設定することで、顧客にセルフサービス機能を提供できます。
現在、カスタマーポータルを料金プランのサブスクリプションで使用することは読み取り専用です。顧客は、料金プランの請求サブスクリプションのキャンセル、プランの変更、決済手段の更新を行うことはできません。現時点では、ダッシュボードからのみカスタマーポータルセッションを設定できます。
料金プランのサブスクリプションでカスタマーポータルを使用すると、顧客は以下を確認できます。
- サブスクリプションプラン (提供しているハイブリッドプランの詳細を含む)。
- 月末に請求される金額を把握するのに役立つ次回の請求書。
- 対象のサブスクリプションに登録されている決済手段。
- 請求された過去の請求書。
- 請求情報。
