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

How to correctly construct Get Processing Option command message

EMV Book_3 说:

CLA: 80
INS: A8
P1 : 00
P2 : 00
Lc : var
Data: Processing Options Data Object List (PDOL) related data
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"

我错过了什么?正确的获取处理选项命令是什么?

PDOL标签的意思是下一个指定字节数指定的标签代表要拼接到命令末尾的数据。在您的问题中,PDOL 标记 9f 38 指定下一个 0Chex (12dec) 字节表示要发送到卡的数据。你有:

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

  • 9f 02 06 - 标签 9f 02 代表授权金额。 PDOL 列表必须添加数量、授权、编码为 6h 字节。

  • 9f 37 04 - 标签 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!