第一、GPO命令
GPO命令主要的功能時告訴卡片,交易的金額,是否支持電子現金,以及終端的交易屬性等參數,在選擇應用時,卡片會返回一個PDOL標簽值,其標簽為9F38,終端應該保存這個列表,GPO命令的數據域就是依據PDOL列表發送的,數據發送的順序是按照標簽在PDOL中的順序排列的。
舉例來說:
卡片返回的PDOL數據:9F66049F02069F03069F1A0295055F2A029A039C019F3704
具體解析如下
9F6604 標簽9F66的定義如下:
表1 終端交易屬性(標簽為“9F66”)
字節 |
位 |
定義 |
1 |
8 |
預留 |
7 |
1 – 支持非接觸式借記/貸記應用 0 – 不支持非接觸式借記/貸記應用 |
|
6 |
1 – 支持qPBOC 0 – 不支持qPBOC |
|
5 |
1 – 支持接觸式借記/貸記應用 0 – 不支持接觸式借記/貸記應用 |
|
4 |
1 – 終端僅支持脫機 0 – 終端具有聯機能力 |
|
3 |
1 – 支持聯機PIN 0 – 不支持聯機PIN |
|
2 |
1 – 支持簽名 0 – 不支持簽名 |
|
1 |
預留 |
|
2 |
8 |
1 – 要求聯機密文 0 – 不要求聯機密文 |
7 |
1 – 要求CVM 0 – 不要求CVM |
|
6-1 |
預留 |
|
3 |
8-1 |
預留 |
4 |
8-1 |
預留 |
終端在GPO命令中應該如實的將終端的性能參數等發給卡片,以便卡片進行下一步的操作。
9F0206 授權金額
所謂授權金額,其實就是在交易時你要消費的金額。或者說終端機持有人輸入的金額,然后要求你輸入密碼確認。
這個授權金額為6個字節,每半個字節代表10進制的一位,且單位為分,請注意不是“元”
例如假如你的銀行卡里有563.99元人民幣,那么存儲的數據格式應該是:
0 0 0 0 0 0 0 5 6 3 9 9剛好占用6個字節
9F03 06,這個是其它金額,目前還沒有定義,全部輸入6個字節的0
9F1A 02 終端國家代碼,中國的國家代碼為01 56
95 05 是終端驗證結果,這5個字節定義如下:
字節1:
b8 |
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
意義 |
1 |
x |
x |
x |
x |
x |
x |
x |
未進行脫機數據認證 |
x |
1 |
x |
x |
x |
x |
x |
x |
脫機靜態數據認證失敗 |
x |
x |
1 |
x |
x |
x |
x |
x |
IC卡數據缺失 |
x |
x |
x |
1 |
x |
x |
x |
x |
卡片出現在終端異常文件中 |
x |
x |
x |
x |
1 |
x |
x |
x |
脫機動態數據認證失敗 |
x |
x |
x |
x |
x |
1 |
X |
x |
復合動態數據認證/應用密文生成失敗 |
x |
x |
x |
x |
x |
x |
0 |
x |
RFU |
x |
x |
x |
x |
x |
x |
x |
0 |
RFU |
字節2:
b8 |
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
意義 |
|
|
|
|
|
|
|
|
|
1 |
x |
x |
x |
x |
x |
x |
x |
IC卡和終端應用版本不一致 |
x |
1 |
x |
x |
x |
x |
x |
x |
應用已過期 |
x |
x |
1 |
x |
x |
x |
x |
x |
應用尚未生效 |
x |
x |
x |
1 |
x |
x |
x |
x |
卡片不允許所請求的服務 |
x |
x |
x |
x |
1 |
x |
x |
x |
新卡 |
x |
x |
x |
x |
x |
0 |
x |
x |
RFU |
x |
x |
x |
x |
x |
x |
0 |
x |
RFU |
x |
x |
x |
x |
x |
x |
x |
0 |
RFU |
字節3:
b8 |
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
意義 |
1 |
x |
x |
x |
x |
x |
x |
x |
持卡人驗證失敗 |
x |
1 |
x |
x |
x |
x |
x |
x |
未知的CVM |
x |
x |
1 |
x |
x |
x |
x |
x |
PIN重試次數超限 |
x |
x |
x |
1 |
x |
x |
x |
x |
要求輸入PIN,但密碼鍵盤不存在或工作不正常 |
x |
x |
x |
x |
1 |
x |
x |
x |
要求輸入PIN,密碼鍵盤存在,但未輸入PIN |
x |
x |
x |
x |
x |
1 |
x |
x |
輸入聯機PIN |
x |
x |
x |
x |
x |
x |
0 |
x |
RFU |
x |
x |
x |
x |
x |
x |
x |
0 |
RFU |
字節4:
b8 |
b7 |
b6 |
B5 |
b4 |
b3 |
b2 |
b1 |
意義 |
1 |
x |
x |
x |
x |
x |
x |
x |
交易超過最低限額 |
x |
1 |
x |
x |
x |
x |
x |
x |
超過連續脫機交易下限 |
x |
x |
1 |
x |
x |
x |
x |
x |
超過連續脫機交易上限 |
x |
x |
x |
1 |
x |
x |
x |
x |
交易被隨機選擇聯機處理 |
x |
x |
x |
x |
1 |
x |
x |
x |
商戶要求聯機交易 |
x |
x |
x |
x |
x |
0 |
x |
x |
RFU |
x |
x |
x |
x |
x |
x |
0 |
x |
RFU |
x |
x |
x |
x |
x |
x |
x |
0 |
RFU |
字節5:
b8 |
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
意義 |
1 |
x |
x |
x |
x |
x |
x |
x |
使用缺省TDOL |
x |
1 |
x |
x |
x |
x |
x |
x |
發卡行認證失敗 |
x |
x |
1 |
x |
x |
x |
x |
x |
最后一次GENERATE AC命令之前腳本處理失敗 |
x |
x |
x |
1 |
x |
x |
x |
x |
最后一次GENERATE AC命令之后腳本處理失敗 |
x |
x |
x |
x |
0 |
x |
x |
x |
RFU |
x |
x |
x |
x |
x |
0 |
x |
x |
RFU |
x |
x |
x |
x |
x |
x |
0 |
x |
RFU |
x |
x |
x |
x |
x |
x |
x |
0 |
RFU |
這個標簽的含義在於終端將自己操作過程中碰到的錯誤告訴卡片,卡片根據這個來決定是否拒絕交易,或者需要連接進行確認。這個實在終端行為分析和終端風險管理中進行賦值操作的。
5F2A 02 是交易貨幣代碼,中國的交易貨幣代碼和國家代碼一致都是0156
9A 03 9A是交易日期,按年 月 日的方式排列,同樣,每半個字節表示一個十進制數
例如交易時間是2014年10月21日,那么這個標簽值就是 1 4 1 0 2 1 從10進制的角度來就是20 16 33
9C 01 這是交易類型,交易類型的定義如下:
字節1:交易類型性能
b8 |
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
意義 |
1 |
x |
x |
x |
x |
x |
x |
x |
現金 |
x |
1 |
x |
x |
x |
x |
x |
x |
商品 |
x |
x |
1 |
x |
x |
x |
x |
x |
服務 |
x |
x |
x |
1 |
x |
x |
x |
x |
返現 |
x |
x |
x |
x |
1 |
x |
x |
x |
查詢 |
x |
x |
x |
x |
x |
1 |
x |
x |
轉賬 |
x |
x |
x |
x |
x |
x |
1 |
x |
付款 |
x |
x |
x |
x |
x |
x |
x |
1 |
管理 |
字節2:交易類型性能
b8 |
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
意義 |
1 |
x |
x |
x |
x |
x |
x |
x |
存款交易 |
x |
0 |
x |
x |
x |
x |
x |
x |
RFU |
x |
x |
0 |
x |
x |
x |
x |
x |
RFU |
x |
x |
x |
0 |
x |
x |
x |
x |
RFU |
x |
x |
x |
x |
0 |
x |
x |
x |
RFU |
x |
x |
x |
x |
x |
0 |
x |
x |
RFU |
x |
x |
x |
x |
x |
x |
0 |
x |
RFU |
x |
x |
x |
x |
x |
x |
x |
0 |
RFU |
這里我們只需將第一個字節傳給卡片就行,這是附加終端性能的第一個字節,具體定義在第6部分
9F37 04,不可預知數,隨意,最好去隨機數
GPO 命令將這些參數傳入到卡中,傳入的次序與PDOL的次序一致。例如
GPO:80A80000238321600000000000000000000000000000000156000000000001561405306099999999
分解如下21
60000000 終端交易屬性
000000000000授權金額
000000000000其它金額
0156 發卡行國家代碼
0000000000 終端交易屬性tvr
0156 交易貨幣代碼
140530 交易日期 14年5月30日
60 交易類型,為國內服務或者商品
99999999 不可預知數
如果這張卡片式支持電子現金交易,那么其PDOL數據中比尋存在9F7A標簽,否則檢測時通不過。
第二、GPO響應
GPO命令的響應與你所選擇的用用有關,例如你選擇了qPBOC那么返回的會是以77為首的標簽,以77為首的標簽也會返回ATC與AFL但是數據是以TLV格式返回的,當以80為首返回時,返回的格式如下:
AIP和AFL,其中AFL是以4字節的倍數存在的。
例如
響應:800E7C000801020010010401180103009000
響應命令的解析如下:
80標簽
0E長度
7C00 表示應用交互特征AIP AIP的定義如下:
字節1:
位8:1=RFU
位7:1=支持SDA
位6:1=支持DDA
位5:1=支持持卡人認證
位4:1=執行終端風險管理
位3:1=支持發卡行認證
位2:RFU(0)
位1:1=支持CDA
字節2:RFU(“00”)
這個列表說明了卡片的支持能力
同樣終端如果也支持響應的功能則在交易的過程中將選擇響應的功能,需要注意的是對於認證的優先級PBOC是做了如下的規定CDA>DDA>SDA,也就是說如果雙方都支持CDA,那么終端優先進行CDA認證,終端必須選擇雙方共同支持的認證方式中優先級最高的,請注意兩個關鍵詞,雙方共同支持與優先級最高
關於認證,后續將會詳細介紹,這里不再贅述。
08010200 10010401 18010300 這三組數據,每組4個字節成為應用文件定位器AFL,AFL的定義如下:
包含終端將要讀取用來交易處理的卡片數據文件的SFI和記錄范圍。每個要讀取的文件在AFL中對應四個字節含義如下:
字節1:短文件標識符
字節2:文件中要讀取的第1個記錄的記錄號
字節3:文件中要讀取的最后一個記錄的記錄號
字節4:從第1個記錄開始的用於脫機數據認證的連續記錄數
終端將根據AFL的提示讀取所有要求的記錄,這里請注意第四個字節,這些數據時要進行脫機數據認證的,所以終端必須保存起來
第三、錯誤
卡片在一條或多條記錄中返回同一個標簽兩次及兩次以上;
卡片在某條記錄中返回了卡片已經在GPO響應中返回的標簽;
卡片中缺少必須有的數據;
數據格式錯;
READ RECORD命令返回狀態字不是“9000”當返回6985時,終端應該講該條應用從所支持的應用列表中刪除,從新選擇下一個優先級最高的應用