чтение токена Apple Pay с помощью считывателя ACR122 NFC

У меня есть считыватель NFC ACR122, и я пытаюсь проверить, могу ли я прочитать токен, сгенерированный Apple Pay. Ниже приведен код на Java, который я пытаюсь использовать, но каждый раз возвращает только 4 буквенно-цифровых символа. IPhone Apple Pay распознает считыватель nfc — есть ли специальные команды apdu, которые мне нужно отправить, чтобы получить токен?

import java.io.*;
import java.util.*;
import javax.smartcardio.*;

public class CardTest {

  final protected static char[] hexArray = "0123456789ABCDEF".toCharArray();

  public static String bytesToHex(byte[] bytes) {
    char[] hexChars = new char[bytes.length * 2];
    int v;
    for ( int j = 0; j < bytes.length; j++ ) {
      v = bytes[j] & 0xFF;
      hexChars[j * 2] = hexArray[v >>> 4];
      hexChars[j * 2 + 1] = hexArray[v & 0x0F];
    }
    return new String(hexChars);
  }

  public static void main(String[] args) throws Exception {
    TerminalFactory factory = TerminalFactory.getInstance("PC/SC", null);
    System.out.println(factory);

    List<CardTerminal> terminals = factory.terminals().list();
    System.out.println("Terminals: " + terminals);
    if (terminals.isEmpty()) {
      throw new Exception("No card terminals available");
    }

    CardTerminal terminal = terminals.get(0);

    // Keep looping looking for cards until the application is closed
    while( true )
    {
      terminal.waitForCardPresent( 0 );
      try {
        Card card = terminal.connect("*");
        CardChannel channel = card.getBasicChannel();

        CommandAPDU command = new CommandAPDU(new byte[]{(byte)0xFF,(byte)0xCA,(byte)0x00,(byte)0x00,(byte)0x04});
        ResponseAPDU response = channel.transmit(command);

        byte[] byteArray = response.getBytes();
        System.out.println( bytesToHex( byteArray ) );
        Thread.sleep(1000);
      } catch (CardException e) {
        e.printStackTrace();
      }
    }
  }
}

person user1615573    schedule 21.10.2014    source источник


Ответы (1)


Команда, которую вы даете

FF CA 00 00 04

даст вам идентификатор предотвращения столкновений (или фактически первые 4 его байта, если он имеет более 4 байтов) смарт-карты (элемент безопасности) iPhone.

Apple Pay (через бесконтактный интерфейс) реализует стандарт EMV для бесконтактных платежных карт. Таким образом, для связи с этой бесконтактной платежной картой EMV вам потребуется реализовать этот протокол.

Кстати. не думайте о платежном токене как о строке байтов. Это гораздо больше, чем это. Платежный токен EMV может быть

  • временная платежная "карта" (ограниченная одним/ограниченным временем/ограниченным количеством транзакций использованием), которая состоит из временного "номера кредитной карты" (и т. д.) и ключа, который используется для авторизации транзакции (-> это обычно используется в приложениях HCE, например Google Wallet)

  • постоянная платежная карта (отдельный, но фиксированный номер кредитной карты, срок действия, секретный ключ и т. д.), которая используется для авторизации платежей, которые впоследствии списываются с привязанной кредитной карты (-> это, кажется, используется с Apple Pay -- а также использовался с защищенным элементом Google Wallet).

person Michael Roland    schedule 04.11.2014