カード支払いを回収する
Stripe Terminal を使用したカード支払いの回収ができるように、アプリケーションとバックエンドを準備します。
Stripe Terminal で支払いを回収するには、アプリケーションに決済フローを記述する必要があります。Stripe Terminal SDK を使用して、1 つの支払いセッションを表すオブジェクトである PaymentIntent (支払いインテント) を作成して更新します。
Terminal の組み込みは支払いプロセスにおける失敗に対応できるように設計されており、支払いプロセスを複数のステップに分割し、各ステップを安全に再試行できるようになっています。
- PaymentIntent を作成します。
- 決済手段を収集する支払いを自動と手動のどちらでキャプチャーするかを定義できます。
- 支払いを確定します。顧客のカードのオーソリは、SDK が支払いを確定するときに行われます。
- (オプション) 支払いをキャプチャーする
PaymentIntent を作成するクライアント側サーバー側
支払いを回収する最初のステップは、支払いフローを開始することです。顧客がチェックアウトを開始するとき、アプリケーションは PaymentIntent
オブジェクトを作成する必要があります。これは、Stripe での新しい支払いセッションを表します。
クライアント側またはサーバー側で PaymentIntent
を作成できます。
テスト金額を使用して、さまざまな結果を生成してみてください。00
で終わる金額では、支払いが承認されます。
クライアント側
クライアントから PaymentIntent
を作成します。
警告
アプリが Verifone P400 に接続されている場合は、Android SDK から PaymentIntent を作成できません。代わりに、サーバー側で PaymentIntent を作成し、SDK の Terminal.
メソッドを使用して、アプリ内に PaymentIntent を取得する必要があります。
サーバー側
支払いの開始に必要な情報がアプリですぐに利用できない場合は、サーバで PaymentIntent
を作成することができます。
次の例は、サーバで PaymentIntent
を作成する方法を示しています。
Terminal の支払いでは、payment_
パラメータに card_
が含まれている必要があります。
以下のように決済フローを制御できます。
card_
支払いの支払いフローを完全に制御するには、present capture_
をmethod manual
に設定します。これにより、支払いを確定する前に照合ステップを追加できます。- 1 ステップで支払いのオーソリとキャプチャーを行うには、
capture_
をmethod automatic
に設定します。
オーストラリアで決済を受け付けるには、capture_
を automatic
または manual_
に設定する必要があります。詳細については、オーストラリア向けのドキュメントをご覧ください。カナダで Interac の支払いを受け付けるには payment_
に interac_
も含める必要があります。詳細については、カナダ向けのドキュメントをご覧ください。
PaymentIntent
には、個々の PaymentIntent
に固有のキーである client secret が含まれています。client secret を使用するには、これをサーバーで PaymentIntent
から取得し、クライアント側に渡す必要があります。
PaymentIntent
を取得するには、client secret を使用して retrievePaymentIntent
を呼び出します。
PaymentIntent
を取得したら、それを使用して collectPaymentMethod
を呼び出します。
支払い方法を収集する クライアント側
PaymentIntent
を作成したら、次のステップは SDK で決済手段を収集することです。
決済手段を収集するには、アプリをリーダーに接続する必要があります。アプリが collectPaymentMethod
を呼び出した後、接続されたリーダーはカードの提示を待ち受けます。
この方法では、接続されたカードリーダーを使用して暗号化された決済手段のデータを収集し、その暗号化されたデータをローカルの PaymentIntent
に関連付けます。
支払い方法の詳細をオプションで調査する
高度なユースケースでは、提示されたカードの支払い方法の詳細を調査し、オーソリ前に自社のビジネスロジックを実行できます。
CollectConfiguration
で updatePaymentIntent
パラメーターを使用し、PaymentMethod
をサーバー側の PaymentIntent
に関連付けます。このデータは、collectPaymentMethod
レスポンスで返されます。
注
この時点で、カードブランド、口座情報、その他の役立つデータなどの属性にアクセスできます。
注
Stripe は wallet.
属性で示すとおり、取引でモバイルウォレットが使用されたかどうかを検出するよう試みます。ただし、カード発行会社がモバイルウォレットのリーダーによる識別に対応していない場合、この属性は自動入力されないため、正確な検出は保証されません。確定ステップでオーソリが行われた後に、Stripe はネットワークから最新の情報を取得し、wallet.
を確実に更新します。
収集をキャンセルする
プログラムによるキャンセル
Android SDK から返される Cancelable
オブジェクトを使用して、支払い方法の収集をキャンセルできます。
顧客によるキャンセル
取引の setEnableCustomerCancellation
を true に設定すると、スマートリーダーのユーザーにキャンセルボタンが表示されます。
キャンセルボタンをタップすると、現在の取引がキャンセルされます。
イベントを処理する
内蔵ディスプレイのない Stripe M2 などのリーダーを使用して決済手段を収集するときは、アプリが決済手段の収集プロセスのイベントをユーザーに表示できるようにする必要があります。これらのイベントは、ユーザーが支払いを正常に回収するのに役立ちます (カードを再試行する、別のカードを試す、別の読み取り方法を使用するなど)。
取引が開始されると、SDK は ReaderInputOptions
値をアプリのリーダー表示ハンドラに渡し、受け入れ可能な入力の種類 (スワイプ、挿入、タップなど) を示します。アプリの決済 UI で、これらのオプションのいずれかを使用してカードを提示することを求める画面をユーザーに表示します。
取引中に、SDK がアプリに対して、アプリのリーダー表示ハンドラに ReaderDisplayMessage
値を渡すことで、ユーザーに追加のメッセージ (「カードを再試行してください」など) を表示するように要求する場合があります。このメッセージが決済 UI でユーザーに表示されることを確認してください。
注
リーダーがイベントを表示するため、支払い方法の収集プロセスのイベントをアプリケーションからユーザーに表示する必要はありません。取引の支払い方法をクリアするには、リクエストをキャンセルします。
Android のタッチ決済で支払いを回収する
アプリケーション側で支払い回収の準備ができると、Stripe Android SDK がその画面を引き継いで回収プロセスを進めます。支払い方法の収集を呼び出した後は、アプリケーションが実行中のままになります。Android デバイスはカード保有者に全画面のメッセージを表示し、カードまたは NFC ベースのモバイルウォレットを提示するように求めます。カードの読み取りエラーが発生した場合は、再試行を求めるメッセージが表示されます。提示に成功すると、成功のメッセージが表示され、アプリケーションに制御が返されて支払いが確定されます。

