PBOCEMV交易流程详解POS与卡片的数据交互进行分析.docx
《PBOCEMV交易流程详解POS与卡片的数据交互进行分析.docx》由会员分享,可在线阅读,更多相关《PBOCEMV交易流程详解POS与卡片的数据交互进行分析.docx(12页珍藏版)》请在冰豆网上搜索。
PBOCEMV交易流程详解POS与卡片的数据交互进行分析
PBOC/EMV-交易流程详解--POS与卡片的数据交互进行分析
符号说明:
RFU:
预留使用
近期在调试pboc的交易,就萌生了把所有数据交互进行分析的想法,目的是抛砖引玉,希望有高手指正本文错误,或者理解不透彻的地方。
事不宜迟,下面是pboc交易的开始:
检测插片,检测卡片存在后:
(1):
选择支付环境pse:
1PAY.SYS.DDF01
选择(SSELECT)报文,00A4xx(通过命令选择)xx(第一个或仅有一个)
a4############################################
[ICLEN:
20]
[00][a4][04][00]
[0e][31][50][41][59][2e][53][59][53][2e][44][44][46][30][31][00]
SELECTSENDENDdd
qwe#######################################################
#######################################################
[GETLEN:
40]
[6f][24]
[84][0e][31][50][41][59][2e][53][59][53][2e][44][44][46][30][31]
[a5][12]
[88][01][01]
[5f][2d][08][7a][68][65][6e][66][72][64][65]
[9f][11][01][01]
[90][00]SELECTGETENDdd
#######################################################
对PSE支付环境的响应
6F:
FCI模板
84:
DF名称
A5:
FCI专用模板
88:
目录基本文件的SFI(高三位为0,后面补100,进行读取文件数据)
5F2D:
首选语言
9F11:
发卡行代码表索引
BF0C:
发卡行自定义数据--(该卡没有带此数据)
FCI(文件控制信息)包含FCI(短文件标识符),目录中的每个应用列出一个应用。
--至此,PSE选择完成。
如果卡片对选择支付环境的响应不是9000,POS需要尝试逐个选择AID
(2):
选择与PSE相关联的一个基本文件,该文件会列出所支持的支付应用。
(读记录)READRECORD00b2xx(记录号)xx(表明读记录号)
b2############################################
[ICLEN:
5]
[00][b2][01][0c][00]SELECTSENDENDdd
#######################################################
asd#######################################################
[GETLEN:
49]
[70][2d]
[61][2b]
[4f][07][a0][00][00][03][33][01][01]
[50][0b][50][42][4f][43][20][43][72][65][64][69][74]
[87][01][01]
[9f][12][0f][43][41][52][44][20][49][4d][41][47][45][20][30][30][30][31]
[90][00]SELECTGETENDdd
#######################################################
卡片的响应:
70xx(长度)xx(记录模板)
70:
基本数据模板
61:
应用模板,有pse才会存在,包含应用目录入口相关的数据对象
4F:
应用标识符=RID+PIX(应用提供商和专用应用标识符)
50:
应用标签,EMV规定为必备数据,用于应用选择,与AID相关的便于记忆的数据此处为PBOCCredit
87:
应用优先指示器,如果卡片有多个应用,指出同一目录中应用的优先级。
bit8=》1:
没有持卡人确认应用不能选择;0:
没有持卡人确认可以选择应用
bit7-bit5:
RFU
bit4-bit10000:
不指定优先级。
:
xxxx:
1-15,1优先级最高
9f12:
应用首选名称此处是:
CARDIMAGE0001
获得一个AID后,应该选入AID列表
继续读取文件的下一个记录
b2############################################
[ICLEN:
5]
[00][b2][02][0c][00]SELECTSENDENDdd
#######################################################
asd#######################################################
[GETLEN:
2]
[6a][83]SELECTGETENDdd
#######################################################
直到没有任何记录可读取
(3):
根据读取的记录的应用标识符加入AID列表,然后根据用户按键进行选择应用或者根据优先级选择应用。
a4############################################
[ICLEN:
13]
[00][a4][04][00][07][a0][00][00][03][33][01][01][00]SELECTSENDENDdd
qwe#######################################################
#######################################################
[GETLEN:
48]
[6f][2c]
[84][07][a0][00][00][03][33][01][01][a5][21][87][01][01]
[9f][38][0c]
[9f][1a][02]
[9f][7a][01]
[9f][02][06]
[5f][2a][02]
[5f][2d][08][7a][68][65][6e][66][72][64][65]
[9f][11][01][01]
[90][00]SELECTGETENDdd
#######################################################
--选择ADF的响应报文
6F:
FCI模板
84:
DF名称
9F38:
PDOL的数据(9F1A:
终端国家代码;9F7A:
电子现金指示器,9F02:
授权金额,5F2A:
交易货币代码)
5F2D:
首选语言
9F11:
发卡行代码表索引
进行最终选择,要求用户输入金额,判断POS是否能走电子现金交易路径,表示电子现金指示器。
(4):
获取处理选项(GPO)通知卡片交易开始。
根据PDOL选项进行组包。
GPO指令的发送80a80000xx(长度)83(PDOL标签)xx(PDOL长度)xxxx(数据)
a8############################################
[ICLEN:
19]
[80][a8][00][00][0d]
[83][0b]
[01][56]
[01]
[00][00][00][00][00][09]
[01][56]
[00]SELECTSENDENDss
#######################################################
#######################################################
[GETLEN:
18]
[80][0e]
[58][00]
[08][01][01][00]
[10][01][04][01]
[18][01][03][00]
[90][00]SELECTGETENDss
#######################################################
GPO的响应格式包括:
80xx(长度)xx(应用交互特征)xx(AFL)
如上,应用交互特征为:
5800
解析:
bit8:
RFU;
bit7:
1=支持SDA;
bit6:
1=支持DDA;
bit5:
1=支持持卡人认证
bit4:
执行终端风险管理
bit3:
支持发卡行认证
bit2:
RFU
bit1:
1=支持CDA
字节2:
RFU
AFL(应用文件定位器),每个AFL包括4个字节
字节1:
bit8-bit4:
SFI(短文件标识符)
bit3-bit1:
000
字节2:
文件中要读的第1个记录的记录号(不能为0)
字节3:
文件中要读的最后一个记录的记录号(大于或等于字节2)
字节4:
从字节2的记录好开始,用于静态数据记录的个数(从0开始,不大于(字节3)-(字节2)+1)
根据GPO返回的AFL,读文件。
读文件号格式为:
SFI左移3位,右边补100。
比如上面的08十六进制就是00001000bit8-bit4才是SFI,所以真实的是:
00000001,读取文件的时候,右补0100(表明读取指定记录),得到00001100,就是0x0c。
同理,02文件就是:
0x14
b2############################################
[ICLEN:
5]
[00][b2][01][0c][00]SELECTSENDENDdd
#######################################################
asd#######################################################
[GETLEN:
66]
[70][3e]
[5f][20][0f][46][55][4c][4c][20][46][55][4e][43][54][49][4f][4e][41][4c]
[57][11][62][28][00][01][00][00][11][17][d1][01][22][01][01][23][45][67][89][9f][1f][16][30][31][30][32][30][33][30][34][30][35][30][36][30][37][30][38][30][39][30][41][30][42]
[90][00]