всегда получаю 6a82 и 6d00 за чтение карты Visa EMV

я читаю данные с карты Visa, но всегда получаю ответ 6a82 и 6d00 для PSE. Я использую smartcardio, и ниже приведены команды Select PSE: 00A404000E315041592E5359532E444446303100.

Код обработки: 80A8000002830000

Приведенный ниже код отлично работает для paypak (платежная карта Пакистана, заявляющая о совместимости с EMV), но для Visa это не работает.

startCardConnection("0");
    String commandVisa = "00A4040007A000000003101000";
    String command_PSE = "00A404000E315041592E5359532E444446303100";
     String command_getProcessingOptionsVISA = "80A8000002830000";
    String response;
    response = executeCardCommand(command_PSE);
    response = executeCardCommand(commandVisa);
    readCardRecords(2);
    response = executeCardCommand(command_getProcessingOptionsVISA);
response = executeCardCommand("80AE8000210000000000000000000000000586000000000005861802020000E44E4B11040001");


  public static String executeCardCommand(String command) {
    if (transmissionTrace)
        System.out.println("SYS: Executing card command:" + command);

    capdu = makeCommandAPDU(command);
    TLV tagsList;
    try {
        if (card == null) {
        System.out.println("SYS: ERR: Card not present/not responding!");
        return null;
        }
        responsedAPDU = card.getBasicChannel().transmit(capdu);

        showRes(responsedAPDU.getBytes());

        tagsList = new TLV(responsedAPDU.getBytes());
        allTagsTLV.getChildren().add(tagsList);
        System.out.println(">>>>>>>>>>>>" + responsedAPDU.toString());

    } catch (CardException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (TLVException e1) {
        // TODO Auto-generated catch block
        System.out.println("SYS: NO tags response. May be correct if not expecting tags.");
    }

    return allTagsTLV.getJson();

    }

person Zeeshan Ahmed Awan    schedule 21.05.2019    source источник


Ответы (1)


Поддержка PSE для контакта необязательна - как для карт, так и для терминалов. С точки зрения терминала/ядра обязательным является только метод LoA (список AID). Как подробно описано в главе 12.3 Книги EMV 1, когда PSE отсутствует (слово состояния 6A82), терминал должен построить список кандидатов, используя метод List of AID, на основе своей конфигурации. Я не знаю, когда вы получаете 6D00, но вы неправильно выполняете выбор приложений, поэтому я предполагаю, что вы запускаете такие команды, как GPO и GenAC, без выбранного приложения. Код, который вы цитируете, очень неверен - он не обрабатывает никаких ошибок, неправильно выбирает приложение, не проверяет наличие PDOL, не читает записи с CDOL1, не создает DOL. Честно говоря, это может сработать только по стечению обстоятельств.

person Michal Gluchowski    schedule 21.05.2019