
こんにちは、サイオステクノロジーの佐藤 陽です。
今回はStripeで作成したサブスクリプションが持つ、商品の個数情報を更新する方法についてご紹介します。
目次
はじめに
今回はそんなサブスクリプションの内容を更新する方法についてご紹介します。
「そんなの簡単じゃないの?」って思われるかもしれないですが、少しはまってしまったので備忘録としてご紹介します。
想定されるユースケース
- お菓子を毎月届けてくれるサブスクリプションサービス
- 各お菓子毎に価格が異なる
- お菓子ごとに数量変更が可能
といった感じでしょうか。
このケースで、購入するお菓子の内容を変更したい!という場合の実装方法です。
結論
急いでる方向けに結論だけ言いますと
更新時にSubscription ItemのIdを指定して更新を行う
といった点がポイントです。
環境
- Postman
- Stripe API(2022-08-01)
検証
事前準備
価格や、請求サイクルなどは何でもOKです。
- ポテチ 300円/月
- キャンディ400/月
- どら焼き 500/月
- サブスクリプション
- ポテチ(×2)
- キャンディ(×1)
更新処理
- ポテチは数量変更
- キャンディは除外
- どら焼きは新規追加
※ここで各PriceIdや、SubscriptionIdはこの後利用するのでどこかに控えておいてください。
Update Subscription API
間違いパターン
興味のない人は、この後の正解パターンをご確認ください。
{
"error": {
"message": "Cannot add multiple subscription items with the same plan: price_{ポテチのpriceId}",
"param": "plan",
"request_log_url": "https://dashboard.stripe.com/test/logs/req_0R3OdGpBTXAjCE?t=1679275957",
"type": "invalid_request_error"
}
}
といったニュアンスです。
数量変更ではなく、新規に2個を追加しようとしまっているようです。
- 既にポテチ2個はSubscription Itemのオブジェクトとして登録されている
- 既存のPriceに関しては、Subscription Itemを指定して更新する必要がある
- 削除に関しても同様にSubscription ItemのId情報を指定して、明示的にDeleteのパラメータを指定する
それでは、これを踏まえ正しい処理を実装していきます。
正しいパターン

このSubscription Item Idを使ってAPIを実行していきます。
こんな感じです。
- 「数量変更」「削除」の場合はitems[number][id]にSubscription Item Idを指定
- 「新規追加」の場合はitems[number][price]にPrice Idを指定
しているのがポイントですね。
Be the first to comment