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