カード支払いの事前設定
手動でのサーバー側の確定を使用するか、支払い方法を別途提示します。
警告
この場合、支払いの事前設定ガイドに従うことをお勧めします。このガイドは、手動でのサーバー側の確定を使用する必要がある場合、またはお使いのシステムで支払い方法を別に提示する必要がある場合にのみ使用してください。すでに Elements との連携が完了している場合は、Payment Element 移行ガイドをご覧ください。
Setup Intents API を使用すると、初回の支払いなしで顧客のカードを保存することができます。これは、今すぐ顧客をアカウント登録して支払いを設定し、将来顧客がオフラインの際に請求するときに役立ちます。
この組み込みを使用して、継続支払いを設定したり、最終金額が後で (顧客がサービスを受け取った後などに) 決定される 1 回限りの支払いを作成します。
Stripe を設定する
まず、Stripe アカウントが必要です。今すぐ登録してください。
サーバー側
この接続方法では、Stripe API と通信するエンドポイントがサーバー上に必要です。サーバーから Stripe API にアクセスするには、Stripe の公式ライブラリーを使用します。
クライアント側
Stripe Android SDK はオープンソースであり、詳細なドキュメントが提供されています。
To install the SDK, add stripe-android
to the dependencies
block of your app/build.gradle file:
注
SDK の最新リリースおよび過去バージョンの詳細については、GitHub の Releases ページをご覧ください。新しいリリースの公開時に通知を受け取るには、リポジトリのリリースを確認してください。
Stripe の公開可能キーを使用して SDK を設定し、 Application
サブクラスなどで、Stripe API へのリクエストを実行できるようにします。
設定前に Customer を作成するサーバー側
将来の支払いに備えてカードを設定するには、カードを Customer (顧客) に関連付ける必要があります。顧客がビジネスでアカウントを作成する際に、Customer オブジェクトを作成します。Customer オブジェクトを使用すると、支払い方法を再利用したり、複数の支払いを追跡したりできます。
作成に成功すると、Customer オブジェクトが返されます。オブジェクトで顧客の id
を調べて、その値を後で取得できるようにデータベースに保存できます。
これらの顧客は、ダッシュボードの顧客ページで見つけることができます。
SetupIntent を作成するサーバー側
SetupIntent (支払い方法設定インテント) は、将来の支払いに備えて支払い方法を設定するという意図を示すオブジェクトです。
SetupIntent オブジェクトには、client secret が含まれています。これは、お客様のアプリに渡す一意のキーです。client secret により、customer
などの機密情報を非表示にすると同時に、設定の確認や支払い方法の詳細の更新などの一定のアクションをクライアント側で実行できます。client secret を使用すると、クレジットカードネットワークを使ってカード詳細を検証および認証できます。client secret は機密情報ですので、ログに記録したり、URL に埋め込んだり、当該の顧客以外に漏洩することがないようにしてください。
サーバー側
サーバー側で SetupIntent を作成し、その client secret をアプリに返すエンドポイントを作成します。
If you only plan on using the card for future payments when your customer is present during the checkout flow, set the usage parameter to on_session to improve authorization rates.
クライアント側
クライアント側でサーバーの SetupIntent をリクエストします。
カード詳細を収集するクライアント側
顧客が支払いフォームを送信したら、SDK が提供するドロップイン UI コンポーネント、CardInputWidget を使用してカード情報を収集します。このコンポーネントは、カード番号、有効期限、セキュリティコード、郵便番号を収集します。
CardInputWidget
は、リアルタイムで検証と形式の設定を行います。
注意
特にヨーロッパでは、カードの再利用に関する規制があるため、カード詳細を保存して今後のオフセッションの支払いに使用する際は、カードを保存するための許可を取得します。カードをどのように使用するかをユーザーに知らせるテキストを決済フローに含めてください。
カード詳細を取得するには、getPaymentMethodCard
メソッドを呼び出します。収集した情報を新しい PaymentMethodCreateParams と PaymentMethod.
のインスタンスに渡して、ConfirmSetupIntentParams
インスタンスを作成します。
設定を完了するには、現在の Activity を含む SetupIntentParams
オブジェクトを PaymentLauncher confirm に渡します。SetupIntent は、顧客が使用しているカード情報がネットワーク上で有効であることを検証します。ただし自動検証が常に行われるわけではありません。詳細は、請求しないでクレジットカードの有効性を確認するでご確認ください。また PaymentLauncher#confirm()
を呼び出す時点で無効になっている可能性があるため、作成から長時間が経過した未処理の SetupIntents を保持しないでください。
一部の決済手段では、支払いを完了するために追加の認証手順が必要です。SDK は、支払いの確認と認証のフローを管理しますが、これには認証に必要な追加の画面の表示が含まれる場合があります。3D セキュア認証と認証体験のカスタマイズについて、詳細は Android での 3D セキュア認証のサポートを参照してください。
フローの結果は、指定されたコールバック (ここでは onPaymentResult
) を介して呼び出し元のアクティビティに返されます。PaymentLauncher によって返される PaymentResult には、次のタイプがあります。
Completed
: 確定または認証に成功したCanceled
: 必要な認証が顧客によってキャンセルされたFailed
: 認証の試行が失敗し、throwable によって理由が提供される
以上でカード詳細を収集して認証リクエストを処理するフローができました。認証プロセスをテストするには、任意のセキュリティコード、郵便番号、および有効期限を指定して、テストカード 4000 0025 0000 3155
を使用します。
SetupIntent が成功すると、(setupIntent.
で) 生成された PaymentMethod ID が、指定された Customer に保存されます。
保存されたカードに後で請求するサーバー側
顧客にオフセッションで請求する準備ができたら、Customer ID と PaymentMethod ID を使用して、PaymentIntent を作成します。請求するカードを見つけるには、Customer に関連付けられた PaymentMethod のリストを作成します。
Customer ID と PaymentMethod ID を取得したら、支払いの金額と通貨を使用して PaymentIntent を作成します。下記のパラメータを設定し、オフセッションの支払いを行います。
- off_session を
true
に設定して、支払いの実行時に顧客が決済フローに存在しないことを示します。これにより、認証が必要な場合は PaymentIntent からエラーが返されます。 - PaymentIntent の confirm プロパティの値を
true
に設定します。これにより、PaymentIntent が作成されると直ちに確定されます。 - payment_method を PaymentMethod の ID に設定し、customer を Customer の ID に設定します。
PaymentIntent の status プロパティを調べ、支払いが成功したことを確認します。支払いの試行が成功した場合、PaymentIntent のステータスが succeeded
になり、オフセッションの支払いが完了します。
リカバリフローを開始する
PaymentIntent に他のステータスがある場合、支払いは成功せず、リクエストは失敗します。支払いを完了するために (メール、テキスト、プッシュ通知などで) アプリケーションに戻るように顧客に通知します。支払いが最初に失敗した理由を示し、顧客が再試行できるようにするリカバリフローをアプリで作成することをお勧めします。
In your recovery flow, retrieve the PaymentIntent through its client secret. Check the PaymentIntent’s lastPaymentError to inspect why the payment attempt failed. For card errors, you can show the user the last payment error’s message. Otherwise, you can show a generic failure message.
顧客に再試行してもらう
保存されたカードを更新または削除し、支払いを再試行するオプションをリカバリフローで顧客に提供します。最初の支払いを受け付けるのと同じ手順に従いますが、1 つ異なる点があります。元の失敗した PaymentIntent を確定するために新しい支払いインテントを作成するのではなく、その client secret を再利用します。
認証が必要なために支払いが失敗した場合は、新しい支払い方法を作成するのではなく、既存の PaymentMethod を使用して再試行してください。
組み込みをテストする
ここまでで、以下を実行する組み込みが完成しています。
- SetupIntent を使用して、顧客に請求することなくカード詳細を収集・保存する
- オフセッションでカードに請求し、支払い拒否と認証リクエストを処理するリカバリーフローが備わっている
この組み込みの稼働準備ができていることを確認するために使用できるいくつかのテストカードがあります。任意のセキュリティコード、郵便番号、および今後の有効期限を指定して使用します。
番号 | 説明 |
---|---|
成功し、支払いがすぐに処理されます。 | |
初めての購入には認証が必要ですが、カードに setup_ の設定があれば、以降の支払い (オフセッションの支払いを含む) に成功します。 | |
初めての購入には認証が必要で、以降の支払い (オフセッションの支払いを含む) には失敗し、支払い拒否コード authentication_ が返されます。 | |
初めての購入には認証が必要で、以降の支払い (オフセッションの支払いを含む) には失敗し、支払い拒否コード insufficient_ が返されます。 | |
(初めての購入を含め) 常に失敗し、支払い拒否コード insufficient_ が返されます。 |
テストカードの全一覧をご覧ください。