PBOC流程解析(九) QPBOC(脱机)

POS规范 -- IC卡操作流程 2016/09/27

由银联主推,现在已经大部分都为Q联机了

参考规范第12部分 及小旭博客

(一)文档说明

几个重要的标签

终端交易属性 (9F66)

这个一般是终端预处理就已经准备好了.我这边默认 F6000080

卡片交易属性 (9F6C) 我试过好多卡都是返回的2个字节00 00 ,不过看代码上面是一定要返回的,要是不返回就失败..但是没有去判断他的值.

CVR (返回的9F10中的4.5.6.7字节)

字节 1: 长度字节 03 
字节 2: 
	位 8–7:  
	00=第 2个 GENERATE AC 返回 AAC 
	01=第 2个 GENERATE AC 返回 TC 
	10=不请求第 2个 GENERATE AC 
	11=RFU 
位 6–5: 
	00=第 1个 GENERATE AC 返回 AAC 
	01=第 1个 GENERATE AC 返回 TC 
	10=第 1个 GENERATE AC 返回 ARQC 
	11=不能返回 11 
	位 4:1=发卡行认证执行但失败 
	位 3:1 =脱机PIN 执行 
	位 2:1=脱机 PIN 认证失败 
	位 1:1 =不能联机 
字节 3: 
	位 8:1=上次联机交易没有完成 
	位 7:1=PIN 锁定 
	位 6:1=超过频率检查 
	位 5:1=新卡 
	位 4:1=上次联机交易发卡行认证失败 
	位 3:1=联机授权后,发卡行认证没有执行 
	位 2:1=由于 PIN 锁卡片锁定应用 
	位 1:1=上次交易 SDA 失败交易拒绝 
字节 4: 
	位8–5: 上次交易第2个生成应用密文(GENERATE AC)命令后收到的带有安全报文的发卡行脚本命令 
	位 4:1 =上次交易发卡行脚本处理失败指针 
	位 3:1=上次交易 DDA 失败交易拒绝 
	位 2:1 =DDA 执行 
	位 1:RFU(0) 
在应用初始化时,字节 2-4 置零 

(二)资料解析

GPO对于PDOL的要求是必须含有9F66(借贷记的GPO是可以支持没有PDOL的,终端在GPO只要发送8300就行),如果没有,终端直接拒绝交易

其中如果GPO未返回829F369F269F1057,这几个数据中的任何一个不存在或者缺失,则认为QPBOC处理失败,提示持卡人采用其他方式处理。

如果AFL不存在的话,终端只能进行联机交易,不允许执行脱机交易

GPO示例

举例一个数据:
send: 80A8000023832136000080000000000001000000000000015600000000000156160922002AE0C7D100
recv:775782027C009F3602029D9F101307010103900000010A010000000416ECB4D9869F26084B254F11C80C5B4C9F6C02000057106225760015098846D1911201151488635F34010194101003040010090B0130010100280101009000
77 - 响应报文模板格式2
	Length = 87
	82 - 应用交互特征(AIP)
		Length = 2
		Value = 7C 00 
	9F36 - 应用交易计数器
		Length = 2
		Value = 02 9D 
	9F10 - 发卡行应用数据
		Length = 19
		Value = 07 01 01 03 90 00 00 01 0A 01 00 00 00 04 16 EC B4 D9 86 
	9F26 - 应用密文(AC)
		Length = 8
		Value = 4B 25 4F 11 C8 0C 5B 4C 
	9F6C - 卡片交易属性
		Length = 2
		Value = 00 00 
	57 - 磁条2等效数据
		Length = 16
		Value = 62 25 76 00 15 09 88 46 D1 91 12 01 15 14 88 63 
	5F34 - 应用主账号序列号
		Length = 1
		Value = 01 
	94 - 应用文件定位器(AFL)
		Length = 16
		Value = 10 03 04 00 10 09 0B 01 30 01 01 00 28 01 01 00 
		
