🍃
Stripe Connectで定期購入を次回更新日に解約する処理(Node)
express
を使用してAPIを作成。
import * as cors from 'cors'
import * as express from 'express'
import Stripe from 'stripe'
const stripe = (apiKey: string): Stripe =>
new Stripe(apiKey, { apiVersion: '2020-08-27' })
const app = express()
app.use(cors({ origin: true }))
app.post('/stripe/cancel_subscription', (req, res) => {
const { apiKey, accountId, subscription } = req.body
await stripe(apiKey).subscriptions.update(
subscription,
{ cancel_at_period_end: true },
{ stripeAccount: accountId }
)
})
処理の詳細
subscriptions.update
の第二引数でtrue
更新しているcancel_at_period_end
ですが、
これで次回更新日に定期購入がキャンセルされるようになります。
また、今回はConnetアカウントのお客の操作ですので、
subscriptions.update
の第三引数には、ConnectアカウントのアカウントIDを指定する必要があります。
req.body
で取得しているパラメータの詳細:
-
apiKey
: 親アカウントのシークレットキー -
accountId
: ConnectアカウントID -
subscription
: Coneectアカウントのお客が購入している定期購入ID
最後に
ここでは明示的に親アカウントのシークレットキーをreq.body
で受け取っていますが、
Stripeでの実装としては望ましくないので、サーバ側の環境変数で保持しておくといいかもです。
ちなみに、cancel_at_period_end: false
という処理を行うと、
このキャンセルをキャンセルし、次回更新日には課金が行われる(再開)ことになります💸
Discussion