Welcome to our new developer portal! Use the "Ask" button to chat with our AI Agent.
For the complete documentation index, see llms.txt. This page is also available as Markdown.

QR コード決済を実装する

概要

NFC Wallet SDK は、Thales のホワイトラベル EMV PURE カードでのみ QR コード決済をサポートします。

QR コード決済を実装する前に、次を完了してください トークン化。参照してください カードをトークン化する.

SDK統合

前提条件を確認する

次を使用して、デジタルカードが QR コード決済をサポートしていることを確認します DigitalCard.Details.isPaymentTypeSupported() で PaymentType.qr.

func checkCardSupportForQR(card: DigitalCard) async throws -> Bool {
    return try await card.details.isPaymentTypeSupported(.qr)
}

QR 決済の入力データを作成する

作成 QRPaymentSession.QRPaymentInputData。これには、QR コード決済のペイロードを構築するために使用されるトランザクション パラメータが含まれます。

let amount   = "000000500030"  // 5000.30 EUR
let currency = "0978" // EUR
let aid      = "00000000000000000000000000000000"    // 16 bytes long
let idd      = "000000000000000000000000000000"      // 15 bytes long
let inputData = QRPaymentSession.QRPaymentInputData(amount: amount, currencyCode: currency, aid: aid, idd: idd)

QRPaymentSession.QRPaymentInputData には次のフィールドがあります:

入力データ
形式
長さ
説明

aid

16進数

ISO/IEC 7816-5

10~32文字

必須

"0000000000" を使用して、SDK にプライマリ AID を使用させます。

amount

BCD エンコードされた16進数

12文字

必須

BCD 形式の取引金額。

5.22 EUR の金額の値は “000000000522” です。

currencyCode

ISO-4217

数値文字列

4文字

必須 取引通貨。

EUR には "0978" を使用します。

idd

16進数

30文字

任意

イシュア固有データ

QR 決済データを生成

デジタルウォレットアプリケーションで、次を呼び出します generateQRPaymentData QR コードにエンコードするペイロードを生成するために。

この API はエラーをスローする可能性があります。参照してください エラーを処理する.

成功すると、この API は QRPaymentOutputData 次のフィールドを含みます:

パラメーター
説明

statusWord

取引ステータスワード。 9000 成功を示します。 参照 ステータスワードを処理

cid

暗号情報データ。この取引で CDCVM が必要かどうかを判定します。

chipDataField

NFC によって計算された、暗号文を含むチップデータフィールド。

condensedPaymentData

該当なし

cardMainAid

支払いに使用されるカードのメイン AID。

cardMainAppTemplate

支払いに使用されるカードのメイン Application Template。

cardAliasAid

支払いに使用されるカードの代替 AID。

cardAliasAppTemplate

支払いに使用されるカードの代替 Application Template。

commonDataTemplate

支払い中に計算される Common Data Template。

を渡すことで、QR コード決済にデフォルト以外のデジタルカードを使用できます digitalCardID を generateQRPaymentData.

ステータスワードを処理

必ず確認してください statusWord 他のフィールドを使用する前に。

  • 9000 ペイロードの生成が成功したことを示します。次の他のフィールドを読み取れます QRPaymentOutputData.

  • それ以外の値は失敗を示します。次の他のフィールドは使用しないでください QRPaymentOutputData.

詳細は以下の表を参照してください:

ステータスワードの値
説明

9000

成功した取引です。次のオブジェクト内のすべてのフィールド QRPaymentOutputData オブジェクトは、次の場合に取得できます cid 値が 0x8x。 ここで:

  • 1桁目は「取引をオンラインで処理する要求」を示します。

  • 2桁目は、CVM 不要、ローカル CDCVM 入力済み、ローカル CDCVM 必須などの CVM 情報を示します。CID が 0x8x 形式でない場合、フィールドは空です。

6989

CIAC 値により顧客確認が必要ですが、Application Control で方法が定義されていません。

6988

取引金額を 0 にすることはできません。

6987

取引金額がカードイシュア定義の上限を超えています。

6986

取引金額が消費者定義の上限を超えています。

6985

ATC 上限に達したか、選択した AID がこの仕様に準拠する決済アプリケーションを参照していません。

エラーを処理する

もし generateQRPaymentData がエラーをスローした場合は、支払い失敗として扱います。UI 状態をリセットし、エンドユーザーを次に取るべき最善のアクションへ誘導してください。

エラー
説明

deviceEnvironmentUnsafe

デバイスがセキュリティ要件を満たしていません。

sessionInProgress

別の支払いセッションがまだ実行中です。

unsupportedPaymentType

デジタルカードは QR コード決済をサポートしていません。

invalidQRInputData

次のいずれかのフィールドが QRPaymentInputData 不足しているか、形式が正しくありません。

qrPaymentFailed

内部エラーのため、ペイロードを生成できません。

authenticationKeyInvalidated

デバイスのパスコードが無効になり、セキュアストレージが消去されました。

biometricNotEnrolled

生体認証が利用できないか、登録されていません。

各エラーには、失敗の内容を説明するメッセージを含めることができます。トラブルシューティングやサポート診断に使用してください。

完全な実装例

このコードサンプルを使って、前の手順がどのように組み合わさるかを理解してください。

QR コード画像を生成して表示

お使いのデジタルウォレットアプリケーションは、NFC Wallet SDK が返す出力を使用して QR コード画像を生成し、表示する責任があります。

受信後 QRPaymentOutputData QR コード決済では、デジタルウォレットアプリケーションは次を実行する必要があります:

  1. QR コードのペイロードを構築します。

  2. QR コード画像を生成します。

  3. エンドユーザーが POS で提示できるように QR コード画像を表示します。

iOS は QR コード生成をネイティブでサポートしています (Core Image)。

最終更新

役に立ちましたか?