PBOC/EMV之深入解析電子現(xiàn)金
文章出處:http://m.luckydriving.com 作者: 人氣: 發(fā)表時間:2012年03月11日
之前的一篇文章<PBOC/EMV之電子錢包與電子現(xiàn)金的區(qū)別>已經(jīng)對電子現(xiàn)金做了一些介紹, 這篇文章站在開發(fā)者的角度,深入的探討一下電子現(xiàn)金的應用.
做一個電子現(xiàn)金的交易, 第一步當然是選中當前的應用, 方法是調用select命令, 傳入當前的應用AID號, 如果卡片的狀態(tài)碼返回9000,則表示選中成功. 下面舉一個例子:
發(fā)送: 00 a4 04 00 08 a0 00 00 04 44 01 01 05 00
卡片返回:
6f 45 84 08 a0 00 00 04 44 01 01 05 a5 39 50 0a 50 42 4f 43 20 44 45 42 49 54 87 01 01 9f 38 09 9f 7a 01 9f 02 06 5f 2a 02 5f 2d 02 7a 68 9f 11 01 01 9f 12 0a 50 42 4f 43 20 44 45 42 49 54 bf 0c 05 9f 4d 02 0b 0a 90 00
先看發(fā)送的指令, 其中a0 00 00 04 44 01 01 05這八個字節(jié)就是當前應用的AID號. 卡片返回的最后兩個字節(jié)是90 00, 表示發(fā)送成功. 狀態(tài)碼之前是數(shù)據(jù)域. 數(shù)據(jù)域是一個TLV結構的FCI, 其中V里面可能也會有TLV結構的數(shù)據(jù), 所以,F(xiàn)CI可能是一個嵌套的TLV結構. 6f是整個數(shù)據(jù)域的tag, 它標識卡片響應的整個FCI. 45表示長度(十六進制),也就是它后面數(shù)據(jù)域部分的所有字節(jié)數(shù).
不分析所有的數(shù)據(jù)了, 只說一下里面比較重要的一個數(shù)據(jù)PDOL. PDOL表示卡片要求終端提供的數(shù)據(jù),從而激活當前選擇的應用. 找到這一串數(shù)據(jù);
9f 38 09 9f 7a 01 9f 02 06 5f 2a 02
9f38是PDOL的tag, 09表示長度. 9f 7a 01表示卡片要求終端提供tag為9f7a的元素的值,長度是01, 9f 02 06表示卡片要求終端提供tag為9f02的元素的值,長度是06,5f 2a 02表示卡片要求終端提供tag為5f2a的元素的值,長度是02. 這三個tag的意義如下:
9f7a:電子現(xiàn)金終端指示器
9f02:授權金額
5f2a:交易貨幣代碼
對于基于電子現(xiàn)金的應用, 這三個元素是必不可少的, 或者說,卡片要求終端至少提供這三個元素的值.
下一步就是終端需要把上面三個元素通過GPO命令傳送給卡片.
后面兩個元素比較容易填, 授權金額就是你的實際交易金額,交易貨幣代碼固定為0156, 那么電子現(xiàn)金終端指示器的值是什么呢?
根據(jù)PBOC 2.0的規(guī)范, 只有滿足下面三個條件時,電子現(xiàn)金終端指示器的值才能為1, 否則為0. 這三個條件是:
1 終端支持電子現(xiàn)金交易
2 授權金額小于終端交易限額
3 終端交易類型為消費交易
前面兩個條件好理解, 為什么會有第三個條件呢?
如果卡片接收到的電子現(xiàn)金終端指示器的值是1, 它就認為當前做的是一個電子現(xiàn)金的交易, 而不是普通的借貸記交易, 那么它在GPO指令的響應中就會返回電子現(xiàn)金的AIP和AFL, 而不是普通借貸記的AIP和AFL, 兩者區(qū)別主要在AFL的不同. 如果卡片認為當前是一個電子現(xiàn)金的交易, 它會返回給終端”電子現(xiàn)金發(fā)卡行授權碼”, 而電子現(xiàn)金發(fā)卡行授權碼是用于脫機交易中, 存放在清算報文的授權碼中. 而PBOC的消費交易是脫機交易, 這就是為什么會有第三個條件.
另外,PBOC的圈存交易規(guī)定必須聯(lián)機處理,所以我們也可以得出, 對于基于電子現(xiàn)金的圈存交易,它從AFL人讀到的數(shù)據(jù)其實就是普通借貸記的數(shù)據(jù),其交易流程也是借貸記的流程.
下面是有一個電子現(xiàn)金的卡片做的一個測試,如果電子現(xiàn)金終端指示器的值為0, 返回的AFL如下:
08 01 02 00, 10 01 03 01, 18 01 02 00, 20 01 01 00
當電子現(xiàn)金終端指示器的值為1時, GPO命令返回下面六組AFL
08 01 02 00, 10 05 06 01, 10 08 08 00, 18 01 02 00, 20 01 01 00, 28 01 01 00
其中電子現(xiàn)金發(fā)卡行授權碼就是文件標識符為28 的文件中.
如果終端能收到卡片返回的AIP和AFL, 就可以根據(jù)卡片提供的AFL, 讀出卡片提供給終端的所有數(shù)據(jù), 并保存在終端, 以備后續(xù)的交易使用. 這些數(shù)據(jù)就包括PAN號等在內的卡片數(shù)據(jù), 舉個例子, 我用測試卡s讀到的發(fā)卡行授權碼(tag=9f74)的值如下:45 43 43 30 30 31, 對應的ASCII字符就是ECC001.