オフラインでカード支払いを回収するベータ
インターネット接続の利用が断続的または限定的であるか、まったく利用できない状態でカード支払いを回収します。
Terminal SDK を使用すると、アプリケーションではネットワーク接続がなくてもモバイルリーダーを使用して 支払いの回収を続行できます。
警告
オフラインで実行するときは、販売時に決済情報が収集され、接続の回復後にのみオーソリが試行され、支払いが転送されます。ユーザーであるお客様が取引の支払い拒否リスクのすべての責任を負います。カード発行会社がオフライン取引を拒否した場合、売上を回収する方法はなく、すでに提供した商品やサービスへの顧客の支払いを受け取れなくなることがあります。
カード発行会社による拒否を減らすため、以下のことが推奨されます。
- できる限り早急にインターネット接続を再確立して、支払いを Stripe に記録します。
- 所定の金額を超える場合は取引を制限します。
- Fail all offline payments if the SDK has stored a set of transactions whose sum exceeds a certain amount.
オフライン中に決済を回収する
オフライン決済の手順は、オンライン決済と同じで、決済の作成、回収、処理、およびキャプチャーが含まれます。このプロセスのどの段階でも、デバイスをオンラインからオフラインにできます。
- オフラインモードを有効にする
- オフライン中にリーダーに接続する
- オフラインイベントを処理する
- オフライン中に PaymentIntent を作成する
- 支払い方法を収集する
- 支払いを確定する
- 支払いが転送されるまで待つ
- 支払いをキャプチャーする
- オフライン支払いを調べる
オフラインモードを有効にする
オフラインモードを使用するには、アプリケーションが Terminal iOS SDK のバージョン 3.
以降を使用している必要があります。
Use a Configuration object to enable offline mode for the BBPOS Chipper 2X BT, Stripe Reader M2 or BBPOS WisePad 3 devices at your Location
.
After you enable offline mode on a Configuration
object, you can assign it to a Location
. You can also enable offline mode by default for all Locations
by updating the default Configuration
object for your account. Configuration API changes can take several minutes to propagate to your SDK and reader, and require you to disconnect from and reconnect to your reader to take effect.
オフライン中にリーダーに接続する
オンラインに接続した後、SDK は必要な Location
情報をローカルに保存します。後続のオフライン接続では、その Location
に保存された設定情報が使用されます。
オフライン時にリーダーに接続するには、直前の 30 日以内のオンライン時に、あらかじめ同じ Location
の同じタイプのモバイルリーダーのいずれかに接続して、その期間にリーダーのソフトウェアを更新しておく必要があります。オフライン時にこれらの要件を満たすことなくリーダーに接続しようとすると、リクエストはエラーで失敗します。
エラー | 解決策 |
---|---|
The SDK isn’t connected to the internet | Make sure the Location you’re using is configured for offline mode. Otherwise, if your Location is properly configured, your POS hasn’t previously connected to any readers while online. You should first connect to any reader while online, and then connect to a reader of the same type while offline. |
選択したリーダーをオフラインでの支払い回収に使用するには、ソフトウェアの更新が必要です。 | リーダーのソフトウェアが 30 日以上更新されていません。オンライン中にリーダーに接続して更新します。 |
選択したリーダーをオフラインでの支払い回収に使用するには、この場所でオンラインのペアリングを行う必要があります。 | POS がこれまでオンライン中に接続していないタイプのリーダーに接続しようとしています。まずオンライン中に、このリーダーまたは同じタイプのリーダーに接続する必要があります。または、オフライン中に接続する場合は、以前オンライン中に POS が接続していたタイプのリーダーに接続できます。 |
アプリケーションを再インストールするか、SDK のディスクストレージを消去する操作を実行した場合、SDK が保存している未転送の決済がすべて失われます。取り返しのつかないアクションを実行する前に、保存されている決済がないことを確認してください。
オフラインイベントを処理するクライアント側
OfflineDelegate
プロトコルを実装し、それを Terminal に渡してオフライン関連のイベントをアプリケーションに通知します。決済をオフラインで回収する前に OfflineDelegate
を設定する必要があります。
Terminal.
をクエリして、SDK の現在のネットワークステータスを確認することもできます。
SDK は、ネットワーク状態がオフラインでも決済を転送しようとします。言い換えると、SDK のネットワーク状態がオフラインでも、接続トークンを提供するように求めるリクエストを接続トークンプロバイダーが受け取る可能性があります。決済の回収中、ネットワーク状態によって、SDK が決済をオンラインで処理するか、すぐに決済を保存するかが決まります。
オフライン中に PaymentIntent を作成するクライアント側
オフラインでの実行をサポートするには、SDK の createPaymentIntent
を使用して PaymentIntent オブジェクトを作成する必要があります。
While operating offline, PaymentIntent
objects have a null stripeId
. We recommend adding a custom identifier to the PaymentIntent’s metadata to help reconcile PaymentIntent
objects created offline.
Within your OfflineDelegate.
callback, you can use your identifier to correlate offline payments with payments that are successfully forwarded to Stripe.
オフライン中のリスク管理
Terminal.
は、CreateConfiguration
パラメーターを受信します。デフォルトでは、オフラインで実行している場合は、Terminal SDK にはすべてのオフライン決済が保存され、接続の復旧時に Stripe のバックエンドに転送されます。オフラインでの操作時に現在の取引を失敗させるには、offlineBehavior
に REQUIRE_
を指定して CreateConfiguration
オブジェクトを渡します。一定の金額を超える取引を拒否できる他、 SDK に合計額が一定の金額を超える取引が保管されている場合には、すべてのオフライン取引を拒否することができます。
SDK では、リスクを管理しやすいように、次の 2 つのプロパティーを公開しています。
Terminal.
offlineStatus. sdk. offlinePaymentsCount Terminal.
offlineStatus. sdk. offlinePaymentAmountsByCurrency
オフライン時の遅延管理
デフォルトでは、Terminal SDK はネットワークの接続状態に基づき、支払いをオンラインまたはオフラインのどちらで収集すべきかを自動的に判断します。ただし、ネットワーク接続がアクティブな場合でも、取引をすばやく収集する必要がある場合やネットワーク接続が遅い場合などには、オフラインでの操作をお勧めします。offlineBehavior
を FORCE_
に設定して CreateConfiguration
オブジェクトを渡すと、接続状態に関係なく支払いをオフラインで収集することができます。SDK のネットワーク接続がアクティブな状態にあるときにオフラインで回収された支払いは、バックグラウンドで転送されます。
支払い方法を収集するクライアント側
Swiping cards isn’t supported while offline. Tapping cards is also not supported in markets where Strong Customer Authentication is required.
Use the didRequestReaderInput
method to display the valid card presentment options to the customer.
Using the initWithUpdatePaymentIntent
parameter in CollectConfiguration
is disabled when offline mode is enabled unless the offlineBehavior
is set to REQUIRE_
.
注
オフラインでリーダーを実行中の決済の責任をお客様が負います。磁気ストライプデータはなりすましが簡単なため、Stripe はオフラインでの実行中はこのオプションを許可していません。
支払いを確定するクライアント側
This step is similar to confirming payments while online. The primary difference is that your integration must handle offline-specific error cases, such as when the transaction exceeds the Stripe-enforced offline maximum of 10,000 USD or equivalent in your operating currency.
In some cases, the SDK might create a PaymentIntent
online, but confirm it while offline. When this happens, the PaymentIntent
might have a non-null stripeId
. You can check if offlineDetails
is defined to determine if it was confirmed offline.
領収書の提供
オフライン時に支払いの完了に使用されたカードの情報が必要になることがあります。たとえば、購入時の領収書を求める顧客に領収書を生成する必要がある場合などです。
If the PaymentIntent is confirmed offline, retrieve its OfflineCardPresentDetails from the paymentIntent.
property.
This hash contains a ReceiptDetails property you can use to generate a receipt, as well as other card details like the cardholder name and card brand.
Not all receipt details are available while operating offline. Prebuilt email receipts are only sent after connectivity is restored and the payment is successfully captured.
支払いが転送されるまで待つクライアント側
インターネットアクセスが復旧すると、SDK は保存されていたオフラインの支払いの転送を自動的に開始します。
If you power off your POS device too soon, your payments might not be forwarded. You can query Terminal.
to make sure your POS is online and can forward payments, and Terminal.
to check how many payments the Terminal SDK has to be forwarded.
決済をキャプチャーする
注
While offline, you can create PaymentIntents with captureMethod
set to automatic
. Once you confirm these PaymentIntents, they have a Succeeded
status instead of RequiresCapture
. Stripe automatically captures the payments after you forward them.
正常に転送とオーソリが行われた支払いは、バックエンドまたはアプリケーションからキャプチャーする必要があります。
- To capture payments from your backend, use webhooks to listen for PaymentIntents with a
requires_
status.capture - To capture payments from your application, wait for your application to receive calls to
OfflineDelegate.
for each PaymentIntent as the SDK forwards it. A PaymentIntent is ready to capture if its status isdidForwardPayment RequiresCapture
.
If your application determines when to capture a PaymentIntent after confirmPaymentIntent
, they’re ready to capture when the status is RequiresCapture
, and the offlineDetails
is null or has a requiresUpload
value of NO
.
支払いが以下のようにオンラインで確定されている場合、confirmPaymentIntent
の後に支払いをキャプチャーします。
オフライン決済は、 SDK によって OfflineDelegate の didForwardPaymentIntent
で転送された後にキャプチャーします。
オフラインで回収した支払いを調べる
After authorization, you can use the PaymentIntents API to examine offline details on a payment. Access the payment method details on the latest Charge object on a PaymentIntent
to determine if it was collected offline.