分析AFL:
		10 03 04 00 
		10 09 0B 01 
		30 01 01 00 
		28 01 01 00 
接下来根据AFL读取记录:

上面得到9F10的数据为 07 01 01 03 90 00 00 01 0A 01 00 00 00 04 16 EC B4 D9 86

其中9F10发卡行应用数据的4 5 6 7四个字节为CVR(),是卡片验证结果,和终端的TVR如出一辙。这个CVR非常关键。

	90   ---   1 0 0 1 0 0 0 0   
	//----bit 7 - 6 =  1 0 不请求第二个GENERATE AC  
	//----bit 5 - 4 =  0 1 第一个GENERATE AC返回TC  
	//----bit     3 =  0   1=发卡行认证执行但失败  
	//----bit     2 =  0   1=脱机PIN执行  
	//----bit     1 =  0   1=脱机PIN认证失败  
	//----bit     0 =  0   1=不能联机 

所以这个90表明,当前不需要第二次GAC,并且这一次返回的应用密文就是TC,也就是说9F26应用密文是TC。

脱机数据认证--FDDA认证

主要不同流程就是动态数据跟PBOC9F4B不同.这里还是按照第3节一样给出完整的解析步骤:里面的证书格式可以查询规范第7部分(安全规范)


静态数据怎么取参考之前第二节的博客;

注意读记录的时候有返回9F69且第一个字节为01,那么在后面的动态数据认证的时候还要加上(9F02,5F2A,9f69)的值(不要tag跟len)

保存一下待会需要用到认证的静态数据(通过AFL来得到 ):
5F24032312315F25031312165A0862148375504640229F0702FF008E0C000000000000000042031E039F0D05D8609CA8009F0E0500100000009F0F05D8689CF8005F28020156
发卡行公钥证书:
048A6558C3BEE97578CAFE78674367951172B9255AA879D8D5FF446FA243E8C6B215721871E6F070BB08A0C8A64D616A562BC086260D9456FE8815D3981F6AEE79FD56C353A5BC85DE45EAEB403C43E1A4C329FF3A26C852D03DD4F26A128B95E9885BEF9C8CEFB50A18FEDA08BD58A97C6E231C693430918A7B79633D142EFAF1557A7D412B668695C62C1E04689D2C9966A159E4002D66987BA80A0AA8BC49363099ED9DC61361958704861334F667
认证中心公钥:
B0627DEE87864F9C18C13B9A1F025448BF13C58380C91F4CEBA9F9BCB214FF8414E9B59D6ABA10F941C7331768F47B2127907D857FA39AAF8CE02045DD01619D689EE731C551159BE7EB2D51A372FF56B556E5CB2FDE36E23073A44CA215D6C26CA68847B388E39520E0026E62294B557D6470440CA0AEFC9438C923AEC9B2098D6D3A1AF5E8B1DE36F4B53040109D89B77CAFAF70C26C601ABDF59EEC0FDC8A99089140CD2E817E335175B03B7AA33D
指数:000003
解析得到发卡行证书:
6A02621483FF122300107701019001B905EA9C1968F71B65729AB4E546F49B3758A174F3D83FD61E343BCCDC9B011C058073E8DAB62FB119585198BE6FD6E1A4AEDD40F9FFE92DC6B8C515BD35A7AB28912D27A6B028D57F4A5EA72317E693F93FE5F04027B96C33F46C96CFE5BFF52BBAE513D41E6EC1B115E72A3EF750375AAE10DF0E8A1EA55383E7E91EDC8C658615F8EC98C919A5CE82ECD0848E3314EC15E097825C33278D22A9D0EB3D78C4BC
解析一下:
6A
02
621483FF
1223
001077
01
01
90 144个字节 -(92标签公钥余数的长度)4个字节(其中公钥余数为 222AD42B) =140个字节
01
B905EA9C1968F71B65729AB4E546F49B3758A174F3D83FD61E343BCCDC9B011C058073E8DAB62FB119585198BE6FD6E1A4AEDD40F9FFE92DC6B8C515BD35A7AB28912D27A6B028D57F4A5EA72317E693F93FE5F04027B96C33F46C96CFE5BFF52BBAE513D41E6EC1B115E72A3EF750375AAE10DF0E8A1EA55383E7E91EDC8C658615F8EC98C919A5CE82ECD0
848E3314EC15E097825C33278D22A9D0EB3D78C4
BC

