カードの基本的な組み込みを移行する
カード認証時に発生する銀行からのリクエストを処理できる実装に移行します。
銀行認証なしのカード支払いのガイドに沿って作成された支払いは、銀行が顧客に購入の認証を求めると拒否されます。
以下のダッシュボードのように、支払いの失敗が多く表示されるようになったり、または API で requires_
エラーコードが確認されるようになった場合、これらの支払いを拒否するのではなく、支払いを処理するために基本の組み込みをアップグレードします。
このガイドを使用して、以前のガイドに沿って構築された実装のアップグレード方法をご紹介します。ここでは、モーダルを表示して顧客に支払いの認証を促すサーバーとクライアントのコードを追加します。
注
この組み込みの完全なサンプルは、GitHub でご覧ください。
支払いに認証が必要かどうか確認するサーバー側
PaymentIntent を作成するサーバー上のエンドポイントに 2 つの変更を加えます。
- error_on_requires_action パラメーターを削除して、認証を必要とする支払いが再び失敗しないようにします。代わりに、PaymentIntent のステータスが
requires_
に変化します。action confirmation_
パラメーターを追加して、認証リクエストを処理した後に、支払いを再度 (手動で) 明示的に確定することを示します。method
次に、「レスポンス生成」関数を更新して、エラーを返すのではなく、requires_
状態を処理します。
顧客に認証を行うように依頼します。クライアント側
次に、クライアント側のコードを更新し、Stripe に対して、顧客の認証が必要な場合にモーダルを表示するように指示します。
PaymentIntent のステータスが requires_
になったら、stripe.handleCardAction を使用します。成功すると、PaymentIntent のステータスが requires_
になります。次にサーバーで PaymentIntent を再度確認して支払いを完了する必要があります。
const handleServerResponse = async (responseJson) => { if (responseJson.error) { // Show error from server on payment form } else if (responseJson.requiresAction) { // Use Stripe.js to handle the required card action const { error: errorAction, paymentIntent } = await stripe.handleCardAction(responseJson.clientSecret); if (errorAction) { // Show error from Stripe.js in payment form } else { // The card action has been handled // The PaymentIntent can be confirmed again on the server const serverResponse = await fetch('/pay', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ payment_intent_id: paymentIntent.id }) }); handleServerResponse(await serverResponse.json()); } } else { // Show success message } }
PaymentIntent を再度確定するサーバ側
前回使用したものと同じエンドポイントを使用し、PaymentIntent を再度確定して支払いを完了し、注文を処理します。1 時間以内に再度確定しないと、支払いの試行は失敗し、取引は requires_
に戻ります。
組み込みをテストする
テスト環境でテストカードを使用し、お客様の組み込みが正しくアップグレードされているかどうか確認してください。Stripe は、テスト環境のモーダル内でテスト用の認証ページを表示しますので、ここで認証の成功や失敗をシミュレーションできます。本番環境では、モーダルに表示される UI は銀行によってコントロールされます。
番号 | 説明 |
---|---|
成功し、支払いがすぐに処理されます。 | |
常に支払い拒否コード insufficient_ で失敗します。 | |
認証を必要とします。この組み込みでは、authentication_ という拒否コードで失敗します。 |