作者:小旭
借贷记和Qpboc在应用初始化和读应用数据方面的流程还是比较相似。
先看借贷记和电子现金的处理流程
应用选择完成后,终端获取到了PDOL数据(特别说明:这个不是必须的,卡片也可以不给终端提供PDOL,如果终端没有获取到PDOL,则GPO数据域直接传递8300,这个在L2测试中会有案例;如果卡片不提供PDOL的话,后续这张卡是不能做电子现金和Q的交易,但是至于为什么会存在这种卡,是处于什么样的目的,我之前有咨询过卡商,也没有得到一个比较合理的解释,如果有比较清楚这一点的,还希望留言回复,多谢了),比如之前的log日志中,TAG 9F38的内容是
- 9F 38 09 9F 7A 01 9F 02 06 5F 2A 02 5F 2D 02
这里面可以看到PDOL的内容
- 9F 7A 01 9F 02 06 5F 2A 02 5F 2D 02
这里包含了4个tag,这四个tag的数据就是作为GPO指令数据域传送给卡片。
GPO指令具体格式不再讨论了,文档讲的比较清楚,我也是看文档过来的,这里分别举一个例子,作为讨论素材。
数据借贷记、电子现金交易GPO返回有两个数据,AIP和AFL。
借贷记、电子现金GPO范例:
- send:17
- 80 A8 00 00 0B 83 09 01 00 00 00 00 00 05 01 56
- 00
- rec:23
- 80 12 7C 00 08 01 02 00 10 01 03 01 18 01 02
- 00 20 01 01 00 90 00
发送指令中标签83后面就是GPO的数据,这个数据来源就是根据PDOL获取。
接受返回数据中7C00为AIP,后续16个字节为AFL,AFL如何分析,文档上也描述的比较清楚。
终端根据AFL的情况,循环读记录文件,并且将记录文件中获取到的数据进行保存。
还有一个特殊的地方,GPO时候返回80+AIP+AFL并不是唯一的,还有可能返回77的tlv格式(根据文档加个人理解,应该是在支持CDA的时候,会存在这种情况),这个时候需要去用tlv的方式去解析tag,AIPtag为82,AFL的为94,最总解析出来的效果是一样的。
特别说明:pboc2.0和3.0规范在处理AFL的时候有所不同,下面把不同点列出来讨论一下(来自China's Financial IC群的讨论分析)。
第一个修改点:
2.0当中如果读记录读到了终端不存在的tag(也就是一般终端可能未定义这样的tag列表,读记录的时候读到某个tag,但是终端不知道是什么数据)将其忽略。
3.0修改这个点为,如果读到不存在的tag并且TLV格式正确,需要将其保存起来以备后用。
第二个修改点:
2.0有一个终止交易的条件:一个数据对象在读记录中出现超过一次,则交易终止。
3.0修改为:一个数据对象在读记录中出现两次或两次以上时,则终止交易。
第三个修改点:
3.0增加了一种终止交易的情况:如果一个读记录中获取到一个GPO已经返回的数据,则交易终止。
这个情况我个人理解为:应该只会在Qpboc流程中出现,因为借贷记和电子现金流程,GPO只有AFL和AIP,这两个数据对象也不可能在读记录中返回。
这几个点的改动,将会导致emv内核有一些修改。
Q GPO范例:
- send:41
- 80 A8 00 00 23 83 21 B6 00 00 00 00 00 00 00 10
- 00 00 00 00 00 00 00 01 56 00 00 00 00 00 01 56
- 11 03 30 00 E5 19 21 7B 00
- rec:82
- 77 4E 82 02 7C 00 94 0C 10 05 08 01 18 01 02 00
- 48 01 01 00 9F 36 02 06 A1 9F 26 08 C9 67 B7 1D
- 1C EA 1F FD 9F 10 0F 07 02 01 03 90 00 00 01 06
- 01 00 00 02 00 00 57 13 62 17 99 55 10 00 00 11
- 29 5D 49 12 22 04 41 06 00 00 0F 9F 6C 02 20 00
- 90 00
发送的数据域也是根据PDOL来填充的。
为了提高交互速度,减少终端与卡片交互次数,为此提高了单次交互的数据量,所以Q的GPO返回的数据量比较大,除了AIP和AFL之外,还有应用密文,交易计数器,发卡行应用数据,二磁道数据等多个数据。
QPBOC联机和QPBOC脱机的GPO响应数据有比较大的区别(3.0规范12中的表11和表12有非常清晰的描述)。对于GPO返回数据的处理,后续在脱机数据认证的时候再做讨论了。
因为借贷记电子现金和Q在GPO之处有很大的差异,就导致了他们两类交易从GPO之后开始(读应用数据除外)的流程有了很大的变化。
PBOC3.0在持卡人姓名一个5F20和9F0B的处理做了一些改动。原来的9F0B是对5F20在长度不足的情况下做一个补充。现在直接根绝持卡人姓名的长度,选择使用9F0B或者5F20.