всегда получая 6a82 и 6d00 за чтение карты EMV Visa - PullRequest
0 голосов
/ 21 мая 2019

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

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

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

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();

    }

1 Ответ

3 голосов
/ 22 мая 2019

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

...