サブスクリプションスケジュール
サブスクリプションスケジュールとその使用方法をご紹介します。
サブスクリプションスケジュールを使用して、時間の経過とともに発生するサブスクリプションへの変更を自動化します。スケジュールを介してサブスクリプションを直接作成することも、既存のサブスクリプションにスケジュールを追加することもできます。phases 属性を使用して、サブスクリプションに行う変更を定義します。スケジュールのすべてのフェーズが完了すると、end_behavior に基づいてスケジュールが完了します。
スケジュールで必要になる変更には、以下などがあります。
- サブスクリプションを将来の日付から開始する
- サブスクリプションを過去の日付にさかのぼる
- サブスクリプションをアップグレードまたはダウングレードする
サブスクリプションスケジュールは、Stripe Billing ダッシュボードと API の両方で利用可能です。ダッシュボードでのサブスクリプションスケジュールの機能を示す短いビデオをご紹介します。
ダッシュボードでのサブスクリプションスケジュール
このドキュメントの以降の部分では、サブスクリプションスケジュールについてさらに詳しく説明します。例のリストを確認するには、ユースケースページをご覧ください。
フェーズ
サブスクリプションスケジュールを作成する際には、phases 属性を使用して変更が発生するタイミングと、変更対象のサブスクリプションのプロパティを定義します。たとえば、サブスクリプションの最初の 3 カ月間に 50% 割引のクーポンを提供するとします。このシナリオでは、最初のフェーズが 3 カ月間で、50% オフのクーポンを含むサブスクリプションスケジュールを作成します。2 番目のフェーズでは、サブスクリプションは通常のコストに戻り、クーポンが削除されます。フェーズは連続的である必要があり、特定の時点でアクティブであるフェーズは 1 つのみになります。10 フェーズまで設定することができます。
フェーズの長さを設定する
料金の interval (期間) によってサブスクリプションの請求頻度が決まります。たとえば、期間が 1 カ月の場合には毎月請求が行われます。フェーズには、iterations 属性があり、これを使用してフェーズの存続期間を指定します。この値に期間を乗じることでフェーズの長さが決定されます。サブスクリプションスケジュールで料金を 1 カ月分に指定し、iterations=2
と設定した場合には、フェーズが 2 カ月間続きます。
1 つのフェーズの end_
が、次のフェーズの start_
である必要があります。iterations
を使用すると、自動的に start_
と end_
が適切に設定されます。これらの値を手動で設定することもできますが、Stripe では手動設定ではなく iterations
を使用することをお勧めします。手動で開始日と終了日を設定するとエラーが起きやすいため、手動設定の使用は特別なユースケースのみにしてください。
次のフェーズに移行する
フェーズの end_
に達すると、フェーズの移行が自動的に発生します。フェーズが開始されると、Stripe により、次のフェーズの属性に基づいてサブスクリプションが更新されます。オプションで proration (比例配分) を有効にして、プランの未使用のアイテムや時間のクレジットをユーザーに提供することもできます。
トライアルを使用する
フェーズにトライアルの終了を設定して、トライアル期間を追加できます。特定のフェーズ全体をトライアルにする場合には、trial_
の値をフェーズの end_
と同じにします。また、フェーズの一部のみをトライアルにする場合には、trial_
を end_
の前にします。更新をスケジュールする際には、各フェーズに新しい trial_
を指定する必要があります。
スケジュールを完了する
サブスクリプションスケジュールは、最後のフェーズが完了すると終了します。この時点で、サブスクリプションはその位置にとどまり、スケジュールとの関連付けはなくなります。スケジュールの最後のフェーズの完了後にサブスクリプションをキャンセルするには、end_behavior を cancel
に設定します。
フェーズ属性の継承
フェーズが有効になると、そのフェーズに設定された属性はすべて、サブスクリプションにも設定されます。そのフェーズが終了すると、次のフェーズによって変更されない限り、またはスケジュールにデフォルト設定がない限り、属性は変化しません。一部の属性はスケジュールとフェーズの両方に設定できます。これには以下が含まれます。
これらの属性の 1 つがスケジュールで定義されている場合、それはすべてのフェーズのデフォルトになります。スケジュールとフェーズの両方で同じプロパティが定義されている場合、フェーズ属性によってスケジュール属性が上書きされます。この動作については、以下で詳しく説明します。
スケジュール属性が存在 | フェーズ属性が存在 | 結果 |
---|---|---|
なし | なし | 顧客またはアカウント設定がデフォルト |
あり | なし | 設定されたスケジュール属性 |
あり | あり | 設定されたフェーズ属性 |
なし | あり | 設定されたフェーズ属性 |
フェーズメタデータを使用する
サブスクリプションスケジュールのフェーズを使用して、基本となるサブスクリプションにメタデータを設定できます。これにより、予定された更新を使用して、サブスクリプションのメタデータを制御できます。
サブスクリプションメタデータをサブスクリプションの請求書にコピーする方法をご紹介します。
サブスクリプションスケジュールを作成する
ユースケースページにはさらに詳細な例がありますが、顧客を用いてサブスクリプションスケジュールを作成する基本的な例を以下に紹介します。この方法でスケジュールを作成すると、サブスクリプションも自動的に作成されます。
注
サブスクリプションを直接作成する場合と異なり、collection_
が charge_
に設定されたサブスクリプションスケジュールの最初の請求書は、定期請求書のように動作し、スケジュールのサブスクリプションが作成された時点ではただちに確定「しません」。請求書は draft
ステータスで開始し、作成の約 1 時間後に Stripe によって確定されます。
例えば、start_
に設定した自動請求サブスクリプションのスケジュールを作成すると、draft
ステータスのサブスクリプションと請求書も作成されます。これにより、 請求書を編集するための 1 時間が確保されます。その後、確定時における非同期型決済の試行結果に基づき、請求書は 自動的に open
または paid
ステータスに変わります。
サブスクリプションスケジュールを更新する
サブスクリプションスケジュールは、現在および将来のフェーズのみ更新できます。
請求書をプレビューする
サブスクリプションスケジュールの次回の請求書をプレビューするには、プレビューの作成で schedule パラメーターを使用します。
スケジュールの作成と更新をプレビューする
サブスクリプションスケジュールの作成または更新をプレビューするには、schedule_details パラメーターを使用します。既存の schedule (スケジュール) を渡して、作成または更新のどちらなのかを Stripe に伝えます。
プレビューしようとしている現在と将来の phases (フェーズ) をすべて渡します。
たとえば、次のコードは、1
フェーズが 12
請求期間にわたって続くサブスクリプションスケジュールの初回の請求書をプレビューします。
その他の考慮事項
一般に、サブスクリプションスケジュールはサブスクリプションと同じ制限に従いますが、独自の制限もいくつか導入されています。さらに、サブスクリプションスケジュールとサブスクリプションの相互関係によって、予期しない動作が発生することがあります。サブスクリプションスケジュールを使用する際の制限、製品の動作、一般的なベストプラクティスを理解するには、以下のセクションをご覧ください。
制限
- サブスクリプションスケジュールで定義できる現在のフェーズまたは将来のフェーズは、1 度に 10 件までです。過去のフェーズはこの制限にカウントされません。
- 複数の項目を持つサブスクリプションスケジュールフェーズを作成する場合は、サブスクリプションと同じ制限にサブスクリプションスケジュールフェーズも従います。
ダッシュボードの制限
ダッシュボードで、コードを使用せずにサブスクリプションスケジュールを作成し、更新できます。
ダッシュボードでは、すべてのフェーズを対象として (フェーズごとではなく) 以下の設定を使用できます。
- 請求しきい値
- 支払い方法
- 請求書設定
- サブスクリプションの説明
- トライアル日数 (第 1 フェーズでのみ機能します)
次のパラメーターはダッシュボードでサポートされません。
- サブスクリプションスケジュールのメタデータ
- フェーズアイテムのメタデータ
- 通貨
- すべての Connect パラメーター
スケジュールが関連付けらている場合のサブスクリプションの更新
時間が経過してスケジュールの次のフェーズになったときに、サブスクリプションスケジュールを使用して、サブスクリプションを自動的に変更します。サブスクリプションに直接加えた変更の一部は、サブスクリプションスケジュールのフェーズに反映されますが、反映されない変更もあります。このため、サブスクリプションを直接変更した場合、次のフェーズになったときにサブスクリプションスケジュールによって上書きされる可能性があります。
サブスクリプションへの変更をスケジュール設定する際は、以下のベストプラクティスに従ってください。
- サブスクリプションにサブスクリプションのスケジュールが関連付けられている場合、Subscriptions APIではなく、 Subscription Schedule API を使用してサブスクリプションを変更します。
- 今後の API 更新のために、サブスクリプションスケジュール ID をサブスクリプション ID と一緒に保存します。サブスクリプションスケジュール ID は、API を使用して作成する場合、または subscription_schedule.created Webhook により Stripe が自動作成する場合 (顧客がカスタマーポータルでダウングレードをスケジュールした場合など) に返されます。
- サブスクリプションスケジュールがリリースされたときに、サブスクリプションスケジュール ID を破棄します。サブスクリプションを直接変更するか、新しいサブスクリプションスケジュールを作成します。サブスクリプションスケジュールがリリースされると、API を使用してリリース、または subscription_schedule.released Webhook イベントを通じてサブスクリプションスケジュール ID が返されます。
- ダッシュボードを使用してサブスクリプションを変更します (可能な場合)。これにより、関連付けられているサブスクリプションスケジュールが自動的に更新されます。
具体的には、サブスクリプションで次のいずれかのサブスクリプション属性を直接変更するときに、このアクションにより、新しいサブスクリプションスケジュールフェーズが自動的に作成される場合があります。
discounts
tax_
rates items
trial_
、end trial_
、settings trial_
start application_
fee_ percent add_
invoice_ items automatic_
tax
たとえば、2 つのアイテムが含まれるサブスクリプションを考えてみましょう。サブスクリプションには、サブスクリプションの現在のステータスを反映した、単一のフェーズが関連付けられたサブスクリプションスケジュールがあります。いずれかのアイテムを API を使用して削除すると、関連付けられたサブスクリプションスケジュールフェーズが 2 つのフェーズに自動的に分割されます。
- 終了したばかりで、2 つのサブスクリプションアイテムがあったフェーズ
- サブスクリプションアイテムが 1 つのみの新しいフェーズ
サブスクリプションスケジュールフェーズが自動的に分割されると、以下のプロパティが現在のフェーズから新しいフェーズにコピーされます。
proration_
behavior billing_
cycle_ anchor cancel_
at_ period_ end description
metadata
pause_
collection
さらに Stripe は、以下の最上位のサブスクリプション属性を、サブスクリプションスケジュールまたはその default_
にコピーすることがあります。
サブスクリプションの属性 | 新しいサブスクリプションスケジュールフェーズにコピーされました | サブスクリプションスケジュール default_ にコピーされました |
---|---|---|
coupon | X | |
trial_ | X | |
tax_ | X | |
application_ | X | X |
discounts | X | |
collection_ | X | X |
invoice_ | X | X |
default_ | X | X |
default_ | X | X |
transfer_ | X | X |
on_ | X | X |
billing_ | X | X |
currency | X | |
add_ | X | |
automatic_ | X | X |
items. | X |
サブスクリプションの metadata
に対する更新は、関連付けられたサブスクリプションスケジュールに反映されません。