【问题标题】:EMV - GPO with PDOLEMV - 带有 PDOL 的 GPO
【发布时间】:2018-05-09 08:56:41
【问题描述】:

我在 C 平台上工作,我想读取卡的 AFL。 如果前面的命令,选择 AID,不要给我 PDOL 标签,没关系:我可以毫无问题地读取 AFL。 但是我需要写一个方法,不管PD​​OL如何,都能生成一个GET PROCESSING OPTION。

所以问题是:

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

选择 AID 响应 PDOL:9F 1A 02 所以我必须输入终端国家代码,在我的情况下意大利:380 所以 GPO 调用是:

80 A0 00 00 04 83 02 03 80 00

但是我得到的回复是6D 00: Instruction code not supported or invalid

我哪里错了?

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

【问题讨论】:

  • 向我们提供更多详细信息,例如您使用的阅读器。
  • EMV book 3 说,当不返回 PDOL 时,GET PROCESSING OPTIONS 命令使用命令数据字段 '8300',表示命令数据中 value 字段的长度为零。
  • @itachi 我正在开发 Ingenico Pos。
  • @малинчекуров 是的,谢谢,我知道。正如我所说,如果卡没有 PDOL,我可以到达 AFL。

标签: apdu emv


【解决方案1】:

很高兴知道您非常了解 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值被零替换)

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

【讨论】:

  • 是的,谢谢,我确认这只是 A0 而不是 A8 上的印刷错误
【解决方案2】:

你有两个选择:

  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。

【讨论】:

  • 是的,谢谢,我确认这只是 A0 而不是 A8 上的印刷错误
【解决方案3】:

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

【讨论】:

  • 我尝试了两种方式: - 用零填充它,所以 80 A0 00 00 04 83 02 00 00 00,但错误响应仍然存在 - 忽略 pdol 并调用 80 A8 00 00 02 83 00 ,但发生错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-13
  • 2014-06-28
  • 1970-01-01
相关资源
最近更新 更多