支払いステータスの更新
支払いステータスを監視および確認して、支払いの成功と失敗に対応できるようにします。
PaymentIntents は、顧客が実行したアクションまたは支払い方法に応じて更新されます。組み込みでは PaymentIntent を確認することで支払いプロセスのステータスを特定できるため、お客様はビジネスアクションを実行したり、さらなる介入が必要な状態に対応できます。
Stripe ダッシュボードを使用して、支払いの成功などの支払いのステータスをメールで送信するようにアカウントを設定することもできます。それには、ユーザー設定でメール通知を変更します。
クライアントで PaymentIntent ステータスを確認する
confirmCardPayment 関数を使用してクライアントで支払いを完了する際に、返される PaymentIntent を確認して現在のステータスを特定できます。
(async () => { const {paymentIntent, error} = await stripe.confirmCardPayment(clientSecret); if (error) { // Handle error here } else if (paymentIntent && paymentIntent.status === 'succeeded') { // Handle successful payment here } })();
以下に、confirmCardPayment
関数を使用する際に想定される結果を示します。
イベント | 発生内容 | 想定される組み込み |
---|---|---|
PaymentIntent で解決 | 顧客が決済ページで支払いを完了した | 支払いが成功したことを顧客に通知する |
エラーで解決 | 決済ページで顧客の支払いが失敗した | エラーメッセージを表示して、顧客に支払いを再度実行するよう促す |
confirmCardPayment
によって返される Promise は、支払いプロセスが完了したか、エラーにより失敗したときに解決されます。正常に完了して PaymentIntent が返されると、ステータスは常に succeeded
(または、後でキャプチャーする場合は、requires_
) になります。支払いに認証などの追加のステップが必要な場合、そのステップが完了するかタイムアウトになるまで、Promise は解決されません。
confirmCardPayment を使用せずにクライアントで PaymentIntent ステータスを確認する
confirmCardPayment
関数を使用せずに PaymentIntent のステータスを確認するには、retrievePaymentIntent 関数を使用して、クライアントシークレット を渡すことにより、個別にステータスを取得します。
以下に、確定後の PaymentIntent の想定されるステータスを示します。
発生内容 | 想定される PaymentIntent ステータス |
---|---|
顧客が決済ページで支払いを完了した | succeeded |
顧客が決済フローを完了しなかった | requires_ |
決済ページで顧客の支払いが失敗した | requires_ |
PaymentIntent のステータスの詳細をご覧ください。
(async () => { const {paymentIntent} = await stripe.retrievePaymentIntent(clientSecret); if (paymentIntent && paymentIntent.status === 'succeeded') { // Handle successful payment here } else { // Handle unsuccessful, processing, or canceled payments and API errors here } })();
Webhook で PaymentIntent を監視する
Stripe は、PaymentIntent のステータスが変化した時にサーバーに Webhook イベントを送信して通知することできます。この機能は、商品やサービスのフルフィルメントを実行する時期の決定などに利用できます。
顧客が支払いの完了後、フルフィルメントプロセスの開始前にページを離れる可能性があるため、クライアント側で注文のフルフィルメントを処理しないようにしてください。クライアント側でフルフィルメントを開始するのではなく、Webhook を使用して payment_
イベントを監視し、その完了を非同期で処理します。
注意
技術的には、Webhook の代わりにポーリングを使用して、非同期の操作によって発生した変化を監視することも可能です。その場合、そのステータスを確認するために PaymentIntent の取得を繰り返します。ただし、この方法は信頼性がかなり低く、レート制限の問題が発生する可能性があります。Stripe では API リクエストのレート制限を実施しているため、ポーリングを使用する際には注意が必要です。
Webhook イベントを処理するには、サーバーにルートを作成し、ダッシュボードで対応する Webhook エンドポイントを設定します。Stripe は、支払いが成功した場合は payment_
イベントを、支払いが失敗した場合は payment_
イベントを送信します。
Webhook ペイロードには PaymentIntent オブジェクトが含まれます。次の例は、この 2 つのイベントの処理方法を示しています。
支払いに失敗した場合、PaymentIntent の last_
プロパティを調査することで詳細を確認できます。顧客に支払いが完了していないことを通知し、別の支払い方法で再実行するように促すことができます。同じ PaymentIntent を再利用して顧客の購入を引き続き追跡します。
特定の Webhook イベントを処理する
次のリストは、Webhook イベントの処理方法を示しています。
イベント | 説明 | 次のステップ |
---|---|---|
processing | 顧客の支払いは Stripe に正常に送信されました。これは支払い成功の通知が遅延する支払い方法にのみ適用できます。 | 開始された支払いが成功するか、失敗するかの結果を待ちます。 |
succeeded | 顧客の支払いが成功しました | 購入された商品やサービスのフルフィルメントを実行します |
amount_ | 顧客の支払いがオーソリされ、キャプチャーが可能になりました | 支払いに利用できる売上をキャプチャします |
payment_ | カードネットワークから顧客の支払いが拒否されたか、有効期限が切れています | 顧客にメールまたはプッシュ通知を送信して、別の支払い方法を指定するよう促します |
Webhook をローカルでテストするには、Stripe CLI を使用できます。Stripe CLI をインストールすると、サーバーにイベントを転送できるようになります。
stripe listen --forward-to localhost:4242/webhook Ready! Your webhook signing secret is '{{WEBHOOK_SIGNING_SECRET}}' (^C to quit)
Webhook の設定についてもっと知る。
PaymentIntent で支払いを識別する
顧客からの支払いを回収しようとしたときに、PaymentIntent によって Charge (支払い) が作成されます。最新の支払いの ID を取得するには、PaymentIntent の latest_charge プロパティを調べます。
失敗した支払いも含めて PaymentIntent に関連するすべての支払いを表示するには、すべての支払いをリストして、payment_
パラメーターを指定します。
次のアクションを処理する
支払い方法によっては、支払いプロセスの完了に、認証などの追加ステップが必要になります。Stripe.js は PaymentIntent の確定時に追加ステップを自動的に処理しますが、高度な実装では手動での処理が必要になることもあります。
PaymentIntent の next_action プロパティーは、支払いを完了するために実装で処理する必要がある次のステップを示します。想定される次のアクションのタイプは、支払い方法ごとに異なる可能性があります。想定される次のアクションの詳細リストについては、API ドキュメントをご覧ください。
必要な次のアクションの処理方法について、詳細は支払い方法のドキュメントをご覧ください。