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