PBOC/EMV之電子現(xiàn)金應(yīng)用
文章出處:http://m.overnightmodel.com 作者: 人氣: 發(fā)表時間:2012年03月11日
最近在做一個基于PBOC電子現(xiàn)金卡的終端應(yīng)用, 項目還沒有完成, 但電子現(xiàn)金部分的處理模塊已完成,剩下的基本是UI和調(diào)試的事情了. 想把對PBOC電子現(xiàn)金理解整理成一篇文章.
電子現(xiàn)金的概念是在PBOC規(guī)范的第十三部分<<基于借記/貸記應(yīng)用的小額支付規(guī)范 >>里提出的。 可以這樣理解,電子現(xiàn)金是PBOC里的一個應(yīng)用,它基于借貸記. 這個應(yīng)用被提出的目的就是實現(xiàn)我們經(jīng)常聽說的一個功能, 小額支付功能.
基于電子現(xiàn)金的卡目前來講,一般有如下幾個特點:
1 是由銀行發(fā)行, 這個是必須的,否則就不會叫金融IC卡了.
2 卡里只有一個應(yīng)用,也就是一個AID,因為目前國內(nèi)推行PBOC的卡都是先從單應(yīng)用開始做試點. 從卡片的角度來講,實現(xiàn)多應(yīng)用不成問題,但是, 如果卡片支持多應(yīng)用, 還需要終端(包括圈存終端和消費終端)以及銀行后臺的相應(yīng)配合, 這部分的工程量就很大了, 所以暫時以單應(yīng)用為主.
3 一般用這張卡做小額支付,并且非實名制,消費無需密碼,且是脫機消費.
4 這種卡一般只在銀行內(nèi)部或企業(yè)內(nèi)部使用(企業(yè)內(nèi)部也是與銀行合作), 目前很難推廣到一些大的公共事業(yè)中(比如交通), 因為這些行業(yè)是國家建設(shè)部管的, 這里面有很多非技術(shù)的原因?qū)е裸y行這種金融機構(gòu)與建設(shè)部難以坐在一起協(xié)商.
電子現(xiàn)金的應(yīng)用, 主要做兩種類型的交易,一是圈存交易,一是消費交易. 我這里以終端圈存交易為例,簡單描述一下PBOC的交易流程.
所謂電子現(xiàn)金圈存, 是指把用戶在銀行帳戶里的錢轉(zhuǎn)到這張電子現(xiàn)金的卡上. 說白了就是從你的銀行卡上轉(zhuǎn)錢到電子現(xiàn)金的IC卡上. 由于目前還沒有實現(xiàn)PBOC卡的多應(yīng)用,整個圈存過程實際上需要兩張卡,終端先讀取銀行卡信息(包括卡號,密碼以及充值金額等信息), 扣費成功后下一步才是走PBOC交易流程,對電子現(xiàn)金卡寫卡. 而推廣PBOC的終極目標就是實現(xiàn)一卡多應(yīng)用, 也就是說,未來的某個時候,就可以用一張卡完成圈存,只是不同的應(yīng)用.
我這里簡單通俗的介紹一下電子現(xiàn)金充值PBOC的流程. 更詳細的內(nèi)容可以直接看PBOC 2.0規(guī)范.
前面說到,電子現(xiàn)金應(yīng)用是基于借貸記的, 所以它兼容借貸記應(yīng)用,可以說是精簡版的借貸記應(yīng)用. 每一筆交易,所執(zhí)行的PBOC流程就是簡化版的借貸記流程.
第一步, 選擇應(yīng)用, 所用命令是select, 傳的參數(shù)是 應(yīng)用AID號. 這里跟標準的PBOC交易流程并不一樣, 因為標準流程里面, 前面還有兩步, 就是讀取支付系統(tǒng)目錄, 建立應(yīng)用列表.為什么可以省掉這兩步, 因為前面說到,卡里一般只有一個應(yīng)用AID,目前還沒有實現(xiàn)多應(yīng)用, 這個AID號應(yīng)該在卡片個人化時就已經(jīng)固定好,只要你知道了該AID號,直接跳過前兩步選擇該應(yīng)用可以了. 卡里只有一個應(yīng)用,就無所謂應(yīng)用列表了. 當然,一個好的程序設(shè)計建議還是走標準流程,這樣,以后卡片實現(xiàn)了多應(yīng)用, 你的終端程序也可以通吃.
應(yīng)用選擇后,卡片返回一串信息, 這串信息里面有個很重要的數(shù)據(jù)叫PDOL, 這是一個列表,卡片通過這個列表告訴終端,它需要哪些數(shù)據(jù), 這些數(shù)據(jù)用來給卡片做應(yīng)用初始化. 舉個列子,比如卡片可能會需要授權(quán)金額(就是圈存的金額), 貨幣代碼等數(shù)據(jù). 終端程序解析PDOL,按照一定的規(guī)則拼接數(shù)據(jù),進入第二步.
第二步, 應(yīng)用初始化. 命令是GPO, 參數(shù)就是前一步根據(jù)PDOL所組的數(shù)據(jù)包. 該步表示終端通知卡片交易開始了. 卡片會返回AIP和AFL兩個數(shù)據(jù). AIP告訴終端卡片支持的功能, 比如卡片是否支持脫機數(shù)據(jù)認證, 是否支持發(fā)卡行認證等. AFL是要告訴終端, 如果要完成這筆交易,你終端該從卡上讀什么數(shù)據(jù)。AFL里就包含了這些數(shù)據(jù)的位置和名稱. 舉個例子,這些數(shù)據(jù)可能有當前的交易序號,該張卡片的卡號(PBOC里叫PAN,應(yīng)用主帳號)等.
第三步,讀數(shù)據(jù). 命令是read record. 參數(shù)是前一步得到的終端所需卡片數(shù)據(jù)的位置和名稱. 終端要把AFL指定的所有數(shù)據(jù)讀出,并保存到終端供下面的流程所用. 每次讀到的數(shù)據(jù)是包含在卡片的返回信息中的, 終端解析返回信息,提取相關(guān)的數(shù)據(jù).
第四步, 產(chǎn)生應(yīng)用密文. 命令是GAC. 參數(shù)是密文類型和產(chǎn)生密文所需的數(shù)據(jù). 密文類型有三種,分別是交易證書(TC), 應(yīng)用認證密文(AAC),授權(quán)請求密文(ARQC). 因為這一步是為下一步聯(lián)機處理做準備,所以終端應(yīng)用請求卡片產(chǎn)生的密文類型應(yīng)該是ARQC,查看卡片是否允許聯(lián)機處理. 卡片收到產(chǎn)生密文類型后,返回的信息有兩個重要的數(shù)據(jù), 第一個就是密文類型,該數(shù)據(jù)指示卡片是否愿意做聯(lián)機處理,如果愿意,返回的是ARQC,與終端一致,否則返回AAC,表示拒絕聯(lián)機. 終端判斷卡片返回的是否是ARQC,如果是,終端要讀取卡片返回的另一個重要的數(shù)據(jù),應(yīng)用密文(AC), 該密文是卡片用存放在卡里的密鑰,對終端發(fā)過來的明文數(shù)據(jù),用3DES算法生成的.
第五步, 聯(lián)機驗證卡片. 這一步,卡片本身沒有操作. 終端把前一步得到的應(yīng)用密文,產(chǎn)生應(yīng)用密文的一些數(shù)據(jù),還有其它的信息(比如交易日期,交易時間等),打包發(fā)送到發(fā)卡行PBOC后臺, 通信方式一般是用TCP/IP。 后臺通過驗證ARQC密文來認證卡片, 如果認證成功會返回授權(quán)響應(yīng)密文(ARPC), 這個ARPC是后臺通過3DES算法,對ARQC密文和二個字節(jié)的授權(quán)響應(yīng)碼加密生成的.
第六步,第五步的目的是發(fā)卡行驗證卡片的合法的性,這一步是卡片驗證發(fā)卡行是否是一個有效的發(fā)卡行. 命令是External Authentication, 叫外部認證. 參數(shù)是上一步聯(lián)機處理響應(yīng)的ARPC和授權(quán)響應(yīng)碼. 卡片收到命令后,會用自己的密鑰,對ARQC和授權(quán)響應(yīng)碼生成ARPC,然后與終端傳來的ARPC比較,兩都相同,就認為此ARPC是來自一個有效的發(fā)卡行后臺.
第七步, 聯(lián)機圈存報文, 驗證了卡片和發(fā)卡行的合法性之后,終端向發(fā)卡行后臺請求圈存,上傳的數(shù)據(jù)包括充值金額,卡內(nèi)原來的余額等信息, 發(fā)卡行后臺返回一個寫卡的腳本命令, 終端解析這個腳本,直接發(fā)給卡片即可. 到這里,卡片充值成功.
第八步,這一步要發(fā)送第二請求密文命令(GAC2), 它的作用說白了就是告訴卡片交易結(jié)束。與第四步的GAC1不同的是,GAC2的參數(shù)里面多了授權(quán)響應(yīng)碼,并且請求的密文類型是TC,也就是希望卡片接受交易。如果卡片返回的也是TC,表示接受交易.
第九步, 讀交易日志,在整個流程執(zhí)行的過程中,卡片會以一定的格式讀錄當前這筆交易的信息,比如授權(quán)金額,卡號,交易時間,終端只需通過一個命令就可以把些信息讀出,然后提取出有用的信息,以便日后結(jié)算.