支払いの回収
支払いを確定するクライアント側
顧客から決済手段を収集したら、次のステップに進み、SDK で支払いを確定します。支払いを続行する準備ができたら、ステップ 2 の更新後の PaymentIntent
を使用して confirmPaymentIntent
を呼び出します。
- 支払いの手動キャプチャーでは、
confirmPaymentIntent
コールが成功すると、PaymentIntent
のステータスがrequires_
になります。capture - 支払いの自動キャプチャーでは、
PaymentIntent
はsucceeded
状態に移行します。
注
Always confirm PaymentIntents using the Terminal SDK on the client side. Server-side confirmation bypasses critical interactions, such as PIN prompts, and can result in transaction failures.
警告
2 日以内に PaymentIntent を手動でキャプチャーする必要があり、キャプチャーしなければオーソリは期限切れになり、売上は顧客にリリースされます。
失敗に対処する
支払いの確定に失敗した場合、SDK は、更新された PaymentIntent
を含むエラーを返します。アプリケーションでは、PaymentIntent
を確認してエラーの対処方法を決定する必要があります。
PaymentIntent のステータス | 意味 | 解決策 |
---|---|---|
requires_ | 支払い方法が拒否されました | 同じ PaymentIntent を使用して collectPaymentMethod を再度呼び出し、別の決済手段の収集を試みます。 |
requires_ | 一時的な接続の問題 | 同じ PaymentIntent を指定して confirmPaymentIntent を再度呼び出し、リクエストを再試行します。 |
PaymentIntent が nil です | Stripe へのリクエストがタイムアウトし、PaymentIntent のステータスが不明です | 元の PaymentIntent の確定を再試行します。新しい PaymentIntent を作成しないでください。新しく作成すると、カード保有者にとって複数のオーソリとなる可能性があります。 |
タイムアウトが複数回、連続して発生する場合、接続に問題がある可能性があります。アプリがインターネットと通信できることを確認してください。
二重支払いの防止
PaymentIntent
オブジェクトは、Stripe での資金移動を可能にします。1 つの取引を表すには、PaymentIntent
を 1 つ使用します。
カードが (残高不足などのために) 拒否された後、同じ PaymentIntent
を再利用して、顧客が別のカードで再試行できるようにします。
PaymentIntent
を編集する場合は、collectPaymentMethod
を呼び出して、リーダーの支払い情報を更新する必要があります。
Stripe が確定する前に、PaymentIntent
が requires_
ステータスである必要があります。オーソリ済み、キャプチャー済み、キャンセル済みのPaymentIntent
をリーダーで確定することはできません。
支払いをキャプチャーするサーバー側
ステップ 1 の PaymentIntent
の作成時に capture_
を manual
として定義した場合、SDK はオーソリ済みでキャプチャーはされていない PaymentIntent
をアプリケーションに返します。オーソリとキャプチャーの違いについて、詳細を確認してください。
アプリが SDK から確定済みの PaymentIntent
を受信したら、その支払いをキャプチャーするようにアプリからバックエンドに対して通知するようにしてください。バックエンドにエンドポイントを作成し、PaymentIntent
ID を受け付け、それをキャプチャーするように Stripe API にリクエストを送信します。
capture
コールが成功すると、PaymentIntent
のステータスは succeeded
になります。
注
キャプチャーされたプラットフォーム手数料が連結アカウントに対して正確であることを確認するために、支払いを手動でキャプチャーする前にそれぞれの PaymentIntent
を調べ、必要に応じてプラットフォーム手数料を修正します。
支払いを照合する
ビジネスの支払いアクティビティを監視するため、毎日の最後の作業としてサーバで PaymentIntent と内部注文システムを照合することをお勧めします。
PaymentIntent
のステータスが requires_
のままの場合には、以下の 2 つの可能性があります。
顧客のカード明細上の不要なオーソリ
- 原因: ユーザーが取引の途中でアプリの決済フローを中止した
- 解決策:キャプチャーされていない
PaymentIntent
が、サーバーにある完了済みの注文に関連付けられていない場合には、キャンセルできます。キャンセルされたPaymentIntent
を使用して支払いを実行することはできません。
顧客からの売上回収が未完了
- 原因: 支払いをキャプチャーするようにバックエンドに通知する、アプリからのリクエストのエラー
- 解決策:キャプチャーされていない
PaymentIntent
が、サーバにある完了済みの注文に関連付けられており、その注文について他の支払い (現金による支払いなど) を受けていない場合には、この PaymentIntent をキャプチャーできます。
チップを徴収する アメリカのみ
アメリカでは、対象ユーザーは支払いのキャプチャー時にチップを徴収できます。