Stripeで支払いを処理する際に利用するPayment Intentでは、決済時に利用したカード情報を保存することができます。
これによって、ECサイトでの2回目以降の購入処理や、「手付金を請求し、後で残額を請求する」ビジネスモデルなどへの対応が可能になります。
支払い情報を保存するには、setup_future_usage: 'off_session'
を設定しましょう。
const pi = await stripe.paymentIntents.create({
payment_method_types: ['card'],
+ setup_future_usage: 'off_session',
amount: 120,
currency: 'jpy',
});
「保存できない」支払い方法
Stripeがサポートしている決済方法の中には、支払い情報を保存して次回以降の決済に利用することができないものも存在します。
例えばコンビニ決済は、2回目以降の注文でも顧客がコンビニで支払いを完了させる必要があるため、利用することができません。
const pi = await stripe.paymentIntents.create({
- payment_method_types: ['card'],
+ payment_method_types: ['card', 'konbini'],
setup_future_usage: 'off_session',
amount: 120,
currency: 'jpy',
});
そのため、保存できない支払い情報が含まれたPayment Intentを作成しようとすると、以下のエラーが発生します。
StripeInvalidRequestError: `setup_future_usage` cannot be used with one or more of the values you specified in `payment_method_types`. Please remove `setup_future_usage` or remove these types from `payment_method_types`: ["konbini"].
保存できない支払い方法も混えて処理する方法
「保存できない決済方法もサポートしつつ、カードの情報は保存したい」ケースでは、setup_future_usage
の設定場所を以下のように変更しましょう。
const pi = await stripe.paymentIntents.create({
payment_method_types: ['card', 'konbini'],
- setup_future_usage: 'off_session',
amount: 120,
currency: 'jpy',
+ payment_method_options: {
+ card: {
+ setup_future_usage: 'off_session',
+ },
+ },
});
payment_method_options
側で、カード決済の時のみ保存する設定ができます。
こちらのコードであれば、APIがエラーを返さず、PaymentIntentを作成することができます。
これによって、保存できない決済情報も処理するためだけに、PaymentIntentを複数作成する必要がなくなります。
参考記事
[PR] Stripe開発者向け情報をQiitaにて配信中!
- [Stripe Updates]:開発者向けStripeアップデート紹介・解説
- ユースケース別のStripe製品や実装サンプルの紹介
- Stripeと外部サービス・OSSとの連携方法やTipsの紹介
- 初心者向けのチュートリアル(予定)
など、Stripeを利用してオンラインビジネスを始める方法について週に2〜3本ペースで更新中です。