验证一下哈希值:
哈希元数据是:(不要忘记补上公钥余数 222AD42B)
02621483FF122300107701019001B905EA9C1968F71B65729AB4E546F49B3758A174F3D83FD61E343BCCDC9B011C058073E8DAB62FB119585198BE6FD6E1A4AEDD40F9FFE92DC6B8C515BD35A7AB28912D27A6B028D57F4A5EA72317E693F93FE5F04027B96C33F46C96CFE5BFF52BBAE513D41E6EC1B115E72A3EF750375AAE10DF0E8A1EA55383E7E91EDC8C658615F8EC98C919A5CE82ECD0222AD42B03
得到848E3314EC15E097825C33278D22A9D0EB3D78C4  校验通过


发卡行公钥:
B905EA9C1968F71B65729AB4E546F49B3758A174F3D83FD61E343BCCDC9B011C058073E8DAB62FB119585198BE6FD6E1A4AEDD40F9FFE92DC6B8C515BD35A7AB28912D27A6B028D57F4A5EA72317E693F93FE5F04027B96C33F46C96CFE5BFF52BBAE513D41E6EC1B115E72A3EF750375AAE10DF0E8A1EA55383E7E91EDC8C658615F8EC98C919A5CE82ECD0222AD42B

接下来解析IC卡公钥证书
IC卡公钥证书 9F46(144个字节) 5EA59C920330F02B2F19B62CAD863C396998F4E4B64AC59D9DFDBE1C45823C50383C036AE6E110277AB846DEBF876F14F0BB5C011C466F979DAD599072C0C33AC6EE22A407513DE205C2C6C10A78CF3C1B6687359BE055C37375584190F0168806A7383F78ED43F98049843001B071FC8651DAD62351A9D8A9FB974759852CA0D74FE630D7FF9B0445AD11877DF71EB1
解析结果是 : 6A046214837550464022FFFF1223983EC801019001DA090A871839B7873B762D97981AE5BAF80A9226D756D63E52F2090FD1062C286C93806F1F0B200F2B9B8B75759DB1270866B48C5B4E9A28B82A6CC973FC0FCD2764BB81A38AA89A0025840DB81B2432FC5499D00FDF061F370D5A006A6583AF056275298FF20970A04A087F0090F5C2D5921D6B8B5BA020AC20BC

已经得到 公钥余项(9F48)42个字节  2862AA8CC734BAD957AE29245E5C09520491455F90D958C6BA74F9E826745E0E24A3AFEEC8D0A0C59519

分析一下:
6A
04
6214837550464022FFFF
1223
983EC8
01
01
90  144个字节减去(9F48)的长度42个字节 得到102个字节  刚好不用补位
01
DA090A871839B7873B762D97981AE5BAF80A9226D756D63E52F2090FD1062C286C93806F1F0B200F2B9B8B75759DB1270866B48C5B4E9A28B82A6CC973FC0FCD2764BB81A38AA89A0025840DB81B2432FC5499D00FDF061F370D5A006A6583AF056275298FF2
0970A04A087F0090F5C2D5921D6B8B5BA020AC20
BC

