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。
ステータスワードを処理
必ず確認してください 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 コード決済では、デジタルウォレットアプリケーションは次を実行する必要があります:
QR コードのペイロードを構築します。
QR コード画像を生成します。
エンドユーザーが POS で提示できるように QR コード画像を表示します。
最終更新
役に立ちましたか?