4. 支払いを実装する
これで、各非接触決済のエクスペリエンスを実装できます:
ダブルクリック: デフォルトの支払いカードを使用して非接触決済を開始します。
フィールド検知: POSリーダーが検知されたときに非接触決済を開始します。
手動モード: エンドユーザーがカードを選択した後に非接触決済を開始します。
次の場合 フィールド検出、続行するようエンドユーザーに促す必要がある場合があります。次のいずれかを使用します ダブルクリック または 手動モード.
次の場合 手動モード、エンドユーザーがカードを選択できるUIを追加します。その後、そのカードで支払いを開始します。
支払いを開始
次を呼び出して非接触決済を開始します startPayment(withDigitalCardID:).
// 提供された digitalCardID を使用して支払いを開始
// ユースケース: 手動モード(ユーザー操作あり)
await session.startPayment(withDigitalCardID: digitalCardID)
// デフォルトカードで支払いを開始
// ユースケース: ダブルクリック
await session.startPayment()この呼び出しで支払いセッションが開始されます。
その後、あなたのイシュアアプリケーションは次のことを行う必要があります:
次を監視します
ContactlessPaymentSession.eventStream.各イベントを処理します。
非接触決済イベントを処理
次を呼び出した後に startPayment(...)、次を反復処理します ContactlessPaymentSession.eventStream。各項目は次のいずれかです ContactlessPaymentSession.Event.
フローが次で終了するまでイベントを処理します .transactionCompleted または .errorEncountered.
.authenticationRequired(let authentication): エンドユーザーの認証を要求します(たとえば、Touch ID や Face ID)。次を呼び出します
authentication.proceed()で認証を求め、フローを継続します。次を呼び出します
authentication.cancel()でフローを停止します。その後、次を受け取ります.errorEncounteredでキャンセルされました.
.authenticationCompleted: 認証が成功したことを確認します。通常は次にカードエミュレーションを開始します。.posConnected: デバイスがPOS端末のRFフィールド内にあることを示します。\niOS 18 では、このイベントを受信するには presentment intent assertion を使用する必要があります。.posDisconnected: トランザクションがまだ進行中の間に、デバイスがPOS端末のフィールドから離れたことを示します。.transactionCompleted(let transactionContext): トランザクションが正常に完了したことを示します。次を使用してtransactionContextステータスやレシートを表示します。.errorEncountered(let error): エラーによりフローが終了したことを示します。次を参照してください エラーを処理
エミュレーションを開始
次を呼び出します startEmulation() 次を受け取った後に ContactlessPaymentSession.Event.authenticationCompleted.
これによりカードエミュレーションが開始され、エンドユーザーに NFC モーダル UI が表示されます:

NFC モーダル UI が表示されている間、SDK は field-detect イベントを抑制します。
SDK は POS 端末との APDU (Application Protocol Data Unit) 交換も有効にします。
エンドユーザーは 60 秒以内に非接触決済を完了する必要があります。
時間切れになると、SDK は次を発行します .errorEncountered で maxSessionDurationReached.
次を呼び出すことができます startEmulation() 複数回。
支払いカードを変更する
使用する startPayment(withDigitalCardID:) エンドユーザーがデフォルト以外の支払いカードで支払いたい場合に使用します。
この API は:
選択したカードをデフォルトの支払いカードとして設定します(更新が成功した場合)。
そのカードで支払いフローを続行します。
次を呼び出すタイミングに応じて、以下のいずれかのフローを選択します startEmulation().
シナリオ A: 認証後にエミュレーションを開始
次を呼び出します startEmulation() 次を受け取ったときに ContactlessPaymentSession.Event.authenticationCompleted.
認証後すぐに NFC モーダル UI が表示されます。
カードを変更するには、エンドユーザーは次を行う必要があります:
タップする キャンセル を NFC モーダル UI で。
UI で別のカードを選択します。
次を呼び出します
startPayment(withDigitalCardID:)新しい次を使って再度digitalCardID.
シナリオ B: POS 端末のタップでエミュレーションを開始
次を呼び出します startEmulation() 次を受け取ったときに ContactlessPaymentSession.Event.posConnected.
エンドユーザーは POS 端末をタップする前に、UI でカードを切り替えることができます。
デバイスが RF フィールドに入った後にのみ NFC モーダル UI が表示されます。
非接触決済をキャンセル
進行中の非接触決済を次を呼び出してキャンセルします cancel().
その後、あなたのイシュアアプリケーションは次を受け取ります .errorEncountered で キャンセルされました。これを使って UI 状態をリセットします。
アラートメッセージを設定
NFC モーダル UI に表示されるメッセージを設定します。
エラーを処理する
フローが次で終了した場合 ContactlessPaymentSession.Event.errorEncountered(let error)、支払いは失敗と見なします。以下の表は、考えられるエラーの一覧をまとめたものです:
キャンセルされました
ユーザーがトランザクションをキャンセルしました。
maxSessionDurationReached
最大継続時間に達したため、セッションの有効期限が切れました。
nfcPermissionNotAccepted
NFC 接続の権限が付与されていません。
systemEligibilityFailed
システムは非接触決済の対象ではありません。例: Apple ID またはデバイスの所在地が EEA にありません。
keychainError
キーチェーン操作でエラーが発生しました。
noDefaultCard
トランザクション前にデフォルトカードが設定されていません。
noPaymentKeys
そのカードの支払いキーがありません。補充を要求する必要があります。
apduFailure
デバイスと POS 端末間の APDU 交換でエラーが発生しました。
transmissionError
一般的な送信エラーです。NFC リーダーとの接続がまだ有効であれば、送信操作を再試行できます。
sessionInvalidated
カードセッションはシステムによって無効化されました。例: アプリケーションがバックグラウンドにあります。
unknown
トランザクション中に不明なエラーが発生しました。
deviceEnvironmentUnsafe
デバイス環境が安全でないエラー。
setDefaultCardFailure
次のときに、指定されたデジタルカード ID をデフォルトカードとして設定しようとするとエラーが発生します startPayment(withDigitalCardID:) API が呼び出された場合。
invalidDigitalCardID
次のときに、指定された Digital Card ID が無効である場合にエラーが発生します startPayment(withDigitalCardID:).
authenticationExpired が呼び出された場合。
認証の有効期限後に支払いが行われるとエラーが発生します。
posNotSupported
POS 端末のリストに選択した AID がない場合にエラーが発生します。
cardNotSupported
そのカードは非接触決済に対応していません。
cardNotActive
そのカードは有効ではありません。
authenticationKeyInvalidated
デバイスのパスコードがオフになり、保護されたデータが消去されるとエラーが発生します。パスコードを再度有効にして、設定を再初期化してください。
biometricNotEnrolled
生体認証データが登録されていない、またはサポートされていない場合にエラーが発生します。
authenticationFailed
認証がキャンセルされた場合、アプリが中断された場合、またはデバイスのパスコードがない場合にエラーが発生します。
最終更新
役に立ちましたか?