哈希元数据为  注意加上   03 + 已经得到静态认证数据 + AIP
046214837550464022FFFF1223983EC801019001DA090A871839B7873B762D97981AE5BAF80A9226D756D63E52F2090FD1062C286C93806F1F0B200F2B9B8B75759DB1270866B48C5B4E9A28B82A6CC973FC0FCD2764BB81A38AA89A0025840DB81B2432FC5499D00FDF061F370D5A006A6583AF056275298FF22862AA8CC734BAD957AE29245E5C09520491455F90D958C6BA74F9E826745E0E24A3AFEEC8D0A0C59519035F24032312315F25031312165A0862148375504640229F0702FF008E0C000000000000000042031E039F0D05D8609CA8009F0E0500100000009F0F05D8689CF8005F280201567C00

结果是 0970A04A087F0090F5C2D5921D6B8B5BA020AC20 校验成功



这个步骤跟之前PBOC不同,之前是发命令 获取动态签名数据 现在是直接认证9f4b(FDDA)
9F4B数据为  3905B36C33020C2427A541705EE843AD6D4DD4AB7C68B9F7F365407DDD276134453230DF96D625208A9195DDE3286BCA0FF7B1DACC63FB219DBD320C2FE9C0DA793D16B11F78AA2F0FC7B3F541DB691A3E19E753ECB34D2B2E90DBD06D4740687BD9241959798FE2EFD6EDC819866228AFC6772E3A3D0EC8749EC90443448791E635196278E772709E8120E1556FBAC1
用之前得到的IC卡公钥   DA090A871839B7873B762D97981AE5BAF80A9226D756D63E52F2090FD1062C286C93806F1F0B200F2B9B8B75759DB1270866B48C5B4E9A28B82A6CC973FC0FCD2764BB81A38AA89A0025840DB81B2432FC5499D00FDF061F370D5A006A6583AF056275298FF22862AA8CC734BAD957AE29245E5C09520491455F90D958C6BA74F9E826745E0E24A3AFEEC8D0A0C59519
解密得到: 6A0501030200C2BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB3C37A97F541043ECF60DA3639B59633F573DF430BC

哈希认证时需要加上 之前我们GPO发送的随机数(9F37)141480E1
0501030200C2BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB141480E1
哈希出来的校验值是 : 3C37A97F541043ECF60DA3639B59633F573DF430  验证成功

有张卡读记录的时候返回了9F69  那么我们哈希时元数据  随机数 + 9F02,5F2A,9f69
0501030202F2BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB F1BFA3CE 000000000001 0156 01DAD26CFF000000

(三)源码片段分析

(四)常见问题及分析

1.如果最后一条命令是读记录(就是00 B2开头的)而IC卡的钱被扣了而终端提示交易失败 基本是没有匹配公钥导致的。 需要看下IC卡参数及IC卡公钥是否已经准备就绪..如果不存在当然直接就报错了

2.如果最后一条命令是GPO命令(就是80 A8开头的) 那么一般是IC卡余额不足而转联机了。

3.针对有些场景需要先刷卡再输入密码;可以试试PBOC2.0的0201DGI(00B2011444)获取,如果获取失败只能尝试0金额交易 获取卡号,不过这样相当于做了两次交易,时间上会比较慢 cPBOC3.0的闪卡方案来限制已经扣钱但是交易失败情况..可能原因 1.终端在后续执行脱机数据校验时,发生失败,如:终端程序错误,证书错误,卡片假卡。 2.卡片返回最后一条记录,但是终端未收到。

4.电子现金余额查询直接选择AID后,再发送GETDATA命令 查询余额

SEND: 80CA9F7900
RECV:9F7906000000000085
得到电子现金余额0.85元

5. 电子现金中FDDA认证的动态数据是9F4B的数据读记录时返回。而PBOC是通过 内部认证命令[00 88]来获取动态签名数据。 后续认证都一样...只是简化了动态数据的获取而已.

6.脱机数据认证后就可以打印小票了,不需要再去接下来的什么步骤

7.如果脱机转成联机,关注电子现金余额还有授权金额等各种金额的判断…


脱机的电子现金还涉及到上送到后台(保存)..这个到时候在POS那边在详细说说…



扫描关注我

(转载本站文章请注明作者和出处 Undefined

Post Directory