我正在从签证卡中读取数据,但始终收到PSE的响应6a82和6d00。 我正在使用smartcardio,以下是命令 选择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();
}
答案 0 :(得分:2)
对PSE的接触支持是可选的-卡和终端均支持。从终端/内核的角度来看,仅LoA(AID列表)方法是必需的。正如EMV书1第12.3章中详细描述的那样,当缺少PSE(状态字6A82)时,终端应根据其配置使用AID列表方法构建候选列表。我不知道何时获得6D00,但是您没有正确执行应用程序选择,因此我猜您是在未选择应用程序的情况下触发了GPO和GenAC之类的命令。您引用的代码是非常错误的-它不会处理任何错误,不会正确选择应用程序,不会检查PDOL是否存在,不会使用CDOL1读取记录,也不会生成DOL。老实说,它可能只是巧合。