2020/09/04

[Stripe][Python]StripeのSubscription Scheduleを試してみた

stripepython

概要

stripeにはクレジットカードで定期的に支払いをする設定を作成することができます。(Subscription)

ただ、Subscriptionだけでは以下のような要望に対応することが難しいです。

  • 9月は月額課金だが、10月から年額課金に切り替える

Subscriptionは変更することができます。

ただ、期間を変更してしまうと、変更した瞬間に自動的に変更後の期間の金額を請求してしまう仕様のようでした。

Switching prices does not normally change the billing date or generate an immediate charge unless:

  • The billing interval is changed (e.g., monthly to yearly).
  • The subscription moves from free to paid, or paid to free.
  • A trial starts or ends.

したがって、時期が来たタイミングで定期購読の内容を切り替えたい場合は、Subscription Scheduleを導入すると簡単に実装することができます。

実装内容

基本的にはSubscriptions Schedules APIのドキュメントを見て対応しました。

  1. 既存のSubscriptionからスケジュールを作成します。
import stripe
stripe.api_key = 'your-stripe-secret-key'


current_subscription = stripe.Subscription.retrieve(id='sub_YOUR_CUSTOMER_SUBSCRIPTION_ID')
subscription_schedule = stripe.SubscriptionSchedule.create(
    from_subscription=current_subscription["id"],
)
stripe_subscription_schedule_id = subscription_schedule["id"]
  1. 次に10月から切り替えをします

2020/10/01(UTC)のtimestampは1601445600なので、それを現在の設定の終了日および次の支払いの開始日に設定します。

stripe.SubscriptionSchedule.modify(
    stripe_subscription_schedule_id,
    phases=[
        {
            'items': [
                {'price': current_subscription["plan"]["id"]},
            ],
            'start_date': current_subscription.current_period_start,
            'end_date': 1601478000,
        },
        {
            'items': [
                {'price': 'price_NEXT_PRICE_ID_FROM_OCT'},
            ],
            'start_date': 1601478000,
        },
    ],
)

任意のタイミングで、課金間隔を変えたりすることができそうなので、細かい制御ができそうです。
Stripe便利ですね。

以上です。