如何正确构造Get Processing Option命令消息

时间:2015-01-09 11:45:41

标签: credit-card emv

EMV Book_3说:

  CLA:80
  INS:A8
  P1:00
  P2:00
  Lc:var
  数据:处理选项数据对象列表(PDOL)相关数据
  Le:00

我的APDU命令如下:“80 A8 00 00 0C PDOL 00”, 其中PDOL = "9F 66 04 9F 02 06 9F 37 04 5F 2A 02"

我收到了:6A 80 我正在使用的CC是Visa PayWave非接触式。 完整的FCI(文件控制信息)专有模板是:

"50 0C 56 69 73 61 20 43 6C 61 73 73 69 63 87 01 01 9F 38 0C 9F 66 04 9F 02 06 9F 37 04 5F 2A 02 5F 2D 04 62 67 65 6E"

我缺少什么?什么是正确的Get Processing Option命令?

1 个答案:

答案 0 :(得分:2)

PDOL标记表示由下一个指定字节数指定的标记表示要连接到命令末尾的数据。在你的问题中,PDOL标签9f 38指定下一个0Ch(12d)字节表示要发送到卡的数据。你有:

  • 9f 66 04 - 标签9f 66表示终端事务限定符。因此,PDOL必须将4h(十六进制)字节的终端事务限定符编码为四个字节。

  • 9f 02 06 - tag 9f 02代表授权金额。 PDOL列表必须具有已授权的数量,并将其编码为6h字节。

  • 9f 37 04 - tag 9f 37代表不可预测的数字,因此用4个字节编码这样的数字并将其添加到列表中

...

类似地翻译其余部分。该列表必须按照从卡接收的标签数据中指定的顺序,例如在您的清单中,TTQ必须是第一个,然后是授权的e.t.c.根据您的结果,数据的总大小应为4 + 6 + 4 + 2 = 16 = 10h字节。因此,最终命令看起来像样本数据:

                        <------the data concatenated together--------->
=> 80 a8 00 00 12 83 10 f3 20 40 00 00 00 00 01 00 00 04 04 06 03 05 08 00 

注意:注意Lc,12h的值以及它后面的两个字节。十六进制值0x83必须紧跟在Lc之后,并且其后面的字节应该是数据的实际长度,即10h,因此Lc = 10h + 2 = 12h,如上所述。不要忘记最后的Le!