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名和應用優先權標識符在任何情況下都可能需要。