OXXO での支払いを受け付ける
メキシコで一般的な支払い方法である OXXO を受け付ける方法をご紹介します。
注意
サーバー側での手動確定を使用する必要がある場合、またはお使いの実装で決済手段を別途表示する必要がある場合を除き、決済を受け付けるガイドに従うことをお勧めします。すでに Elements との連携が完了している場合は、Payment Element 移行ガイドをご覧ください。
アプリで OXXO を受け付けるには、Webview で OXXO の取引の詳細を表示します。顧客は、OXXO コンビニエンスストアで、生成された番号が記載された取引の詳細を提示し、現金で支払います。支払いが完了すると、Stripe からお客様に通知が送られます。
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 へのリクエストを実行できるようにします。
PaymentIntent を作成するサーバー側クライアント側
PaymentIntent (支払いインテント) は、顧客から支払いを回収する意図を表すオブジェクトで、決済プロセスのライフサイクルの各段階を追跡します。
サーバー側
金額と mxn
通貨 (OXXO は他の通貨には対応していません) を指定して、サーバーで PaymentIntent を作成します。すでに Payment Intents API を使用したシステムがある場合は、oxxo
を PaymentIntent
の支払い方法タイプのリストに追加します。
その他の支払い方法オプション
PaymentIntent
の支払い方法オプションでオプションの expires_
パラメーターを指定して、OXXO の支払い票の有効期限が切れるまでの日数を設定できます。たとえば、月曜日に OXXO の支払い票を作成し、expires_
を 2 に設定した場合、OXXO の支払い票は、America/Mexico_City (UTC-6) 時間で水曜日の 23:59 に有効期限が切れます。expires_
パラメーターは 1 日から 7 日まで設定できます。デフォルトは 3 日です。
クライアント側
クライアント側で、サーバーの PaymentIntent をリクエストし、その client secret を保存します。
支払い方法の詳細を収集するクライアント側
アプリで、必要とされる次の請求詳細を顧客から収集し、その請求詳細を使用して PaymentMethodCreateParams を作成します。
フィールド | 値 |
---|---|
name | 顧客の氏名。姓と名はそれぞれ 2 文字以上である必要があります。 |
email | 顧客のメールアドレス。 |
Stripe に支払いを送信するクライアント側
ステップ 2 で作成した PaymentIntent から client secret を取得し、PaymentLauncher confirm を呼び出します。これにより、OXXO の支払いコードを表示する Webview が示されます。その後、支払い結果とともに、onPaymentResult
が呼び出されます。
オプション: 顧客に取引の詳細へのリンクをメールで送信する
Stripe は、OXXO の取引の詳細が正常に作成されると、payment_intent.requires_action イベントを送信します。顧客に取引の詳細のリンクをメールで送信する必要がある場合は、イベントの受信時に PaymentIntent (支払いインテント) を取得することで、リンクを取得できます。payment_intent.next_action.oxxo_display_details の hosted_
フィールドには、取引の詳細へのリンクが含まれています。
オプション: 取引の詳細をカスタマイズする
Stripe では、ブランディング設定ページで、顧客に表示される UI をカスタマイズできます。
取引の詳細には、以下のブランド設定を適用できます。
- アイコン: ブランド画像と公開ビジネス名
- アクセント—番号コピーボタンの色として使用されます
- ブランドカラー: 背景色として使用されます
支払い後のイベントを処理するサーバー側
OXXO は遅延通知型の支払い方法であるため、売上はすぐには利用可能になりません。顧客は決済直後に OXXO コンビニエンスストアで OXXO の支払いを行わない場合があります。
Stripe は、支払われた OXXO の支払いごとに、翌営業日 (メキシコの祝日を除く月曜日から金曜日) に payment_intent.succeeded イベントを送信します。ダッシュボードを使用するか、Webhook ハンドラーを構築して、これらのイベントを受信し、アクション (顧客への注文確認メールの送信、データベースへの売上の記録、配送ワークフローの開始など) を実行します。
有効期限日を過ぎると、PaymentIntent のステータスは processing
に移行し、顧客は期限切れの OXXO の支払い票に対する支払いを行うことができなくなります。OXXO の支払い票が有効期限日の 23:59 America/Mexico_City (UTC-6) より前に支払われなかった場合、Stripe は有効期限日から 10 日以内に payment_intent.payment_failed イベントを送信します (ほとんどの場合、このイベントは 7 日以内に送信されます)。たとえば、OXXO の支払い票の有効期限日が 9 月 1 日の場合、このイベントは遅くとも 9 月 10 日までに送信されます。
イベント | 説明 | 次のステップ |
---|---|---|
payment_ | OXXO の支払い票が正常に作成されました。 | 顧客が OXXO で支払うのを待ちます。 |
payment_ | 顧客は OXXO の支払いができなくなりました。 | 支払いの成功、または失敗を待ちます。 |
payment_ | 顧客は有効期限が切れる前に OXXO の支払い票に対する支払いを行いました。 | 顧客が購入した商品またはサービスのフルフィルメントを行います。 |
payment_ | 顧客が有効期限までに OXXO の支払い票に対する支払いを行いませんでした。 | Contact the customer through email or push notification and request another payment method. |
イベントを受信し、ビジネスアクションを実行する
手動
Stripe ダッシュボードを使用して、Stripe のすべての支払いの確認、メール領収書の送信、入金処理、失敗した支払いの再試行を実行します。
カスタムコード
Webhook ハンドラを構築してイベントをリッスンし、非同期型のカスタムの決済フローを作成します。Stripe CLI を使用して、ローカルで Webhook の組み込みのテストとデバッグを行います。
構築したシステムをテストする
サンドボックスでは、Stripe# confirmPayment() を呼び出すときに PaymentMethod.BillingDetails#email を次の値に設定することで、さまざまなシナリオをテストできます。
メールアドレス | 説明 |
---|---|
| 顧客が 3 分後に支払い、約 3 分後に 例: fulano@test.com |
| 顧客が即座に支払う OXXO をシミュレーションし、 例: succeed_immediately@test.com |
| 顧客が支払う前に期限切れになり、 支払い方法オプションで 例: expire_immediately@test.com |
| 顧客が支払う前に期限切れになり、 支払い方法オプションで 例: expire_with_delay@test.com |
| 顧客が支払う前に期限切れになり、 例: fill_never@test.com |
有効期限とキャンセル
OXXO vouchers expire after the expires_
UNIX timestamp and a customer can’t pay an OXXO voucher once it has expired. OXXO vouchers can’t be canceled before expiration.
OXXO 支払い票の有効期限が切れると、PaymentIntent のステータスは requires_
に変わります。この時点では、別の支払い方法を指定して PaymentIntent を確定するか、キャンセルすることができます。