サブスクリプションのスケジュールについて説明するため、The Pacific という架空の新聞会社の例を紹介します。この新聞社は 2 つのサブスクリプションオプションを提供しています。
- 「印刷版」では、顧客は紙に印刷された新聞を受け取ります。
- 「デジタル版」では、顧客は The Pacific の Web サイト上の会員専用コンテンツにアクセスできます。
両方のサブスクリプションともに、請求は月次です。以下の定期スケジュールのオプションをご覧ください。
将来の日付でサブスクリプションを開始する
デフォルトでは、印刷版の新しいサブスクリプションは、翌月の 1 日に開始されます。これを実現するため、start_date
は将来日付に設定されます。以下のコードは、開始が将来になるサブスクリプションを作成します。
curl https://api.stripe.com/v1/subscription_schedules \
-u "sk_test_4eC39HqLyjWDarjtT1zdp7dc
:" \
-d customer= \
-d start_date=1690873200 \
-d end_behavior=release \
-d "phases[0][items][0][price]"={{PRICE_PRINT}} \
-d "phases[0][items][0][quantity]"=1 \
-d "phases[0][iterations]"=12
サブスクリプションを遡及適用する
顧客がデジタルプランを購読すると、The Pacific は、そのサブスクリプションを現在の月の 1 日までさかのぼります。過去の日付にさかのぼって支払われるため、デジタル版の購読者は Web サイトにすぐにアクセスできるようになります。
curl https://api.stripe.com/v1/subscription_schedules \
-u "sk_test_4eC39HqLyjWDarjtT1zdp7dc
:" \
-d customer= \
-d start_date=1688194800 \
-d end_behavior=release \
-d "phases[0][items][0][price]"={{PRICE_DIGITAL}} \
-d "phases[0][items][0][quantity]"=1 \
-d "phases[0][iterations]"=12
既存のサブスクリプションにスケジュールを追加する
The Pacific で、元の顧客の一部がスケジュールのないサブスクリプションで定期購読していることが発覚したとします。これらのサブスクリプションはすでに存在するため、サブスクリプション ID を from_subscription
属性に渡してスケジュールを追加できます。この方法でサブスクリプション ID を渡すと、そのサブスクリプションの現在の請求期間に基づく 1 フェーズのスケジュールが作成されます。
curl https://api.stripe.com/v1/subscription_schedules \
-u "sk_test_4eC39HqLyjWDarjtT1zdp7dc
:" \
-d from_subscription=
これらのスケジュールを追加しているときに、一部の顧客が印刷版の定期購読を決めたため、The Pacific はスケジュールに 2 番目のフェーズを追加して、1 カ月後に印刷版のプランを開始します。以下のユースケースは、このプロセスの例を示しています。
サブスクリプションをアップグレードする
The Pacific は、最初に印刷版を 1 カ月定期購読し、その後に自動的にデジタル版を追加するオプションをオファーします。まず印刷版を試してから定期購読を続けるかキャンセルするかを決定できるため、一部の顧客はこのオプションを好みます。
curl https://api.stripe.com/v1/subscription_schedules \
-u "sk_test_4eC39HqLyjWDarjtT1zdp7dc
:" \
-d customer= \
-d start_date=now \
-d end_behavior=release \
-d "phases[0][items][0][price]"={{PRICE_PRINT}} \
-d "phases[0][items][0][quantity]"=1 \
-d "phases[0][iterations]"=1 \
-d "phases[1][items][0][price]"={{PRICE_PRINT}} \
-d "phases[1][items][0][quantity]"=1 \
-d "phases[1][items][1][price]"={{PRICE_DIGITAL}} \
-d "phases[1][items][1][quantity]"=1 \
-d "phases[1][iterations]"=11
サブスクリプションをダウングレードする
さらに The Pacific は、印刷版とデジタル版の両方の購読を開始し、その後残りの期間に印刷版のみの購読にダウングレードするオプションも提供しています。顧客はこのオプションを使用して両方を試し、好みに合うかどうかを確認できます。
curl https://api.stripe.com/v1/subscription_schedules \
-u "sk_test_4eC39HqLyjWDarjtT1zdp7dc
:" \
-d customer= \
-d start_date=now \
-d end_behavior=release \
-d "phases[0][items][0][price]"={{PRICE_DIGITAL}} \
-d "phases[0][items][0][quantity]"=1 \
-d "phases[0][items][1][price]"={{PRICE_PRINT}} \
-d "phases[0][items][1][quantity]"=1 \
-d "phases[0][iterations]"=1 \
-d "phases[1][items][0][price]"={{PRICE_PRINT}} \
-d "phases[1][items][0][quantity]"=1 \
-d "phases[1][iterations]"=11
サブスクリプションを変更する
The Pacific は、広告付きの基本オプションと、広告なしのプレミアムオプションの 2 種類の印刷版のサブスクリプションオプションを提供しています。プレミアムオプションの一部の顧客が、次回の請求サイクルから広告付きの基本オプションに変更することを決定しました。既存のサブスクリプションを使用してスケジュールを作成し、その後に新しいフェーズとして広告付きの基本オプションでスケジュールを更新します。
Stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc'
schedule = Stripe::SubscriptionSchedule.create({
from_subscription: 'sub_ERf72J8Sc7qx7D',
})
Stripe::SubscriptionSchedule.update(
schedule.id,
{
phases: [
{
items: [
{
price: schedule.phases[0].items[0].price,
quantity: schedule.phases[0].items[0].quantity,
},
],
start_date: schedule.phases[0].start_date,
end_date: schedule.phases[0].end_date,
},
{
items: [
{
price: '{{PRICE_PRINT_BASIC}}',
quantity: 1,
},
],
iterations: 1,
},
],
},
)
数量を増やす
また、サブスクリプションの数量の増加をスケジュールすることもできます。以下のスケジュールは、1 カ月の期間でデジタル版の 1 つのインスタンスを開始します。2 番目のフェーズでは、数量が 11 カ月間、2 に増えます。
curl https://api.stripe.com/v1/subscription_schedules \
-u "sk_test_4eC39HqLyjWDarjtT1zdp7dc
:" \
-d customer= \
-d start_date=now \
-d end_behavior=release \
-d "phases[0][items][0][price]"= \
-d "phases[0][items][0][quantity]"=1 \
-d "phases[0][iterations]"=1 \
-d "phases[1][items][0][price]"= \
-d "phases[1][items][0][quantity]"=2 \
-d "phases[1][iterations]"=11
クーポンを使用する
The Pacific は特典付き定期購読セールを実施することがあります。以下のスケジュールは、顧客の印刷版の購読を 6 カ月間 50% オフで開始します。このスケジュールの 2 番目のフェーズ (残りの 6 カ月間) ではクーポンが削除されます。
curl https://api.stripe.com/v1/subscription_schedules \
-u "sk_test_4eC39HqLyjWDarjtT1zdp7dc
:" \
-d customer= \
-d start_date=now \
-d end_behavior=release \
-d "phases[0][items][0][price]"= \
-d "phases[0][items][0][quantity]"=1 \
-d "phases[0][iterations]"=6 \
-d "phases[0][coupon]"= \
-d "phases[1][items][0][price]"= \
-d "phases[1][items][0][quantity]"=1 \
-d "phases[1][iterations]"=6
税率を変更する
The Pacific は複数の法管轄区域で営業しており、一部の区域には、サブスクリプションベースのビジネスに対する独自の税率が制定されています。これらの法管轄区域のうちの 1 カ所では 2 つの税率が必要とされ、顧客がサブスクリプションを開始した最初の月に適用される税率と、その後の継続請求に適用される税率があります。
curl https://api.stripe.com/v1/subscription_schedules \
-u "sk_test_4eC39HqLyjWDarjtT1zdp7dc
:" \
-d customer= \
-d start_date=now \
-d end_behavior=release \
-d "phases[0][items][0][price]"= \
-d "phases[0][items][0][quantity]"=1 \
-d "phases[0][items][0][tax_rates][0]"=txr_2J8lmBBGHJYyuUJqF6QJtaAA \
-d "phases[0][iterations]"=1 \
-d "phases[1][items][0][price]"= \
-d "phases[1][items][0][quantity]"=1 \
-d "phases[1][items][0][tax_rates][0]"=txr_2J8lmBBGHJYyuUJqF6QJtbBB \
-d "phases[1][iterations]"=11
スケジュールからサブスクリプションをリリースする
スケジュールのステータスが not_started
または active
である限り、サブスクリプションをスケジュールからリリースできます。サブスクリプションをリリースしてもそれ自体は残りますが、スケジュールや残りのフェーズは削除されます。
curl -X POST https://api.stripe.com/v1/subscription_schedules/{{SUBSCRIPTION_SCHEDULE_ID}}
/release \
-u "sk_test_4eC39HqLyjWDarjtT1zdp7dc
:"
スケジュールとサブスクリプションをキャンセルする
サブスクリプションスケジュールとそれに関連するサブスクリプションをすぐにキャンセルできます (サブスクリプションスケジュールに有効なサブスクリプションが含まれる場合)。サブスクリプションスケジュールは、ステータスが not_started
または active
の場合にのみキャンセルできます。
curl -X POST https://api.stripe.com/v1/subscription_schedules/{{SUBSCRIPTION_SCHEDULE_ID}}
/cancel \
-u "sk_test_4eC39HqLyjWDarjtT1zdp7dc
:"
請求サイクルの起点をリセットする
The Pacific では、長年の印刷版の顧客に対し、毎月、顧客が最初に購読を開始した日に請求しています。この日は、請求サイクルの起点です。
このような顧客がデジタル版に移行すると、The Pacific は移行日を翌月の 1 日にスケジュールします。また、請求サイクルの起点も同じ日にリセットします。
以下のサンプルコードを使用してサブスクリプションを作成することにより、請求サイクルの起点がリセットされることを確認できます。ダッシュボードでサブスクリプションを確認すると、次回の請求書は、デジタル版が 1 日に開始されるとすぐに顧客に請求されるようにスケジュール設定されていることがわかります。
起点をリセットしない場合の動作を確認するには、請求サイクルの起点を phase_start
に設定する行を削除して、サンプルコードを再度実行します。この行がないと、取引が 1 日に発生するにもかかわらず、ダッシュボードの次回の請求書は、本日から丸 1 カ月経過してから請求されます。
curl https://api.stripe.com/v1/subscription_schedules \
-u "sk_test_4eC39HqLyjWDarjtT1zdp7dc
:" \
-d customer= \
-d start_date=now \
-d "phases[0][items][0][price]"={{PRICE_PRINT}} \
-d "phases[0][items][0][quantity]"=1 \
-d "phases[0][end_date]"=1690873200 \
-d "phases[1][items][0][price]"={{PRICE_DIGITAL}} \
-d "phases[1][items][0][quantity]"=1 \
-d "phases[1][iterations]"=11 \
-d "phases[1][billing_cycle_anchor]"=phase_start
分割払いプラン
分割払いプランを使用すると、顧客は、設定された期間の支払いを、全額を支払い終えるまで分割して支払うことができます。たとえば、The Pacific が新しい印刷機を購入する際、古い印刷機を他の出版会社に販売します。小規模の出版会社は、全額を最初に支払う資金的な余裕がないことが多いため、分割払いを使用します。
ほとんどの印刷機について、The Pacific は月あたり 1,000 ドルを請求するため、再利用可能な価格が作成されます。
curl https://api.stripe.com/v1/prices \
-u "sk_test_4eC39HqLyjWDarjtT1zdp7dc
:" \
-d unit_amount=100000 \
-d currency=usd \
-d product=prod_Hh99apo1OViyGW \
-d "recurring[interval]"=month
印刷機の型、モデル、使用年数に応じて、The Pacific が請求する金額は異なります。この例では、1 カ月当たり 1,000 ドルを 6 カ月間請求し、合計 6,000 ドルを請求します。
curl https://api.stripe.com/v1/subscription_schedules \
-u "sk_test_4eC39HqLyjWDarjtT1zdp7dc
:" \
-d customer= \
-d start_date=now \
-d end_behavior=cancel \
-d "phases[0][items][0][price]"= \
-d "phases[0][items][0][quantity]"=1 \
-d "phases[0][iterations]"=6
iterations
の数に価格の期間を乗じて顧客に対する請求回数 (この例では 6 回の月次支払い) が決定されます。end_behavior
は、最後の繰り返し終了後にサブスクリプションがどのようになるかを決定します。分割払いプランでは、サブスクリプションは必要なくなるため、end_behavior
は cancel
に設定されます。
まれに、The Pacific が請求する金額が通常の 1,000 ドル/月よりも少ない場合があります。この場合、price_data
を使用して 1 回限りの使用の価格を作成します。この例では、500 ドルの価格を作成し、6 カ月間、毎月請求します。
curl https://api.stripe.com/v1/subscription_schedules \
-u "sk_test_4eC39HqLyjWDarjtT1zdp7dc
:" \
-d customer= \
-d start_date=now \
-d end_behavior=cancel \
-d "phases[0][items][0][price_data][currency]"=usd \
-d "phases[0][items][0][price_data][product]"=prod_Hh99apo1OViyGW \
-d "phases[0][items][0][price_data][recurring][interval]"=month \
-d "phases[0][items][0][price_data][unit_amount]"=50000 \
-d "phases[0][items][0][quantity]"=1 \
-d "phases[0][iterations]"=6