由银联主推,现在已经大部分都为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未返回82,9F36,9F26,9F10、57,这几个数据中的任何一个不存在或者缺失,则认为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)