支払いを行わずに顧客の決済手段を保存する
決済手段を保存して後で請求を行う方法をご紹介します。
Checkout Sessions API in setup
mode を使用すると、初回の決済なしで顧客の決済の詳細を保存することができます。これは、今すぐ顧客をユーザー登録して決済を設定し、将来顧客がオフラインのときに Payment Intents API を使用して請求する場合に役立ちます。
この導入を使用して、継続課金を設定したり、最終金額が後で (顧客がサービスを受け取った後などに) 決定される 1 回限りの決済を作成します。
カード提示取引
カード提示取引 (Stripe Terminal による カード詳細の収集 など) では、決済手段の保存に別のプロセスが使用されます。
法令遵守
顧客の決済の詳細を保存する際、適用されるすべての法律、規制、ネットワークの規則に準拠する責任があります。これらの要件は通常、以降の購入時の決済フローでの顧客の決済手段を提示する、顧客がウェブサイトやアプリを使用していないときに請求するなど、将来に備えて顧客の決済手段を保存する場合に適用されます。決済手段の保存をどのように計画しているかを示す規約をウェブサイトやアプリに追加し、顧客がオプトインできるようにします。
決済手段を保存する場合、規約に記載された特定の用途にのみ使用できます。顧客がオフラインであるときに決済手段に請求して、以降の購入に備えたオプションとして保存する場合は、この特定の用途について顧客から明示的に同意を収集する必要があります。たとえば、同意を収集するために「今後の使用に備えて決済手段を保存する」チェックボックスを使用します。
顧客がオフラインのときに請求を行うには、規約に以下の内容を含める必要があります。
- 指定された取引で顧客の代理として単独の決済または一連の決済を開始することを許可するという、顧客の同意。
- 予期される決済時期と決済頻度 (たとえば、請求が予定されている分割払いなのか、サブスクリプションの決済なのか、あるいは予定されていないトップアップなのか)。
- 決済金額の決定方法。
- 決済手段をサブスクリプションサービスに使用する場合は、キャンセルに関するポリシー。
これらの規約に関する顧客の書面による同意の記録を必ず保管してください。
注
手動でのサーバー側の確定を使用する必要がある場合、または導入で決済手段を別途提示する必要がある場合は、代替方法のガイド を参照してください。
Customer を作成するサーバ側
将来の支払いに備えて支払い方法を設定するには、その手段を Customer (顧客) に関連付ける必要があります。顧客がビジネスでアカウントを作成する際に、Customer
オブジェクトを作成します。Customer
オブジェクトを使用すると、支払い方法を再利用したり、複数の支払いを追跡したりできます。
セットアップモードを使用サーバ側
mode=setup を指定して Checkout Session を作成します。
決済手段を Customer に関連付けるサーバ側
既存の顧客と Checkout Session を作成していない場合は、PaymentMethod の ID を使用して顧客に決済手段を 関連付け ます。
それ以外の場合は、Checkout Session の作成時に指定した顧客に決済手段が自動的に関連付けられます。
決済手段を取得するサーバ側
顧客が Checkout Session を正常に完了したら、checkout.session.completed webhook を処理します。webhook で Session オブジェクトを取得し、以下を実行します。
- Checkout Session 中に作成された SetupIntent ID である setup_intent キーの値を取得します。
- SetupIntent ID を使用して、SetupIntent オブジェクトを 取得 します。返されるオブジェクトには payment_method ID が含まれ、これを次のステップで顧客に関連付けることができます。
Webhook の設定 についてもっと知る。
後で決済手段に請求するサーバ側
PaymentMethod を顧客に関連付けると、PaymentIntent を使用して off-session の決済を実行できます。
- customer を顧客 ID、payment_method を決済手段 ID に設定します。
- 決済試行時に顧客が決済フローにいないと、カード発行会社、銀行、その他の決済機関などのパートナーによる認証リクエストを実行できないことを off_session を
true
に設定して示します。決済フロー中にパートナーが認証をリクエストした場合、Stripe は前回の on-session 取引の顧客情報を使用して免除をリクエストします。免除の条件が満たされていない場合、PaymentIntent はエラーを返すことがあります。 - PaymentIntent の confirm プロパティの値を
true
に設定します。これにより、PaymentIntent の作成時にすぐに確定が行われます。
決済が失敗すると、リクエストも 402 HTTP ステータスコードで失敗し、PaymentIntent のステータスが requires_payment_method になります。アプリケーションに戻って (メールやアプリ内通知などで) 新しい Checkout Session に移動して別の決済手段を選択するよう顧客に通知する必要があります。