サブスクリプションスケジュール
サブスクリプションスケジュールとその使用方法をご紹介します。
サブスクリプションスケジュールを使用して、時間の経過とともに発生するサブスクリプションへの変更を自動化します。スケジュールを介してサブスクリプションを直接作成することも、既存のサブスクリプションにスケジュールを追加することもできます。phases 属性を使用して、サブスクリプションに行う変更を定義します。スケジュールのすべてのフェーズが完了すると、end_behavior に基づいてスケジュールが完了します。
スケジュールで必要になる変更には、以下などがあります。
- サブスクリプションを将来の日付から開始する
- サブスクリプションを過去の日付にさかのぼる
- サブスクリプションをアップグレードまたはダウングレードする
サブスクリプションのスケジュールは、Stripe Billing ダッシュボードと API の両方で利用できます。
サブスクリプションスケジュールの使用例については、ユースケースをご覧ください。
フェーズ
サブスクリプションスケジュールを作成する際には、phases 属性を使用して変更が発生するタイミングと、変更対象のサブスクリプションのプロパティを定義します。たとえば、サブスクリプションの最初の 3 カ月間に 50% オフのクーポンを提供するとします。このシナリオでは、最初のフェーズが 3 カ月間で、50% オフのクーポンを含むサブスクリプションスケジュールが作成されます。2 番目のフェーズでサブスクリプションは通常の料金に戻り、クーポンが削除されます。フェーズは連続的である必要があり、特定の時点でアクティブであるフェーズは 1 つのみになります。最大 10 フェーズの設定が可能です。
フェーズの長さを設定する
API またはダッシュボードを使用して、フェーズの長さを設定できます。
次のフェーズに移行する
フェーズが end_ に達すると、フェーズ移行が自動的に発生します。フェーズが開始されると、Stripe は次のフェーズの属性に基づいてサブスクリプションを更新します。オプションで比例配分を有効にして、プラン内で未使用だった品目や時間をクレジットとしてユーザーに提供することもできます。
比例配分動作
次の 2 種類の比例配分動作の設定は、サブスクリプションスケジュールが変更された際に、Stripe が請求書の調整を処理する方法を制御します。
比例配分動作の更新のスケジュール:最上位の proration_behavior パラメーターは、現在のフェーズの請求書設定 (料金や数量の変更など) に影響を与えるようなサブスクリプションスケジュールの更新時に、比例配分の処理方法を制御します。
フェーズ移行時の比例配分動作:各フェーズには、そのフェーズへの移行時に Stripe が比例配分をどのように処理するかを制御する独自の proration_behavior 属性が指定されます。
比例配分動作の更新のスケジュール
サブスクリプションスケジュールを更新し、current_ の請求書設定を変更する場合は、最上位の proration_ パラメーターを使用して比例配分の処理方法を制御できます。
このパラメーターは、Update a subscription APIのパラメーターと同様に機能し、次の値を受け付けます。
- (デフォルト)
create_:請求書の変更に対して比例配分の調整が行われます。prorations none:更新に対して比例配分は作成されません。always_:比例配分が行われ、即座に請求書が確定します。invoice
この設定に関係なく、請求書以外のフィールド (メタデータなど) を変更しても比例配分は行われません。
フェーズ移行時の比例配分動作
フェーズごとに proration_ を定義することで、サブスクリプションがそのフェーズに入ったときに実行するアクションを制御できます。この設定は、フェーズ移行中に行われる比例配分にとりわけ適用されるものであり、フェーズのフィールドとして保存されます。
たとえば、phases[1] の開始時に数量を 1 から 3 に増やした場合、phases[1] の proration_ によって、phases[0] から phases[1] への移行時に比例配分の処理方法が決まります。
- (デフォルト)
create_:請求書の変更に備えて、保留中の請求書品目が生成されます。prorations none:このフェーズに入ると、比例配分は行われません。always_:このフェーズに入ると、比例配分が行われ、すぐに請求書が作成されます。invoice
将来のフェーズ移行で比例配分の処理方法を変更する必要がある場合は、将来のフェーズがアクティブになる前に、その proration_ 設定を更新します。
トライアルを使用する
API またはダッシュボードを使用して、サブスクリプションの最初のフェーズにトライアル期間を追加できます。
スケジュールを完了する
サブスクリプションスケジュールは、最後のフェーズが完了すると終了します。この時点で、サブスクリプションはその位置にとどまり、スケジュールとの関連付けはなくなります。スケジュールの最後のフェーズの完了後にサブスクリプションをキャンセルするには、end_behavior を cancel に設定します。サブスクリプションの cancel_on_date は、サブスクリプションが最終フェーズに移行するまで設定されません。
フェーズ属性の継承
フェーズが有効になると、そのフェーズに設定された属性はすべて、サブスクリプションにも設定されます。そのフェーズが終了すると、次のフェーズによって変更されない限り、またはスケジュールにデフォルト設定がない限り、属性は変化しません。一部の属性はスケジュールとフェーズの両方に設定できます。これには以下が含まれます。
これらの属性の 1 つがスケジュールで定義されている場合、それはすべてのフェーズのデフォルトになります。スケジュールとフェーズの両方で同じプロパティが定義されている場合、フェーズ属性によってスケジュール属性が上書きされます。この動作については、以下で詳しく説明します。
| スケジュール属性が存在 | フェーズ属性が存在 | 結果 |
|---|---|---|
| なし | なし | 顧客またはアカウント設定がデフォルト |
| あり | なし | 設定されたスケジュール属性 |
| あり | あり | 設定されたフェーズ属性 |
| なし | あり | 設定されたフェーズ属性 |
フェーズメタデータを使用する
サブスクリプションスケジュールのフェーズを使用して、基本となるサブスクリプションにメタデータを設定できます。これにより、予定された更新を使用して、サブスクリプションのメタデータを制御できます。
サブスクリプションメタデータをサブスクリプションの請求書にコピーする方法をご紹介します。
サブスクリプションスケジュールを作成する
この例は、顧客に対してサブスクリプションスケジュールを作成する方法を示しています。この方法でスケジュールを作成すると、サブスクリプションも自動的に作成されます。
メモ
サブスクリプションを直接作成する場合と異なり、collection_ が charge_ に設定されたサブスクリプションスケジュールの最初の請求書は、継続請求書のように機能し、サブスクリプションが作成された時点ではただちに確定_しません_。請求書は draft 状態で開始し、作成の約 1 時間後 に Stripe によって確定されます。
たとえば、回収方法を自動請求に設定し、start_ を指定してサブスクリプションスケジュールを作成した場合、draft 状態のサブスクリプションと請求書も作成されます。請求書の編集は 1 時間以内に済ませる必要があります。その後、確定時の非同期型の支払い試行の結果に応じて、請求書のステータスは open または paid に自動で移行します。
サブスクリプションスケジュールを更新する
サブスクリプションスケジュールは、現在および将来のフェーズのみ更新できます。
請求書をプレビューする
サブスクリプションスケジュールの次回の請求書をプレビューするには、プレビューの作成で schedule パラメーターを使用します。
スケジュールの作成と更新をプレビューする
サブスクリプションスケジュールの作成または更新をプレビューするには、schedule_details パラメーターを使用します。既存の schedule (スケジュール) を渡して、作成または更新のどちらなのかを Stripe に伝えます。
プレビューしようとしている現在と将来の phases (フェーズ) をすべて渡します。
たとえば、次のコードは、 12 カ月にわたって続く 1 フェーズのサブスクリプションスケジュールの初回請求書をプレビューします。
その他の考慮事項
一般に、サブスクリプションスケジュールはサブスクリプションと同じ制限に従いますが、独自の制限もいくつか導入されています。さらに、サブスクリプションスケジュールとサブスクリプションの相互関係によって、予期しない動作が発生することがあります。サブスクリプションスケジュールを使用する際の制限、製品の動作、一般的なベストプラクティスを理解するには、以下のセクションをご覧ください。
制限
- サブスクリプションスケジュールで定義できる現在のフェーズまたは将来のフェーズは、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 が返されます。
- ダッシュボードを使用してサブスクリプションを変更します (可能な場合)。これにより、関連付けられているサブスクリプションスケジュールが自動的に更新されます。
具体的には、サブスクリプションで次のいずれかのサブスクリプション属性を直接変更するときに、このアクションにより、新しいサブスクリプションスケジュールフェーズが自動的に作成される場合があります。
discountstax_rates itemstrial_、end trial_、settings trial_start application_fee_ percent add_invoice_ items automatic_tax
たとえば、2 つのアイテムが含まれるサブスクリプションを考えてみましょう。このサブスクリプションには現在のサブスクリプションのステータスと同じ内容を反映した、単一フェーズのサブスクリプションスケジュールが紐付いています。もし API を使ってアイテムの 1 つを削除 すると、紐付いたサブスクリプションスケジュールのフェーズは自動的に 2 つに分割されます。
- 終了したばかりで、2 つのサブスクリプションアイテムがあったフェーズ
- サブスクリプションアイテムが 1 つのみの新しいフェーズ
サブスクリプションスケジュールフェーズが自動的に分割されると、以下のプロパティが現在のフェーズから新しいフェーズにコピーされます。
proration_behavior billing_cycle_ anchor cancel_at_ period_ end descriptionmetadatapause_collection
さらに Stripe は、以下の最上位のサブスクリプション属性を、サブスクリプションスケジュールまたはその default_ にコピーすることがあります。
| サブスクリプションの属性 | 新しいサブスクリプションスケジュールフェーズにコピーされました | サブスクリプションスケジュール default_ にコピーされました |
|---|---|---|
coupon | ||
trial_ | ||
tax_ | ||
application_ | ||
discounts | ||
collection_ | ||
invoice_ | ||
default_ | ||
default_ | ||
transfer_ | ||
on_ | ||
currency | ||
add_ | ||
automatic_ | ||
items. | ||
billing_ |
サブスクリプションの metadata に対する更新は、関連付けられたサブスクリプションスケジュールに反映されません。
ユースケース
定期支払いスケジュールについて説明するため、The Pacific という架空の新聞会社の例を紹介します。この新聞社は 2 つのサブスクリプションオプションを提供しています。
- 「印刷版」では、顧客は紙に印刷された新聞を受け取ります。
- _デジタル版_では、顧客は The Pacific の Web サイト上の会員専用コンテンツにアクセスできます。
両方のサブスクリプションともに、請求は月次です。以下の定期スケジュールのオプションをご覧ください。