PBOC规范研究之七 ----应用选择(转)
PBOC3.0里选择应用总是从选择PPSE开始的,称为支付系统环境。对于非接触卡,选择的字符系统环境为1PAY. SYS. DDF01,而对于非接触卡选择的支付系统环境为”2PAY.SYS.DDF01”
PBOC支持两种搜索目录的方式:第一种为目录选择方式,第二种为AID列表选择方式,现在就对这两种方式分别介绍。在介绍之前,大家必须实现知道两个专用术语:
“AID”用于终端上的应用标识符,
“DF名”用于卡上的应用标识符
第一种、目录选择方式
选择支付系统环境的命令为:
代码 |
值 |
CLA |
‘00’ |
INS |
‘A4’ |
P1 |
引用控制参数(见表1) |
P2 |
选择选项(见表2) |
Lc |
‘05’-‘10’ |
Data |
文件名 |
Le |
‘00’ |
表1 SELECT命令引用控制参数
b8 |
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
含义 |
0 |
0 |
0 |
0 |
0 |
|
|
|
|
|
1 |
通过名称选择 |
||||||
|
0 |
0 |
|
表2定义了选择(SELECT)命令报文的选择选项P2:
表2 选择(SELECT)命令的可选参数
b8 |
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
含义 |
|
0 |
0 |
第一个有或仅有一个 |
|||||
1 |
0 |
下一个 |
选择PSE后,卡片返回的数据源如下所示:
表3 选择PSE的响应报文(FCI)
标识 |
值 |
存在性 |
|||
‘6F’ |
FCI模板 |
M |
|||
|
‘84’ |
DF名 |
M |
||
‘A5’ |
FCI数据专用模板 |
M |
|||
|
‘88’ |
目录基本文件的SFI |
M |
||
‘5F2D’ |
语言选择 |
O |
|||
‘9F11’ |
发卡行代码表索引 |
O |
|||
‘BF0C’ |
发卡行自定义数据(FCI) |
O |
|||
|
‘XXXX’ (根据附录B建立的标签) |
来自从应用提供商、发卡行或IC卡供应商或JR/T 0025定义的专属于’BF0C’标签的1个或多个附加(专用)数据元。 |
O |
||
其中,M表示必须存在,O表示可选。标签值84称为专用文件名称,即DDF名称,如果这个84标签的值和你选择的支付系统名称相同,则可以直接采用AID列表方式搜索应用。这里标签值88是个关键,终端需要保存起来,通过这个SFI读取记录文件,遍历卡片应用系统目录,以便搜索到可以支持的应用。
其中读记录文件的命令如下所示:
表4 读记录命令报文
代码 |
值 |
CLA |
‘00’ |
INS |
‘B2’ |
P1 |
记录号 |
P2 |
引用控制参数(见表5) |
Lc |
不存在 |
Data |
不存在 |
Le |
‘00’ |
表5定义了命令报文的引用控制参数。
表5 读记录命令引用控制参数
b8 |
b7 |
b6 |
b5 |
b4 |
B3 |
b2 |
b1 |
含义 |
X |
X |
X |
X |
X |
|
SFI |
||
|
1 |
0 |
0 |
P1为记录号 |
支付系统目录(以下简称目录)是一个线性EF文件,用1到10的短文件标识符(SFI)标识。目录可以使用第7章中所定义的读记录(READ RECORD)命令进行读取。一个记录可以包含几个入口地址,但一个入口地址只能封装在一个记录中。
支付系统目录中的每一个记录都是一个结构数据对象,其值由如下所示的一个或多个目录的入口组成。
每个记录的格式,见表7。
表6 支付系统目录记录格式
‘70’ |
数据域长度 (L) |
标识符 ‘61’ |
目录入口1长度 |
目录入口1 (ADF) |
…… |
标识符 ‘61’ |
目录入口n 长度 |
目录入口n (ADF) |
支付系统目录记录中应当不包含任何通往DDF的入口。如果终端在处理这些记录时遇到了DDF的入口,终端可以忽略这些入口或者处理这些入口,处理入口的方法不在JR/T 0025的讨论范围内。
支付系统目录中的每一个入口都是一个应用模板(标签‘61’),它包含表42或表43所示的信息。除了在模板‘73’中包含的数据元,任何附加数据元都不能在支付系统目录记录(标签‘70’)中出现。由于终端不支持任何发卡行特定操作而未预期的或不能解释的,在支付系统目录记录中出现的模板‘61’或‘73’数据元,都应该被忽略。
任何没有封装在目录记录的应用模板(标签‘61’)当中的数据对象或其它在目录入口中出现但是没有在表7中列出的数据对象都应该被忽略。
表7 ADF目录入口格式
标签 |
长度 |
值 |
存在方式 |
|
‘4F’ |
5-16 |
ADF名称(AID) |
M |
|
‘50’ |
1-16 |
应用标签 |
M |
|
‘9F12’ |
1-16 |
应用优先名称 |
O |
|
‘87’ |
1 |
应用优先权标识符 |
O |
|
‘73’ |
变长 |
目录自定义模板 |
O8 |
|
|
‘XXXX’ (根据附录B建立的标识符) |
变长 |
应用提供商、发行商或IC卡供应商、或JR/T 0025定义的专属于模板’73’的标签增加的1个或多个附加(专用)数据元。 |
O |
表8 应用优先权标识符格式
b8 |
b7-b5 |
b4-b1 |
定义 |
1 |
|
需要持卡人确认方可选择应用 |
|
0 |
不需持卡人确认即可选择应用 |
||
|
‘XXX’ |
|
预留 |
|
0 0 0 0 |
未指定优先权 |
|
‘XXXX’ (0 0 0 0除外) |
应用的排列或选择顺序,从1-15,其中最高优先权为1 |
终端需要搜索每一个标签61的值,其中4F的值就是我们需要的AID,在保存这些AID之前,终端需要先进行判断自己是否支持对这些AID进行操作,不支持则丢弃掉,支持的话则保存起来,这个50标签是银联强烈建议存在的,我层操作过一些卡发现有的卡里其实并没有这个标签,当没有这个标签时,就存在一个问题:如果卡片仅支持一个应用。且应用优先级指示器的最高位为1,即终端必须将这个应用的名称显示出来让持卡人选择,如果没有这个50标签,请问持卡人怎么选择?同样的道理如果卡片里有多个应用,优先级分别为1、2、3、5、5,这个时候终端最好的办法是按优先级将所有应用从高优先级到低优先级排列,如果优先级相同,则按照卡片返回的顺序进行排列,如果有多个应用没有指定优先级则也按照卡片返回的顺序排列优先级并显示给持卡人,让持卡人选择,如果没有标签50,那么持卡人就没法进行选择。
使用目录方法的选择流程如下图所示:
下面是终端使用目录方法的步骤:
步骤1: 终端通过使用选择(SELECT)命令(见第11章)来选择文件名为“1PAY.SYS.DDF01”的支付系统环
境 而开始,由此建立支付系统环境并进入初始目录。
如果卡被锁定或者选择(SELECT)命令不支持(这两种情况都会回送状态字SW1 SW2
=“6A81”), 终端必须中断选择过程。
如果IC卡上没有PSE,那么IC卡应该对PSE的选择(SELECT)命令回送状态字“6A82”(文件没有找
到)。在这种情况下,终端必须使用AID应用列表的方式。
如果PSE被锁定,IC卡应该回送状态字“6283”。在这种情况下,终端应该使用AID应用列表的方式。
如果IC卡回送状态字SW1 SW2 =“9000”,终端则转入步骤2。
如果卡回送其他状态字SW1 SW2,终端应该使用12.3.3条所描述的使用应用列表的方式。
如果在步骤2到步骤5中出现任何错误(包括SW1 SW2 ≠“90 00”,“6A 83”),终端应清除候选列
表AID应用列表方式重新进行应用选择,以寻找匹配的应用。
步骤2: 终端使用卡片返回的FCI中的目录SFI,从目录的第1条记录开始,连续读取后续记录,直到卡回送状态字
SW1 SW2=“6A83”,表示所请求的记录序号已不存在(如果读记录(READ RECORD)命令中记录
号大于文件的最后一条记录号时,卡应该回送状态字“6A83”)。如果在执行读记录(READ
RECORD)命令查找第1个记录时,卡回送状态字“6A83”,则表示目录入口为空,转到下面的步骤
5。
对于目录中的每一条记录,终端从第一个目录入口开始,依次对每个目录入口顺序执行步骤3和步骤4所
描述的过程。如果某条记录中不含有目录入口,则终端处理下一条记录。
步骤3: 如果该入口对应某一ADF,且ADF名与终端支持的一个应用相匹配,则在应用选择指示器(ASI)(保
存在终端中,与该AID对应)的控制下将该应用列入最终应用选择的“候选列表”中。
应用选择指示器(ASI)表明终端的应用标识符应完整匹配(长度和值都相同)还是只需部分匹配卡片
中相关的ADF名(标签为‘4F’)。
在下面任一种情况下,该应用将被选入候选列表:
——获得的入口中的ADF是完整匹配,或者
——对应终端中该AID的应用选择指示器(ASI)表明允许部分名称匹配。
如果得到的ADF入口不是完整匹配,并且终端AID的应用选择指示器表明须要完整匹配时,应用不能被
加入候选列表。
步骤4: 当终端处理完最后一个记录中的所有入口后,所有能够按此方法找到的ADF就被确定了,查找和产生
候选列表的工作完成。如果发现了至少一个匹配的ADF,终端将继续执行第三节、应用选择方式条所
描述的处理过程。
如果步骤1到步骤4中没有发现与终端支持的应用所匹配的目录入口,终端应该使用AID应用列表的方
式 来寻找匹配的应用。
第二种:AID列表选择方式
AID 列表选择的方式说的简单一点就是暴力穷举的方式,这是在目录选择方式失败后所采取的方法,具体的操作过程就是终端根据自己支持的AID列表,使用保存在终端的AID列表里的AID逐次发给卡片进行尝试,如果返回的状态字为SW=9000则表示卡片支持该应用,那么就应该将这个AID加入到支持列表。尝试完保存在终端的所有AID后,终端得到一组双方都支持的AID列表,如果只支持一个应用,且优先级指示符的最高位为1,则终端可让持卡人对该应用进行确认后再进行操作,否则直接选择该应用进行操作。如果有多个支持的应用,则应该根据优先级指示器对其进行排序,如果有多个应用的优先级相同则按照卡片返回的顺序进行排列,如果有多个应用没有指定优先级则同样按照卡片返回的顺序,没有制定优先级默认为优先级最低。具体的操作流程如下图:
步骤1: 终端使用其列表中的第一个AID为文件名发出选择(SELECT)命令。
步骤2: 如果卡被锁定或者选择(SELECT)命令不支持导致选择(SELECT)命令失败(IC卡回送状态字SW1
SW2=“6A81”), 终端将中断选择过程。
步骤3: 如果选择(SELECT)命令执行成功(SW1 SW2=“9000”或“6283”),终端应比较AID和卡返回
的FCI中的DF名。DF名应该同AID相同(包括长度),或者DF名以AID为开始并且长度大于AID。如
果DF名比AID长,卡将进行部分名称选择处理。如果DF名同AID相同,终端应进入到步骤4。如果进
行了部分名称选择,终端应进入步骤6。如果终端返回其它状态,应进入步骤5。
步骤4: 如果选择(SELECT)命令成功(SW1 SW2=“9000”),终端应将所选择文件的FCI信息添加到候
选列表中并进入步骤5。如果应用已锁定(SW1 SW2 =“6283”),终端应直接进入步骤5而不将
DF名添加到候选列表。
步骤5: 终端使用其列表中的下一个AID发出另一个选择(SELECT)命令,回到步骤3。如果列表中没有剩余
的AID,那么候选列表建立完成,终端按照第三节应用选择方法中规定的步骤进行后续处理。
步骤6: 对应于AID列表,终端还保存了表明卡是否允许有多个应用匹配的应用选择指示器。终端在选择应用
时会检查该指示符。如果指示符表明需要完整匹配(包括长度和名称),那么终端将不会把文件添加
到候选列表,而是进入步骤7。
如果允许多应用匹配,那么部分名称匹配即可。
如果应用没有锁定(SW1 SW2 =“9000”),终端将会添加FCI信息到候选列表,然后进入步骤7。
如果允许多应用匹配但是应用已锁定(SW1 SW2 ≠“9000”),则终端应直接进入步骤7而不将
FCI 信息添加到候选列表。
步骤 7: 终端使用与之前相同的命令数据,但将命令中的P2参数设置为02(“选择下一个”),重复发出选择
(SELECT)命令,如果IC卡返回状态字SW1 SW2=“9000”,“62XX”,或者“63XX”,然后回
到步骤3。如果返回其它状态字,终端转到步骤5。
第三、应用选择方法
当终端确定了卡与终端共同支持的应用列表之后,就进行如下处理:
步骤1: 如果没有共同支持的应用,交易终止。
步骤2: 如果只有一个共同支持的应用,则如果有应用优先级标识符(API),终端检查该应用的应用优先级
标识符的b8位。如果b8=‘0’,则终端选择该应用。如果b8=‘1’并且终端提供持卡人的确认功
能,终端即请求持卡人确认。如持卡人确认,则选择该应用。如果终端不提供持卡人的确认功能,或
终端请求确认而持卡人拒绝,则终端终止该交易过程。
步骤3: 如果有多个共同支持的应用,则可以按照步骤4中的描述显示列表供持卡人选择,或者按照步骤5的描
述自动完成选择。步骤4是首选的方法。
步骤4: 如果向持卡人显示列表,则该列表应该按照级别优先的顺序排列,高优先级的应用应该在前。如果
卡 上没有指定应用的优先顺序,则以终端的应用优先顺序为准,如果终端也没有指定应用的优先顺
序,则按照应用在卡中出现的顺序为准。如果出现多个应用有相同的优先级,或某个入口缺少应用优
先级标识符的情况,也可采用类似的方法。也就是说,在这种情况下,终端可以使用自己的优先顺
序,也可以按卡上应用出现的的顺序将有重复优先级或没有优先级的应用显示出来。
步骤5: 终端可以无需持卡人的介入而直接选择应用。在这种情况下,终端从共同支持的应用列表中选择优先
级别最高的应用。如果终端不提供持卡人对选择的应用确认,则那些不经过持卡人确认就不能选择的
应用(应用优先级标识符的b8=‘1’)应从可选列表从删除。
一旦终端或持卡人确定了待执行的应用,则该应用应被选中。终端向该应用发出选择(SELECT)命
令(按照第11章进行编码,使用建立候选列表时得到的ADF名称(如果采用目录方式)或者FCI中的
DF名(如果采用应用列表方式)作为数据域)。如果命令回送的状态字SW1 SW2≠“9000”,或者
选择命令的响应中有格式错误,则此应用应该从候选列表中删除,然后回到步骤1。如果持卡人选择
或确认了某个应用,而随后该应用又因为应用锁定或其它原因被从候选列表中删除,则应用不能在没
有持卡人确认的情况下被选中。
在任何情况下,终端应该在适当的时候提示持卡人相关动作的完成。
第四、本规范中AID编码的定义
本规范采用GB/T 16649.5规定的应用标识符(AID)基本结构,应用标识符(AID)长度为5-16个字节,由5个字节的注册的应用提供者标识符(RID)和0-11个字节的专有应用标识符扩展(PIX)组成。
应用标识符(AID)唯一标识卡中的应用。由申请机构向金融行业主管部门申请,由管理部门统一组织分配。
应用提供者标识符(RID)总体编码
依据GB/T16649.5关于AID的规定,应用标识符(AID)编码如下所示:
表9 应用标识符(AID)编码
应用提供者标识符(RID) |
专有应用标识符扩展(PIX) |
5个字节 |
0至11个字节 |
具体定义请见表10。
应用类型代码必须出现,其定义请见表11。
保留位可选出现,若该字段不出现,则其后续字段不应当出现。若该字段出现,则该字段取值由发卡机构自行定义。
专有定义标识可选出现,若该字段不出现,则专有定义字节不应当出现。若该字段存在,则其定义参见表10。
专有定义字节可选出现。
表10 专有应用标识符扩展(PIX)编码
应用类型代码 |
保留位 |
专有定义标识 |
专有定义字节 |
3个字节 |
0-1个字节 保留给发卡机构 |
0-1个字节 00表示专有定义字节中的内容由本规范保留定义 01-FF保留 |
0-6个字节 |
应用类型代码第1字节为00-FE的应用类型代码,保留给本规范使用。其取值的部分定义见表11。
应用类型代码第1字节为FF的应用类型代码,保留给发卡机构使用。
表11 应用类型代码定义
值 |
定义 |
01 01 01 |
借记 |
01 01 02 |
贷记 |
01 01 03 |
准贷记 |
如果在最终选择期间给持卡人提供列表,则应用标签和应用优先名称必须保存。DF名和应用优先权标识符在任何情况下都可能需要。