15

我正在尝试从 VISA 卡中读取信用卡数据,但无法成功。在互联网资源中,我发现对于 MASTER 卡,我们可以使用 1PAY.SYS.DDF01 文件选择 PSE 目录,然后阅读记录。但是对于 VISA,它不是强制性的,当我使用以下文件使用 SELECT 命令获取 PSE 目录时,我得到的响应为“6A82”。这意味着文件系统不支持它。我在 EMV 4.2 Book 1(EMV 规范)中查找了错误,它说我们必须使用“AID 列表”。它说“终端使用其列表中的下一个 AID 发出另一个 SELECT 命令”。我无法理解这一点并继续前进。

有关如何获取 VISA 卡的 PSE 或 AID 以获取信用卡详细信息的任何帮助?

谢谢,谢卡尔

4

5 回答 5

6

首先,PPSE 小程序不是针对 VISA 或 MasterCard 的。它由 EMV 定义,如您正确注意到的那样用于列出卡上可用支付应用程序的 AID。但如果它不存在,终端会尝试所有支持的 AID 来构建候选列表。

如果您想选择 VISA 小程序,但您不知道完整的 AID,您可以使用部分选择。由于所有 VISA AID 都以 VISA 的 RID 开头:A0 00 00 00 03。您可以尝试发送以下命令:

这将返回第一个实例:

00 A4 04 00 05 A0 00 00 00 03 00

如果您的卡上有以下内容,这将为您提供更多:

00 A4 04 02 05 A0 00 00 00 03 00

于 2012-12-13T08:26:40.200 回答
3

所以问题是你不知道卡上你的应用程序的 AID 吗?没有办法得到它们(除了 PSE),你必须首先知道你支持的卡上的应用程序。因此,“AID 列表”是您支持的 AID 列表,这是您的收单机构告诉您的。您可以尝试根据您在此处列出的一些标准 AID 自己创建此列表:http ://en.wikipedia.org/wiki/EMV#Application_selection

于 2012-05-22T13:34:49.573 回答
1

这对我来说有点奇怪......我的研究表明,对于 VISA,该应用程序将始终可用,但对于万事达卡,这不是强制性的......

无论如何,这是我发送给读卡器以选择该应用程序的命令:

//               OP CL P1 P2 LN DATA------------------------------------- EL
//select command 00 A4 04 00 0E 31 50 41 59 2E 53 59 53 2E 44 44 46 30 31 00

NSString* str= @"1PAY.SYS.DDF01";
NSData* data=[str dataUsingEncoding:NSUTF8StringEncoding];
int datalength = data.length; 
NSMutableData *selectPSECommand = [[NSMutableData alloc] init];

[selectPSECommand appendBytes:"\x00" length:1]; //command class
[selectPSECommand appendBytes:"\xA4" length:1]; //APDU_INSTRUCTION_SELECT_FILE
[selectPSECommand appendBytes:"\x04" length:1]; //select file by name
[selectPSECommand appendBytes:"\x00" length:1]; //First or only occurrence of file
[selectPSECommand appendBytes:&datalength length:1]; //data length
[selectPSECommand appendData:data]; //the data we are sending
[selectPSECommand appendBytes:"\x00" length:1]; //expected response length. here it is 0. We are only selecting a file.

代码示例适用于 Objective C。

将您发送的数据与我发送的数据进行比较,看看是否一致。与此同时,我将研究通过 AID 列表运行。

希望能帮助到你。埃兹弗拉格

于 2012-07-12T10:36:15.537 回答
0

当您使用此 1PAY.SYS.DDF01 第一个命令时,卡将首先响应内部的 2 AID 列表存在一些错误,因此您给出此 6A82 错误并返回代码 RETRY。您必须使用 ENRTY Libs 里面有一些删除命令,然后再次设置应用程序选择命令,这样它就会自动获得第二个 AID,然后你的签证卡就会成功。

于 2020-02-27T05:39:00.993 回答
0

您可以使用这样的 AID列表。然而,一些卡片在遍历列表时会响应“错误”的数据。即,我有一个 V-Pay VISA 卡被读取为 Maestro 的情况。如果你必须遍历一个大的 AID 列表来“打开”卡片信息,我建议你添加一个标志来从卡片中获取实际的 AID,然后返回到 main 方法来读取带有主 AID 的卡片假如。

就像是:

  1. 通过 AID 列表读取卡片
  2. 如果返回0x90(读取成功),则提取数据
  3. 检查返回的数据是 AID (0x4f) 类型的位置。
  4. 如果是这样,请清除您的列表并使用正确的 AID 再次获取数据,因为您确定它是正确的,因为它直接来自卡。

由于 AID 通常来自卡中的第一条记录,因此此循环可确保过程以最小的时间成本正确。

于 2016-01-21T09:53:38.070 回答