2020/09/04
[Stripe][Python]StripeのSubscription Scheduleを試してみた
概要
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のドキュメントを見て対応しました。
- 既存の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"]
- 次に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便利ですね。
以上です。
関連する記事
[Python]ハイフンなし電話番号からハイフン付きに復元
Pythonでハイフンなしの日本の電話番号をハイフン付きのものに変換する
[Python]BeautifulSoup4でhtmlの解析
BeautifulSoup4というPythonのライブラリを使って、特定のURLのコンテンツを取得し、タイトルや説明文を取得できるようにしました。
[Python]銀行コードと支店コードの取扱
Pythonで銀行コード、支店コードデータを取り扱う便利なライブラリzengin-codeを導入しました。
Sendgridを使ってメールの受信を行う
Inbound Email Parse Webhookという機能を利用してメールを受信したらWebhookを呼び出すようにしました