EMV - GPO 与 PDOL

EMV - GPO with PDOL

我在C平台上工作,我想读取一张卡片的AFL。 如果 AID 的前一个命令 select 没有给我 PDOL 标签,没关系:我可以毫无问题地阅读 AFL。 但是我需要编写一个可以生成 GET PROCESSING OPTION 而不管 PDOL 的方法。

所以问题是:

  1. 如何编写一个通用方法,尽管有 PDOL?
    我必须映射每一个可能的标签吗?
  2. 如何格式化 GPO 命令与正确的数据?看下面的例子:

SELECT 援助响应 PDOL:9F 1A 02 所以我必须输入终端国家代码,在我的例子中是意大利:380 所以 GPO 调用是:

80 A0 00 00 04 83 02 03 80 00

但我得到的响应是6D 00:指令代码不受支持或无效

我哪里错了?

我正在 Ingenico Pos(销售点)编程。

发卡机构不只是放置任何标签并期望终端提供数据。您可以从您认证的每个支付方案中获得最佳实践(推荐标签)。此外,如果是您不支持的标签,您可以随时填零并继续。

您有两个选择:

  1. 发出数据字段为“8300”的命令 - 80 A8 00 00 02 83 00 00
  2. 发出一条命令,数据字段全部为十六进制零 - 80 A8 00 00 04 83 02 00 00 00

您收到错误消息,因为在选项 1 中您省略了 C-APDU 的 Le 字节 - 此字节对于所有 CASE 4 命令都是强制性的,而在选项 2 中您提供了错误的 INS 字节,A0 而不是 A8。

很高兴知道您非常了解 PDOL 的概念。据我对你的问题的理解,如果 PDOL 不存在,你可以轻松地构造 GPO 命令。我认为您对编写通用函数来构造 GPO APDU 命令有疑问。

首先我想告诉你,如果SELECT响应中存在PDOL信息,那么你应该在GPO命令APDU中发送PDOL数据,否则卡应用程序可能会抛出一些错误。

所以你可以在SELECT命令中收到PDOL时设置一个指示符。如果 PDOL 不存在,您可以简单地发送 80 A8 00 00 02 83 00 00 并且如果您的指标表明需要 PDOL,那么只需解析 PDOL 并从 SELECT 响应中准备一个 PDOL 数据值,如果您知道(如您在问题中所述)在 GPO 命令 APDU 中发送。

如果您不知道什么值,那么您可以在值字段中简单地填充十六进制零。

以你的例子为例:80 A8 00 00 04 83 02 03 80 00。这是正确的命令(我已经更正了 INS 字节)。或者您也可以发送 80 A8 00 00 04 83 02 00 00 00(PDOL 值被零替换)

我认为这个解释可以帮助你得到这两个问题的答案。尝试一下,如果需要进一步说明,请告诉我们。