QPBOC交易,也就是快速的借记贷记。
很多人都容易混淆了QPBOC,PBOC和电子现金、电子钱包的概念。首先,电子钱包早在PBOC2.0的规范里面就去掉了,在PBOC3.0里面把MSD也去掉了。因此,最新的PBOC3.0规范里面,定义了三种交易,就是QPBOC,PBOC以及电子现金。
这三个交易的关系有点错综复杂,PBOC是最基础的借记贷记流程,电子现金,与PBOC的流程基本一致,纯粹是可以扣卡片上的脱机钱包。而QPBOC是一个相对非常简单的流程,与电子现金扣同一个脱机钱包。
下面,就QPBOC的流程,直接把整个正常的脱机交易通过终端与卡片的交互的APDU分析出来,表明QPBOC的整个交易过程。
1.下面是第一步:选择环境
send => 00 A4 04 00 0E 32 50 41 59 2E 53 5953 2E 44 44 46 30 31
recv <= 6F 30 84 0E 32 50 41 59 2E 53 59 532E 44 44 46 30 31 A5 1E BF 0C 1B 61 19 4F 07 A0 00 00 03 33 01 01 50 0B 50 424F 43 20 43 72 65 64 69 74 87 01 01 90 00
可以看到,发送指令用的是 00 A4,选择的环境是PPSE(2PAY.SYS.DDF01).
卡片的响应是:
6F : FCI专用模板;
84 : 专用DF文件,也就是我们所选择的PPSE;
A5 : FCI专用模板;
BF0C : FCI自定义数据;
61 : 目录入口(允许有多个61);
4F : DF名称,可选的AID,下一步选择AID就可以选择这个;
50 :应用标签,此处是ASC码,代表:PBOCCredit
87 :应用优先指示器。
PS:如果有多个61,就可以通过优先指示器选择DF,或者把多个DF对应的应用标签显示在屏幕上,给用户选择,目前只有一个DF,所以下一步直接选择这个DF。
2.第二步,选择应用
send =>00 A4 04 00 07 A0 00 00 03 33 01 01
recv <=6F 5F 84 07 A0 00 00 03 33 01 01 A5 54 50 0B 50 42 4F 43 20 43 72 65 64 69 7487 01 01 9F 38 18 9F 66 04 9F 02 06 9F 03 06 9F 1A 02 95 05 5F 2A 02 9A 03 9C01 9F 37 04 5F 2D 08 7A 68 65 6E 66 72 64 65 9F 11 01 01 9F 12 0F 43 41 52 4420 49 4D 41 47 45 20 30 30 33 31 BF 0C 05 9F 4D 02 0B 0A 90 00
根据选择环境得到的AID,我们发送的时候A404的时候,选择了A0 00 00 03 33 01 01
可以看到卡片的返回是:
6F : FCI模板;
84 : DF名称;(如果卡片支持部分匹配,可能返回的与发送的不一致)
A5 : FCI专用模板;
50 : 应用标签;
87 : 应用优先指示位;
9F38 : PDOL,在下一步的时候,会按照这串数据,组包,发送给卡片;
5F2D : 首选语言;
9F11 : 发卡行代码表索引;
9F12 : 应用首选名称;
BF0C : 发卡行自定义数据
经过这一步,我们确定了选择A0 00 00 03 33 01 01这个DF,同时确定了下一步应该发什么数据给卡片。
3.第三步,GPO.
send => 80 A800 00 23 83 21 36 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 01 56 00 00 0000 00 01 56 14 05 19 22 11 22 33 44
recv <= 77 81 9C 82 02 70 00 94 08 10 01 0200 18 01 03 01 9F 10 13 07 01 01 03 90 00 00 01 0A 01 00 00 00 99 99 9A D1 9D3A 9F 36 02 00 0D 9F 26 08 03 A6 F4 9F 3E 26 68 4D 9F 4B 60 71 B2 B3 17 28 52 21E1 85 D9 B1 85 D1 BE BD 04 BD 95 FA 18 31 72 47 78 BB DA 6A 4D 9C 74 66 C8 89F8 41 95 D2 C0 93 0F C1 67 FB C6 CD 67 BB 54 5F 50 F3 2C 97 D3 F4 08 0A BC B453 FD 68 99 AC 81 F0 3A 44 9F 0D 80 F6 A5 C6 14 CD A5 1E 3F 4A 5E 8C 0C D1 38EF 2F AA 4E 7D 8A 95 15 90 81 6D 9F 6C 02 30 00 90 00
GPO代表交易的开始,GPO需要把PDOL指令填充好,发送给卡片。
发给卡片包括金额,时间,国家代码和货币代码等。
可以看到卡片返回:
82 : AIP应用交互特征;
94 :应用文件定位器;
9F10 : 发卡行应用数据;
9F36 : ATC应用交易计数器;
9F26 : 应用密文;
9F48 : 签名的动态应用数据;
9F6C : 卡片交易属性;(表明啊卡片要求哪一个CVM)
至此,卡片进入预扣款状态,根据卡片响应,得知卡片已经返回脱机成功的状态,终端需要把GPO返回的AFL读完,交易便完成。
4. 第四步,读记录。
下面会有多个指令来回,因为GPO返回的AFL需要读取多个记录。
send => 00 B201 14
recv <=70 81 B0 90 81 80 22 91 03 A5 E3 12 0F2D 28 62 09 11 76 AA 2B D4 E2 4D 69 E7 EE F7 B9 19 5C 91 EA 00 88 AE CF F4 7EDF A0 BE EF 7C 39 1D F3 B0 5F 71 7D CC 06 FF C8 EE FF 90 BA 14 21 2B 8A 52 AD48 B3 32 77 B2 E2 30 D4 0B 3E 76 DC 59 77 89 26 F1 D8 73 9E 10 6C D7 41 DE 06A7 42 3D FB A2 5E 02 F1 2E 54 3D 13 D1 B4 71 80 65 26 02 49 81 B7 D2 6B 4B F6E5 55 86 04 CC C2 89 F5 9E 8A 80 2F 45 FB 3D 9E 67 9F 32 01 03 92 24 8B 64 3D1E AF 2E A7 84 AC 20 53 03 C9 0E 74 5E A2 EF A5 CB F0 2C C4 7D 47 83 3B B7 B27E CC 69 62 38 5A 4B 8F 01 80 90 00
卡片返回:
90 :发卡行公钥证书;
9F32 : 发卡行公钥模数;
92 :发卡行公钥余数;
8F: CA公钥索引;
send => 00 B202 14
recv <= 70 81 A1 9F 46 81 80 AE 45 C4 2F EAE7 11 15 9E B5 DE 29 B7 F8 D4 37 DE 42 9F 03 B0 35 B1 48 E2 AB 99 BC 14 56 A69A 8C 8B F7 3A 19 08 40 3F 50 5A B4 B9 DD 5E 38 A9 36 67 65 9E 98 38 05 3C C3 D33A FB 82 A6 9F E7 BB E8 8C B0 71 76 20 6A 79 29 06 EB 86 27 69 4F 0A 23 6E 7FCC FB A4 AA 6A 73 A5 50 75 9B 9B EC 72 C6 29 43 AD 05 70 75 45 71 CB E5 AB 583C 46 0A 48 9E B7 F2 5E 5F E2 DF 1E 9B EC D9 E9 82 AD 9F 47 03 01 00 01 9F 480A 89 DD 91 7D 3A 28 8B 7B DD 55 9F 49 03 9F 37 04 9F 4A 01 82 90 00
卡片返回:
9F46 :公钥模数;
9F47 : 公钥证书;
9F48 :公钥余数;
9F49 : 动态数据认证数据对象列表-DDOL;
9F4A :静态数据认证标签列表;
send => 00 B201 1C
recv <= 70 1B 5A 08 62 28 00 01 00 00 11 175F 24 03 30 12 31 5F 25 03 95 07 01 9F 08 02 00 30 90 00
卡片返回:
5A :应用PAN,也就是卡号;
5F24 :应用失效日期;
5F25 :应用生效日期;
9F08 :应用版本号;
send => 00 B202 1C
recv <= 70 3C 5F 34 01 01 5F 28 01 56 9F 0702 FF C0 5F 20 0F 46 55 4C 4C 20 46 55 4E 43 54 49 4F 4E 41 4C 5F 30 02 02 019F 42 02 01 56 9F 63 10 11 22 33 44 55 66 77 88 00 00 00 00 00 00 00 00 90 00
卡片返回:
5F34 :应用PAN序列号;
5F28 :发卡行国家代码;
9F07 :应用用途控制;
5F20 :持卡人姓名;
5F30 :服务码;
9F42 :应用货币码
9F63 :产品标识信息;
send => 00 B203 1C
recv <= 70 09 9F 74 06 45 43 43 31 31 31 9000
卡片返回:
9F74 :电子现金发卡行授权码;
5.第五步,风险管理。
在最后一条记录读完的时候,卡片会完成扣款流程。
剩下的工作就是终端需要完成快速脱机动态数据认证,即FDDA,也会有相关的风险管理,比如应用用途控制,卡片日期检查,黑名单检查。
当终端接收到来自卡片的正确的GPO命令响应,将检查发卡行应用数据(标签“9F10”)来确定卡片提供的密文类型。根据密文类型,判断交易拒绝、联机处理或脱机批准。
如果上面的都完成,一个QPBOC交易就完成了。