2014-07-08 46 views
5
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); 

Sto usando il codice di cui sopra per leggere VisaPayWave NFC dati della carta (nome del titolare della carta, data di scadenza, numero di carta, ecc) utilizzando Samsung Galaxy s4. L'output che sto ottenendo è [106, -126]. Penso che il comando APDU che sto usando non sia corretto. Si prega di suggerire il comando corretto.comando APDU di leggere i dati delle carte di credito di Visa payWave NFC card abilitata utilizzando Samsung Galaxy S4

risposta

2

Cambia la tua APDU definizione del comando

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 
    }; 
+0

non funziona. Qualcuno può suggerire per favore che cosa sto facendo di sbagliato? Ho bisogno di più comandi APDU per leggere tutti i dati? Se sì per favore fammi sapere l'algoritmo o il codice. – user3816152

+0

Questo comando è il primo passo. Per prima cosa devi selezionare l'applet in modo che tu possa leggere i dati. È necessario assicurarsi che l'applet sia attivata. – lletami

1

come risposta lletami, Visa payWave è tipicamente selezionabile con l'AID A0000000031010. Quindi è possibile utilizzare l'APDU

00 A4 04 00 07 A0000000031010 00 

per selezionare l'applicazione payWave.

sulle carte di pagamento senza contatto EMV, è possibile inoltre selezionare il PPSE (Proximity Ambiente Payment System) per recuperare un elenco di applicazioni disponibili (e il loro AIDS):

00 A4 04 00 0E 325041592E5359532E4444463031 00 

Selezione della domanda di pagamento EMV è solo il primo passo. Avrai bisogno di emettere diversi altri comandi per ottenere i dati leggibili della carta di credito (vedi this answer).

Ad esempio, è possibile emettere un comando GET PROCESSING OPTIONS (vedere ad esempio this answer, this answer e this answer).

E/o è possibile immettere comandi READ RECORD per ottenere dati da file elementari noti. Per esempio.

00 B2 01 0C 00 

per leggere il record 1 di EF 1,

00 B2 02 0C 00 

per leggere il record 2 di EF 1, o

00 B2 01 14 00 

per leggere record 1 EF 2, etc.

È possibile ottenere le specifiche EMV per i sistemi di pagamento da http://www.emvco.com/ per informazioni su possibili comandi e strutture dati.

0

Il codice di risposta [106, -126] è meglio rappresentato come esadecimale, anziché implicare alcun valore firmato.

In realtà sarebbe 6A82 - che costituisce SW1 e SW2 del codice di risposta APDU. 6A82 corrisponde a "Parametro errato P1 P2; file non trovato". Vedi EMV Book 1 per maggiori dettagli. Cioè "0x63,0x64,0x63,0x00,0x00,0x00,0x00,0x32,0x32,0x31" non è stato trovato sulla scheda, ma "0xA0,0x00,0x00,0x00,0x03,0x10,0x10" dovrebbe essere.

Come dice lletami, il comando APDU deve essere ricostruito, incluso l'AID che utilizza "numerico compresso" (come descritto in EMV Book 1), molto simile al decimale codificato in binario.