Stripeでカスタマーが特定のPlanをSubscribeしているか否かを判定する (Node.js)
例えば「無料プランは1ユーザー1つだけしか契約できない」とかしたいですよね。 そういう時、Stripeではsubscriptions.listのAPIを利用して特定のプランをSubscribeしているか否かを見ることがで […]
広告ここから
広告ここまで
目次
例えば「無料プランは1ユーザー1つだけしか契約できない」とかしたいですよね。
そういう時、Stripeではsubscriptions.list
のAPIを利用して特定のプランをSubscribeしているか否かを見ることができます。
コード
const hasSubscribed = async (customerId, plan) => {
const result = await Stripe.subscriptions.list({
customer: customerId,
plan,
status: 'active'
})
return result.data.length > 0
}
TypeScriptだとこうなります。
const hasSubscribed = async (customerId: string, plan: string): Promise<boolean> => {
const result = await Stripe.subscriptions.list({
customer: customerId,
plan,
status: 'active'
})
return result.data.length > 0
}
使い方
このように使いましょう。
const planId = 'free'
const customerId = 'cus_XXXXX'
if (await hasSubscribed(customerId, planId)) {
throw new Error('The customer subscribed the plan already!')
}
...
「1回Subscribeしたら金輪際契約させねぇ」という強い意志
ちょっとどういうケースでこれが発生するか思いつかなかったのですが、理論上可能なので書いておきます。
subscriptions.list
の引数status
をall
にすると、キャンセル済のモノも検索してくれるらしいです。
Passing in a value of
all
will return subscriptions of all statuses.
なので「一度だけしかSubscribeさせたくない!」という場合はstatus
をactive
ではなくall
にすると良さそうです。知らんけど。