Android APDU命令,用于使用三星Galaxy S4从visa Paywave支持NFC的卡读取信用卡数据

Android APDU命令,用于使用三星Galaxy S4从visa Paywave支持NFC的卡读取信用卡数据,android,nfc,apdu,contactless-smartcard,emv,Android,Nfc,Apdu,Contactless Smartcard,Emv,我正在使用上述代码阅读使用三星galaxy s4的VisaPayWave NFC卡详细信息(持卡人姓名、到期日、卡号等)。我得到的输出是[106,-126]。我认为我使用的APDU命令不正确。请建议正确的命令 更改APDU命令定义 byte[] APDUCommand = { (byte) 0x00, // CLA Class (byte) 0xA4, // INS Instruction

我正在使用上述代码阅读使用三星galaxy s4的VisaPayWave NFC卡详细信息(持卡人姓名、到期日、卡号等)。我得到的输出是[106,-126]。我认为我使用的APDU命令不正确。请建议正确的命令

更改APDU命令定义

  byte[] APDUCommand = { 
            (byte) 0x00, // CLA Class           
            (byte) 0xA4, // INS Instruction     
            (byte) 0x04, // P1  Parameter 1
            (byte) 0x00, // P2  Parameter 2
            (byte) 0x0A, // Length
            0x63,0x64,0x63,0x00,0x00,0x00,0x00,0x32,0x32,0x31 // AID
        };


    Intent intent = getIntent();
    Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
    IsoDep iso = IsoDep.get(tag);        
    iso.connect();

    byte[] result = iso.transceive(APDUCommand);
正如所回答的,Visa payWave通常可通过AID
A0000000031010
进行选择。所以你可以使用APDU

byte[] APDUCommand = { 
        (byte) 0x00, // CLA Class           
        (byte) 0xA4, // INS Instruction     
        (byte) 0x04, // P1  Parameter 1
        (byte) 0x00, // P2  Parameter 2
        (byte) 0x07, // Length
        (byte) 0xA0,0x00,0x00,0x00,0x03,0x10,0x10 // AID
    };
选择payWave应用程序

在非接触式EMV支付卡上,您还可以选择PPSE(近距离支付系统环境)来检索可用应用程序(及其辅助工具)的列表:

选择EMV支付应用程序只是第一步。您需要发出多个进一步的命令来获取可读的信用卡数据(请参阅)

例如,您可以发出GET PROCESSING OPTIONS命令(参见和)

和/或您可以发出读取记录命令,从已知的基本文件中获取数据。例如

00 A4 04 00 0E 325041592E5359532E4444463031 00
要读取EF 1的记录1

00 B2 01 0C 00
读取EF 1的记录2,或

00 B2 02 0C 00
读取EF 2的记录1等


您可以从获取支付系统的EMV规范,以了解可能的命令和数据结构。

您的响应代码[106,-126]最好表示为十六进制,而不是表示任何有符号的值

实际上是6A82,它构成了APDU响应代码的SW1和SW2。6A82对应于“错误参数P1 P2;未找到文件”。有关更多详细信息,请参见EMV手册1。即在卡上未找到“0x63,0x64,0x63,0x00,0x00,0x00,0x00,0x32,0x32,0x31”-但应选择“0xA0,0x00,0x00,0x00,0x03,0x10,0x10”


正如lletami所说,您的APDU命令需要重建,包括使用“压缩数字”(如EMV手册1所述)的辅助功能,非常类似于二进制编码的十进制。

它不起作用。谁能告诉我我做错了什么。我是否需要多个APDU命令来读取所有数据?如果是,请告诉我算法或代码。此命令是第一步。首先需要选择小程序,以便读取数据。您需要确保小程序已激活。
00 B2 02 0C 00
00 B2 01 14 00