LoginSignup
1
0

Stripe Checkoutでタイムセールのような時間制限のある決済フローを実装する方法

Posted at

Stripe Checkoutを使用することで、簡単にオンラインでの決済・サブスクリプション申し込みページのURLを作成できます。

スクリーンショット 2024-02-16 14.33.01.png

作成したCheckout Sessionは決済が完了するか、発行から24時間を経過すると利用できなくなります。もし、このCheckout Sessionを任意のタイミングで無効化したい場合は、有効期限を指定してやる必要があります。今回は、Stripe Checkoutを使ってタイムセールのような時間制限のある決済フローを実装する方法を説明します。

Step 1: expires_atを利用した有効期限付きのCheckout Sessionの作成

StripeのCheckout Sessionを作成する際、APIパラメータのexpires_atを利用することで、有効期限を設定することができます。有効期限は30分以上未来の時間を指定することができます。例えば「現在から30分後に無効化されるCheckout Sessionを作りたい」場合、day.jsを利用して次のように実装することができます。

import dayjs from 'dayjs'

...

const sessionExpiresAt = dayjs().add(30, 'minutes').unix()

await stripe.checkout.sessions.create({
  line_items: [{
    price: 'price_xxxxx',
    quantity: 1
  }],
  success_url: 'https://stripe.com',
  cancel_url: 'https://stripe.com',
  expires_at: sessionExpiresAt,
  mode: 'payment'
})

Step 2: セール終了時間になったら、新しいCheckout Sessionを作成しないようにする

expires_atを利用した期限設定は、30分以上未来の時間である必要があります。そのため、「午後8時に終了する」場合、「新規の注文フロー(Checkout Sessionの作成)を午後8時に終了する」のか「支払い完了までのフローを午後8時までに完了させる必要があるようにする」かを決める必要があります。

もし支払い完了までのフローを午後8時までに完了させる必要があるようにする場合は、午後7時30分の時点でCheckout Sessionの作成を終了する必要があり、新規の注文フロー(Checkout Sessionの作成)を午後8時に終了する場合は、Checkout Sessionのexpires_atの時間を午後8時30分に指定する必要があります。

次の例では、「2022/12/01の午後8時に新規の注文フロー(Checkout Sessionの作成)を終了し、作成済みのCheckout Sessionは午後8時30分で期限切れになる」Checkout Sessionを作成します。

import dayjs from 'dayjs'

...

const saleEndTime = dayjs('2022-12-01 20:00:00')
const current = dayjs();

if (current.isAfter(saleEndTime)) {
  throw new Error('タイムセールは終了しました');
}

const sessionExpiresAt = saleEndTime.add(30, 'minutes').unix()

const session = await stripe.checkout.sessions.create({
  line_items: [{
    price: 'price_xxxxx',
    quantity: 1
  }],
  success_url: 'https://stripe.com',
  cancel_url: 'https://stripe.com',
  expires_at: sessionExpiresAt,
  mode: 'payment'
})

このような実装により、顧客がセールの終了時間を過ぎてから注文しようとすると、"タイムセールは終了しました"というエラーメッセージが表示され、その後新規にセッションを作成できなくなります。また、既存のセッションもセール終了30分後に無効となります。

まとめ

このように、Stripe Checkoutを使用してタイムセールや他の時間制限のある決済フローを実装することができます。expires_atパラメータを利用してCheckout Sessionの有効期限を設定し、決済セッションを特定の時間後に自動的に無効化することと、セール終了時間を過ぎたら新規セッションの作成を停止する設定の方法を取り入れることで、任意の時間で注文受付を停止することが可能です。

このような方法は、時間に基づくセール戦略をサポートし、特定の時間帯に商品を販売するといったビジネスのニーズを満たすことができます。これにより、時間制限のあるセールを効果的に実施でき、短期間の販売力を高めることができます。

次のステップ

次のステップとして在庫管理システムとの連携に挑戦してみましょう。在庫管理システムとStripe Checkoutの間に連携を持たせることで、在庫状況を反映したセールを展開したり、在庫切れを即座に反映させたりすることが可能です。

これにより、適切な在庫管理と販売戦略の実施によって、顧客体験を向上させ、売上をさらに増加させることが期待できます。

関連記事・リソース

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0