既存の顧客の支払い
顧客がオンセッションの間に既存の決済手段に請求する方法をご紹介します。
既存の決済手段の表示方法を完全に管理するには、Direct APIの実装を使用してください。
決済手段を表示クライアント側サーバー側
allow_ パラメーターを指定して list Payment Method エンドポイントを呼び出し、顧客の再利用可能な決済手段を取得します。
API レスポンスデータを使用して、独自の UI に支払い方法を表示し、顧客が選択できるようにします。
オプション追加の保存された支払い方法を表示するサーバー側
法令遵守
顧客の支払い情報を保存する際には、適用されるすべての法律、規制、ネットワークルールを遵守する責任を貴社が負うものとします。将来の購入時に過去の決済手段を顧客に表示する場合は、将来の購入に再利用するために決済手段の詳細を保存することの同意をあらかじめ得るようにしてください。
デフォルトでは、always allow redisplay に設定された支払い方法のみ表示されます。
Checkout セッション中に Apple Pay や Google Pay を再利用することはできないため、これらの支払い方法は保存済みオプションの一覧には表示されません。Checkout セッションが有効なたびに、Google Pay や Apple Pay の UI および Payment Request ボタンの UI を表示する必要があります。
Checkout セッションに他の再表示用の値を含めるか、支払い方法の allow_ 設定を always に変更することで、他の保存済み支払い方法を表示できます。
PaymentIntent を作成サーバー側
PaymentIntent を作成して、顧客が選択した決済手段で請求を試みます。
API コールが 402 レスポンスで失敗した場合は、支払いが拒否されたことを意味します。再試行するか、別の決済手段を試すように顧客に依頼します。
PaymentIntent ステータスを確認クライアント側サーバー側
PaymentIntent が正常に作成されたとして、status を確認します。
succeededは、顧客が想定どおりに請求されたことを示します。顧客に成功のメッセージを表示します。requires_は、3D セキュアによる認証など、追加のアクションを求める必要があることを示します。フロントエンドでaction handleNextActionを呼び出し、顧客が実行する必要があるアクションをトリガーします。
const { error, paymentIntent } = await stripe.handleNextAction({ clientSecret: "{{CLIENT_SECRET}}" }); if (error) { // Show error from Stripe.js } else { // Actions handled, show success message }
支払い後のイベントを処理サーバー側
支払いが完了すると、Stripe は payment_intent.succeeded イベントを送信します。ダッシュボードの Webhook ツールを使用するか Webhook のガイドに従ってこれらのイベントを受信し、顧客への注文確認メールの送信、データベースでの売上の記録、配送ワークフローの開始などのアクションを実行します。
クライアントからのコールバックを待つのではなく、これらのイベントをリッスンします。クライアントでは、コールバックが実行される前に顧客がブラウザーのウィンドウを閉じたり、アプリを終了する場合、また悪意を持つクライアントがレスポンスを不正操作する場合もあります。非同期型のイベントをリッスンするよう組み込みを設定すると、単一の組み込みで複数の異なるタイプの支払い方法を受け付けることができます。
Payment Element を使用して支払いを回収する場合は、payment_ イベントのほかにこれらのイベントを処理することをお勧めします。
| イベント | 説明 | アクション |
|---|---|---|
| payment_intent.succeeded | 顧客が正常に支払いを完了したときに送信されます。 | 顧客に注文の確定を送信し、顧客の注文のフルフィルメントを実行します。 |
| payment_intent.processing | 顧客が正常に支払いを開始したが、支払いがまだ完了していない場合に送信されます。このイベントは、多くの場合、顧客が口座引き落としを開始するときに送信されます。その後、payment_ イベント、また、失敗の場合は payment_ イベントが送信されます。 | 顧客に注文確認メールを送信し、支払いが保留中であることを示します。デジタル商品では、支払いの完了を待たずに注文のフルフィルメントを行うことが必要になる場合があります。 |
| payment_intent.payment_failed | 顧客が支払いを試みたが、支払いに失敗する場合に送信されます。 | 支払いが processing から payment_ に変わった場合は、顧客に再度支払いを試すように促します。 |