従量課金レガシー
商品やサービスの使用量に応じて顧客に請求します。
注
従量課金の仕組みを更新しました。改訂後の従量課金のドキュメント をご覧ください。
移行の方法をご確認ください。
はじめに
従量課金のライフサイクル
従量課金のライフサイクルは次のようになります。
この図は、顧客体験を導入した後にどのようになるかを示したものです。
導入サンプル
この例では、Typographic という架空のフォントサービスの導入を説明します。
商品と料金体系を作成する
商品と価格を使用して Stripe でビジネスをモデル化します。
Stripe API またはダッシュボードを使用して、商品とその料金設定オプションを作成します。Typographic には、それぞれに 2 つの段階が設定された 3 種類の商品が存在します。
- 標準
- 階層 1: 1 カ月あたりリクエスト 10,000 件までは 10 USD
- 階層 2: 10,000 を超えた後はリクエストごとに 0.10 USD を加算
- 成長
- 階層 1: 1 カ月あたりリクエスト 10,000 件までは 25 USD
- 階層 2: 10,000 を超えた後はリクエストごとに 0.10 USD を加算
- エンタープライズ
- 階層 1: 1 カ月あたりリクエスト 10,000 件までは 75 USD
- 階層 2: 10,000 を超えた後はリクエストごとに 0.0075 USD を加算
この種の料金体系を実現するには、定額料金と顧客の使用量に基づく追加料金を請求します。段階的料金 では、顧客は最初の 10,000 件のリクエストに対して定額料金を支払います。それ以上のリクエストを行う場合、第 2 価格帯に到達し、追加のリクエストごとに料金を支払い始めます。定額料金なしで、使用量のみに基づいて料金を請求することも可能です。
請求期間ごとに、各顧客の使用量記録を作成します。Stripe はそれを合計して請求額を決定します。このプロセスは以降のステップで説明しますが、デフォルトの動作を理解しておくと料金の作成方法を考える際に役立ちます。
Growth と Enterprise の商品のステップを繰り返し、必要に応じて適切な値を入力します。
料金体系モデルの種類については、ドキュメントをご覧ください。
顧客を登録する
顧客がサービスに登録できるようにするには、ウェブサイトに決済フォームを表示させる必要があります。Stripe Checkout を利用してサイトにフォームを埋め込むか、Stripe がオンラインで提供するフォームに顧客をリダイレクトします。顧客が継続商品を選択し、決済用のリンクに請求先情報を入力すると、Stripe は 2 種類のレコードを作成します。
- Customer (顧客)
- Subscription (サブスクリプション): これらの記録はいずれも Stripe に保存されます。
Stripe には、決済フォームの設定に使用できるその他のオプションもあります。
- 料金表: Stripe ダッシュボードで料金表を作成し、サイトに埋め込みます。顧客がプランを選択すると、決済ページが表示されます。料金表は、小数未満の料金体系には対応していません。
- Web Element: お客様のサイトに導入するカスタムの決済フローを構築します。
使用状況レコードを作成する
各請求期間では、期間全体にわたり使用量を Stripe に報告して、正しい金額が顧客に請求されるようにします。顧客の使用量の記録に自社のシステムを使用して、サブスクリプションの使用量情報を Stripe に提供することができます。
使用量を記録して報告する方法をご紹介します。
構築したシステムをテストする
導入のテストを行い、想定どおりに動作することを確認します。詳しくは、サブスクリプションの導入テストをご覧ください。
テストクロックを使用することで、模擬の使用量記録をはじめ、さまざまな状況をテストできます。使用量記録のコールを行う際は、テストクロックと使用量記録のタイムスタンプを同期させる必要があります。テストクロックのタイムスタンプを書き留めて、使用量記録が同じ時間枠に含まれるようにしてください。詳しくは、テストクロックをご覧ください。
オプション無料トライアル
サブスクリプションのトライアル期間中に、従量課金ベースで請求できます。トライアル期間中に発生した使用量は、通常の請求サイクルの総額には含められません。トライアル期間の終了後に使用量が発生し、それが次回の請求サイクルの終了時に請求されます。
トライアル期間とサブスクリプションの詳細をご覧ください。
Webhook とトライアル
システムでトライアルステータスの変更に関連するウェブイベントの監視と処理が適切に行われていることを確認します。
トライアルが終了し、サブスクリプションが trialing から active に移行する数日前に、customer. イベントを受信します。このイベントを受信したら、顧客に支払い方法の指定があり、請求可能な状態であることを確認します。必要に応じて、請求が行われることを顧客に通知します。
| ステータス | 説明 |
|---|---|
trialing | サブスクリプションは現在トライアル期間中であり、顧客にプロダクトを支障なく提供できます。初回の支払いが行われると、サブスクリプションは自動的に active に移行します。 |
active | サブスクリプションは良好な状態です。past_ のサブスクリプションの場合、関連する請求書への最新の支払いまたは回収不能という判定によって、サブスクリプションは active に移行します。active は、サブスクリプションに関連するすべての未払いの請求書が支払われたことを示しているわけではないことに注意してください。その他の未払いの請求書は、支払い対象として残すか、回収不能と判定するか、必要に応じて無効化することができます。 |
incomplete | サブスクリプションを有効にするには、顧客が 23 時間以内に支払いを成功させる必要があります。または、支払いで顧客認証などの対応が必要です。保留中の支払いがあり、PaymentIntent のステータスが processing の場合も、サブスクリプションが incomplete になることがあります。 |
incomplete_ | サブスクリプションの初回の支払いが失敗し、サブスクリプションの作成から 23 時間以内に支払いが成功しませんでした。これらのサブスクリプションは顧客に請求されません。このステータスは、サブスクリプションの有効化に失敗した顧客を追跡するために存在します。 |
past_ | 最新の 確定済み の請求書の決済は、失敗したか、試行されていません。サブスクリプションは、引き続き請求書を作成します。ダッシュボードのサブスクリプション設定によって、サブスクリプションの次のステータスが決まります。smart retries を試行しても請求書が未払いの場合は、サブスクリプションをキャンセル済み、未払い、または past_ のままにするように設定できます。サブスクリプションを再度有効にするには、顧客に最新の請求書を決済してもらいます。サブスクリプションのステータスは、決済が最新の請求書より前に行われたか、最新の請求書の期日を過ぎたかに関係なく、有効になります。 |
canceled | サブスクリプションがキャンセルされました。キャンセル時に未払いのすべての請求書の自動回収が無効化されます (auto_)。これは、更新できない最終的なステータスです。 |
unpaid | 最新の請求書は支払われていませんが、サブスクリプションはそのまま保持されます。最新の請求書は未処理のままになり、請求書は引き続き生成されますが、支払いの試行は行われません。サブスクリプションが unpaid の場合は、past_ の時点で支払いの試行と再試行がすでに行われているため、プロダクトへのアクセスを取り消します。サブスクリプションのステータスを active にするには、期日前に最新の請求書を支払う必要があります。 |
paused | デフォルトの決済手段が設定されずにサブスクリプションのトライアル期間が終了し、trial_settings.end_behavior.missing_payment_method が pause に設定されています。サブスクリプションの請求書は今後作成されなくなります。デフォルトの決済手段を顧客に関連付けた後、サブスクリプションを再開できます。 |
サブスクリプションと Webhook の詳細をご覧ください。
オプションキャンセル
従量課金を使用すると、請求期間中の使用量に応じて顧客が支払う価格が変動します。請求期間を変えると、サブスクリプションのサービス期間の終了が早まり、短縮された請求期間中に発生した使用量に対して顧客に請求することになります。
キャンセルされたサブスクリプションを、再びアクティブにすることはできません。代わりに、顧客から更新された請求先情報を収集し、顧客のデフォルトの支払い方法を更新して、既存の顧客レコードから新しいサブスクリプションを作成します。
cancel_at_period_end を使用してサブスクリプションのキャンセルを予定している場合、cancel_ を false に更新することで、期間の終了時まではいつでもサブスクリプションを再度有効にできます。最終的な請求書には、請求期間の終了時にサブスクリプションがキャンセルされたときに測定された使用量も含まれます。
比例配分 (日割り / 秒割り計算)
顧客がサブスクリプションを変更すると、多くの場合、支払う金額の調整が発生します。この調整は比例配分と呼ばれます。create preview invoice (請求書プレビューの作成) エンドポイントを使用して、調整後の金額を顧客に表示できます。
フロントエンドで、請求書のプレビューの情報をバックエンドのエンドポイントに渡します。
function createPreviewInvoice( customerId, subscriptionId, newPriceId, trialEndDate ) { return fetch('/create-preview-invoice', { method: 'post', headers: { 'Content-type': 'application/json', }, body: JSON.stringify({ customerId: customerId, subscriptionId: subscriptionId, newPriceId: newPriceId, }), }) .then(response => { return response.json(); }) .then(invoice => { return invoice; }); }
バックエンドで、フロントエンドから呼び出すエンドポイントを定義します。請求書のプレビューを作成して、プレビューする変更を渡します。この例では、以前の価格 ID のサブスクリプションアイテムを削除し、使用量をクリアし、新しい価格 ID を追加する必要があります。これらの変更は実際には適用されず、プレビューの表示を定義するだけです。
オプション請求しきい値
請求しきい値を使用することにより、サブスクリプションサービス期間で顧客の未払いの使用量が特定の金額または使用量のしきい値に達した際に請求書を発行でき、また必要に応じてサブスクリプションの請求サイクルのアンカーをリセットすることもできます。請求書または決済の期間の途中で未払い金額や商品消費を制限するための予防措置が必要な場合には、請求しきい値の使用を検討してください。
サブスクリプションに金額のしきい値を追加する
通常の場合、しきい値の金額は販売商品の単価の倍数に設定します。
金額しきい値を低く設定すると、顧客は使用量の単位ごとに請求書を受け取ることになり混乱を招くおそれがあります。
この値は、最小通貨単位に使用される正の整数です (1 USD を請求する場合は 100 セント、小数点以下のない通貨 (日本円) で 100 円を請求する場合は 100)。値は 50 通貨単位以上にする必要があります。
サブスクリプションを作成または更新する際に、ダッシュボードで金額のしきい値を設定することもできます。
サブスクリプションアイテムに使用量のしきい値を追加する
金額のしきい値の場合と同様に、請求書の作成頻度を抑えるため、使用量のしきい値は使用量の 1 ユニットよりも大きくすることをお勧めします。こうすることで、請求書の作成頻度を抑えることができます。Stripe では現在、ダッシュボードで使用量のしきい値を設定することはできません。
しきい値と請求サイクルの起点
顧客の使用量がしきい値に達したときに、そのサブスクリプションの請求サイクルの起点に変化があるわけではありません (デフォルト設定)。たとえば、月次のサブスクリプションの途中でしきい値に達した場合には、そのサブスクリプションは、しきい値のないサブスクリプションと同様にその月の末日にリセットされます。
この動作を変更して、しきい値に達すると請求サイクルの起点がリセットされるようにすることができます。そうすることにより、サブスクリプションが月末に本来のロールオーバーポイントに達したときと同様の方法で、しきい値への到達を効率的に処理できます。
従量制のサブスクリプションに aggregate_ が設定されている場合は、reset_ を使用できないのでご注意ください。
しきい値と段階制料金
段階は、しきい値のある請求書全体で管理されます。しきい値のないサブスクリプションと同様に、段階は請求期間の終了時にのみリセットされますが、しきい値に達したときに請求サイクルの起点をリセットするようにサブスクリプションを設定することもできます。
たとえば、広告インプレッションに対して graduated 段階構造が設定された、広告プラットフォームを運営しているとします。
| 段階 | 金額 (単価) |
|---|---|
| 1 ~ 10000 (up_to=10000) | 0.50 USD (unit_) |
10000+ (up_) | 0.40 USD (unit_) |
使用量は実際の使用が発生した後に請求されるため、新しい顧客に対するしきい値は暫定的に 100 USD にします。このスキームでは、最初の 1 万回のインプレッションまでは 200 インプレッションごとに顧客に請求します (200 x 0.50 USD = 100 USD)。顧客のインプレッションが 1 万回を超えると、250 インプレッションごとに顧客に請求します (250 x 0.40 USD = 100 USD)。これが請求期間の最後まで続き、この最後の時点で未請求の使用量が請求され、サブスクリプションと段階がリセットされます。
しきい値に達したときに段階をリセットするには、サブスクリプションの設定で使用量が設定したしきい値に達したときに請求サイクルの起点がリセットされるようにする必要があります。
数量ベースの段階
数量ベースの段階は、特定の使用量の料金を定義する段階的な階層とは異なり、すべての使用量ユニットの料金を定義します。一部の料金体系モデルでは、段階が上がるたびに単価が下がる数量ベースの段階を使用しています。このようなモデルを使用することで、顧客の使用量の増加を促すことができます (例: 広告インプレッション、ストレージのギガバイト数など)。
これをしきい値と組み合わせた場合、この料金体系モデルでは以下の状況でマイナス金額のラインアイテムを含む請求書が生成されることがあります。
- しきい値のある請求書がすでに発行されています。
- その後の使用量は低い単価で請求されます。
たとえば、以下の段階があるとします。
| 段階 | 金額 (単価) |
|---|---|
1 ~ 10000 (up_) | 0.50 USD (unit_) |
10000+ (up_) | 0.40 USD (unit_) |
顧客が 10,000 ユニットを使用すると、請求書の合計は 5,000 USD (10,000 x 0.50 USD = 5,000 USD) になります。その後さらに使用を続けることで、「すべて」の使用量が、低い単価である 0.40 USD で請求されます。このため、顧客がもう 1 ユニット使用すると、請求書は 4,000.40 USD に「減少」します (10,001 x 0.40 USD = 4,000.40 USD)。
サブスクリプションにしきい値がない場合、Stripe は請求期間の終了時に 4,000.40 USD の請求書を発行することになります。
5,000 USD の金額しきい値が存在する場合に、どのようにしてマイナスの請求が発生するのかを確認してみましょう。このシナリオでは、顧客の使用量が 10,000 ユニットに達すると Stripe が請求書を発行します。
顧客がもう 1 ユニット使用すると、請求書の合計は 4,000.40 USD (10,001 x 0.40 USD = 4,000.40 USD) に減少します。ただし、顧客がそれ以上 1 ユニットも使用しなければ、999.60 USD の「超過支払い額」が生じます (5,000 USD - 4,000.40 USD = 999.60 USD)。請求期間の最後に、Stripe はこの金額を顧客の残高に加え、将来の請求書の支払いに充当します。
顧客が使用を続けたと仮定します。この使用量のコストは、顧客が 12,500 ユニットを使用すると、再び 5,000 USD に達します (5,000 USD ÷ 0.40 USD = 12,500)。ただし、前回の支払いの 5,000 USD がこの使用量に充当されるため、請求書は発行されません。
Stripe は、合計使用量が 25,000 ユニット (合計費用が 10,000 USD) に達するか、請求期間の終了まで (どちらか早く発生した方)、請求書を発行しません。以下の表は、使用量が 25,000 ユニットに達した場合に発行される 2 種類の請求書に表示されるラインアイテムを示しています。
請求書 1
| ラインアイテム | 数量 | 金額 |
|---|---|---|
| 使用量 (単価 0.50 USD) | 10,000 | 5,000 USD |
| 合計 | 5,000 USD |
請求書 2
| ラインアイテム | 数量 | 金額 |
|---|---|---|
| 使用量 (単価 0.40 USD) | 25,000 | 10,000 USD |
| 前回請求された金額 (単価 0.50 USD) | -5,000 USD | |
| 合計 | 5,000 USD |
制限と注意事項
- しきい値は、トライアルのサブスクリプションには適用されません。
- 金額しきい値は、使用量ベースのサブスクリプション項目の定額料金の合計より大きくなければなりません。
- サブスクリプションの終了までの 24 時間は、Billing しきい値が評価されません。これは、同じ日に複数の請求書を受け取った顧客の混乱を防ぐのに役立ちます。
- サブスクリプションに設定できる金額のしきい値は 1 つのみです。
- サブスクリプションアイテムに設定できる使用量のしきい値は 1 つのみです。
- 使用量の報告はリアルタイムで行われるため、指定されたしきい値に達した瞬間に請求書が発行されるとは限りません。請求金額または使用量が指定のしきい値よりも若干高くなる場合があります。
- 金額のしきい値に達したかどうかの判断に使用される金額に税金は含まれませんが、割引や該当する比例配分は含まれます。
- サブスクリプションで、
last_総計モードが使用されている場合は、ever reset_オプションを有効にできません。billing_ anchor
オプション集計使用量
使用量に基づく料金体系モデルは、計測しているユニットが厳密には合計に従わない状況にも適用できます。
たとえば Typographic は、書き込まれたワード数に基づき課金を行う、コピーライティングサービスを提供しています。Typographic は、コピーライティングサービスの使用量に応じた料金に、定額の月額料金を加算した額を、月末に顧客に請求します。Typographic は、1 カ月あたりできるだけ多くのワード数を、各顧客に請求をしたいと考えています。これは、aggregate_usage パラメーターを使用して設定できます。
顧客が 6 月 1 日に、2,000 ワード書き込み、さらに 6 月 15 日に 1,000 ワード書き込みました。その後で、6 月 20 日に最初の 2,000 ワードのうちの 1,000 ワード分のクレジットが提供されたとします。この場合、月末の請求金額は 200 USD になります (この月の最大使用量が 2,000 ワードで、ワード単価が 0.10 USD)。
aggregate_ パラメーターは、サブスクリプションでの使用量記録の処理方法を決定します。このパラメーターには以下のオプションがあります。
sum: (パラメーターを指定しない場合に渡される) デフォルト値。合計請求額は、請求期間の全使用量の記録の合計に従います。last_: 合計請求額は、請求期間の最新の使用量記録に従います。請求期間中に使用が記録されなかった場合は、使用量during_ period 0の使用量に応じた合計請求額になります。last_: 合計請求額は、提供された最新の使用量記録に基づきます。現行の請求期間中に使用が記録されなかった場合、Stripe は以前の使用量記録を探します。使用量記録が見つからない場合は、合計請求額は使用量ever 0に従います。max: 合計請求額は、請求期間の最大の使用量記録に従います。請求期間中に使用が記録されなかった場合は、0の使用量に応じた合計請求額になります。
どのオプションを選択するかは、使用量の処理方法によって異なります。また、使用量の記録方法を表示するために、Usage Record API の action パラメーターの値も設定します。
サブスクリプションを作成する場合
quantityを渡さないでください。- サブスクリプションアイテム の ID は必ず記録してください。この値を Usage Record API に渡して使用量を報告します。
オプション数量を変換する
単価をかける前に使用量を集計するには、transform_quantity オプションを使用します。これは、料金の合計を求める前に、さまざまな数量や使用量を報告するのに便利です。
Typographic は提供商品を拡大してカスタムフォントデザインサービスを追加することにしました。カスタムデザインは労働集約的であるため、カスタマイズのレベルに応じて追加料金 (別の Product) を請求します。デザイナーはカスタマイズの実行に要した時間を正確に記録しますが、Typographic の顧客への請求は分単位では行われません。分単位ではなく、同社はカスタマイズに要した時間が 1 時間未満であっても 1 時間単位で請求します。
まず、フォントカスタマイズ用商品を作成します。
次に、フォントカスタマイズサービス商品の料金を作成します。1 時間単位で 150 USD を請求し、使用時間が 1 時間に満たない場合も切り上げて 1 時間分を請求します。
デザイナーが 150 分のカスタマイズを利用した場合、その顧客は 3 時間のカスタマイズ (2 時間 30 分を切り上げ) 分として 450 USD が請求されます。