王乃珍
(中鐵銀通支付有限公司,北京 100081)
近年來,非接觸式IC 卡系統(tǒng)在全國各地的公共交通領域有了較快發(fā)展,為了方便IC 卡的發(fā)卡和充值,各地陸續(xù)推出了IC 卡自助充值系統(tǒng),實現(xiàn)用戶在網(wǎng)點或銀行進行IC 卡自助充值。由于移動互聯(lián)網(wǎng)和第三方支付的快速發(fā)展,各大城市的公交卡公司著手積極研究移動充值的解決方案[1-3],大都采用NFC 讀寫卡方式。由于卡片規(guī)范、密鑰體系和交易流程均不相同,上述研究無法完全適用于中鐵銀通卡。中鐵銀通卡芯片技術標準符合《中國金融集成電路(IC)卡規(guī)范》(簡稱:PBOC),電子現(xiàn)金賬戶和聯(lián)機賬戶并存[4],芯片可存儲數(shù)字證書、密鑰、持卡人信息、指紋等信息。乘車時用戶使用電子現(xiàn)金脫機消費模式,具有交易快速、便捷、安全、不可偽造、不可重復消費等特點[5-6]。聯(lián)機賬戶可用于互聯(lián)網(wǎng)購票等聯(lián)機交易,適用于所有符合PBOC 的終端,其范圍廣、適應性強。本文將線上充值思路應用于中鐵銀通卡,設計并實現(xiàn)了中鐵銀通卡線上充值系統(tǒng)(簡稱:線上充值系統(tǒng)),實現(xiàn)銀通卡的線上自助充值,同時,對系統(tǒng)的總體架構、關鍵技術、業(yè)務功能和流程設計進行了論述。
系統(tǒng)使用WebStorm、IDEA 等工具進行開發(fā),總體架構分為3 層,分別為表現(xiàn)層、應用層、支撐層,如圖1 所示。
(1)表現(xiàn)層即人機交互層,包括手機終端充值應用、藍牙讀卡器和管理平臺,該層采用VUE 框架,手機端App 采用B/S 架構,管理平臺采用C/S 架構,使用微信/支付寶小程序的原生API,將信息可視化后與用戶進行交互[7]。
圖1 系統(tǒng)總體架構
(2)應用層采用Spring 框架。表現(xiàn)層將操作請求傳遞給應用層處理。該層負責所有的業(yè)務流程控制以及數(shù)據(jù)庫的增刪改查[3],同時,負責與表現(xiàn)層、支撐層的開放平臺、第三方支付系統(tǒng)進行對接。
(3)支撐層主要指開放平臺。開放平臺提供已封裝API 供應用層或其他拓展業(yè)務的第三方系統(tǒng)調用。采用HTTPS 通信協(xié)議,調用方可通過開放平臺提供的SDK 實現(xiàn)對該系統(tǒng)的間接訪問。開放平臺通過ISO8583 金融報文和固定格式接口與中鐵銀通卡發(fā)卡系統(tǒng)進行通訊。
本文使用MySQL 工具建立關系型數(shù)據(jù)庫,按照一致性、完整性、安全性和規(guī)范化原則進行設計[8]。MySQL 數(shù)據(jù)庫支持多線程和優(yōu)化的SQL 查詢算法,有效提高查詢速度。數(shù)據(jù)庫中的交易明細表如表1 所示。
由于金融交易和賬戶信息讀寫對系統(tǒng)的安全性要求較高,本文從交易合法性驗證、數(shù)據(jù)加密和訪問控制3 個方面進行系統(tǒng)安全設計。
1.3.1 交易合法性驗證
本文采用雙向身份認證和授權方式校驗交易合法性。業(yè)務系統(tǒng)被分配唯一標識以及與之相匹配的應用鑒別密文,開放平臺根據(jù)唯一標識進行身份認證、狀態(tài)校驗和權限控制等。業(yè)務系統(tǒng)與開放平臺每次交互都需要進行密鑰交換并保存對方的公鑰,同時使用RSA2 算法做數(shù)字簽名,保證業(yè)務數(shù)據(jù)的可靠性和防抵賴性。
表1 交易明細表結構
1.3.2 數(shù)據(jù)加密
為保證業(yè)務系統(tǒng)數(shù)據(jù)與開放平臺間的數(shù)據(jù)傳輸安全,本文將整體業(yè)務數(shù)據(jù)轉成JSON 字符串,用AES 加密算法對業(yè)務數(shù)據(jù)進行加密。藍牙讀卡器傳輸數(shù)據(jù)采用CRC 校驗、3DES 加密等技術[9]。
1.3.3 訪問控制
業(yè)務系統(tǒng)登錄賬號由管理員統(tǒng)一下發(fā),不開放個人注冊。
基于PBOC 的圈存寫卡交易,中鐵銀通卡發(fā)卡系統(tǒng)收到請求后,會在響應報文中返回含MAC 值的發(fā)卡行腳本命令,終端解析腳本命令并發(fā)送給IC 卡執(zhí)行。IC 卡產生本次交易過程密鑰,計算出MAC 值并校驗[10]。若兩者相同,證明該上行數(shù)據(jù)的發(fā)送者是中鐵銀通卡發(fā)卡系統(tǒng),且數(shù)據(jù)在傳送過程中未被修改、刪除或重組,否則會拒絕該交易。
為保證卡片金額與后臺交易的一致性,需設計完善的沖正機制,處理圈存寫卡異常情況。在讀卡器終端保留最后一筆圈存交易,如圈存寫卡過程中發(fā)生拔卡、斷網(wǎng)、軟件異常退出等異常情況,導致寫卡失敗,交易會立刻發(fā)起沖正。
若IC 卡未返回寫卡結果信息,則終端再次讀卡,并與卡片交易計數(shù)器數(shù)值做比較,若交易計數(shù)器數(shù)值加1,且余額未增加,則同樣發(fā)起沖正。
發(fā)起沖正后,若未收到上層系統(tǒng)的沖正應答,則重復發(fā)3 次沖正請求,若均未應答,則提示人工處理。若收到上層系統(tǒng)的圈存應答,則丟棄該應答。
線上充值系統(tǒng)主要分為手機終端軟件和管理平臺兩部分,功能結構如圖2 所示,手機終端軟件(微信小程序、支付寶小程序)與藍牙讀卡器連接后可實現(xiàn)對銀通卡的讀寫。
圖2 系統(tǒng)功能結構
3.1.1 電子現(xiàn)金圈存及余額查詢
用戶使用第三方支付為銀通卡電子現(xiàn)金做圈存,可選擇系統(tǒng)給出的圈存金額或手動輸入金額。交易成功后,界面顯示更新后的余額信息。電子現(xiàn)金圈存界面如圖3 所示。
圖3 電子現(xiàn)金圈存界面
3.1.2 圈存記錄查詢
用戶可根據(jù)卡號信息查詢到該卡的圈存記錄,核實圈存數(shù)據(jù),界面如圖4 所示。
3.1.3 聯(lián)機賬戶充值及余額查詢
用戶使用第三方支付為銀通卡的聯(lián)機賬戶充值,可選擇系統(tǒng)給出的充值金額或手動輸入充值金額。充值成功后,聯(lián)機賬戶進行余額更新。
3.1.4 充值記錄查詢
用戶可根據(jù)卡號信息查詢到聯(lián)機賬戶的充值記錄,并核實充值數(shù)據(jù)。
圖4 圈存記錄查詢界面
管理人員可通過瀏覽器登陸管理平臺,具體功能包括訂單列表查詢、POS 充值列表查詢和指定賬戶圈存列表查詢。管理人員可以通過管理平臺核實賬務和資金清算情況。管理平臺界面如圖5 所示。
圖5 管理平臺界面
線上充值系統(tǒng)交易總體流程如圖6所示。
圖6 線上充值系統(tǒng)交易流程
(1)用戶將卡片插入藍牙讀卡器中,讀卡器識別卡片信息后,上送卡號、余額及其他金融數(shù)據(jù);
(2)用戶在手機終端軟件選擇圈存金額,進入支付流程,充值業(yè)務系統(tǒng)根據(jù)用戶提交的金額向第三方支付系統(tǒng)做扣款請求,確認付款成功后,完成支付。
(3)支付成功后,終端提出圈存寫卡請求,為確保資金安全,充值業(yè)務系統(tǒng)需再次與第三方支付系統(tǒng)確認并驗證支付信息,充值業(yè)務系統(tǒng)向開放平臺提出圈存寫卡請求,并調用開放平臺API 做多次驗證與交互,銀通卡發(fā)卡系統(tǒng)更新后臺余額并下發(fā)寫卡指令,終端收到寫卡指令,寫卡成功后,卡片返回寫卡成功腳本信息,再由充值業(yè)務系統(tǒng)回傳至中鐵銀通卡發(fā)卡系統(tǒng)。
(1)與4.1 中的(1)一致;
(2)與4.1 中的(2)一致;
(3)充值業(yè)務系統(tǒng)調用開放平臺API 做聯(lián)機賬戶充值請求,中鐵銀通卡發(fā)卡系統(tǒng)收到請求后更新后臺余額,并返回執(zhí)行結果,交易結束。
(1)用戶在手機終端軟件上觸發(fā)查詢業(yè)務;
(2)終端軟件將讀卡器上送的卡號信息上送至充值業(yè)務系統(tǒng),充值業(yè)務系統(tǒng)與開放平臺交互并將查詢結果返回至手機界面。
本文通過分析銀通卡充值服務所面臨的新需求,提出銀通卡線上充值的解決方案,使銀通卡充值業(yè)務變得更高效、便利、自動化。中鐵銀通卡線上充值系統(tǒng)投入使用后,市場反饋良好,線上充值比例占總充值金額的25%,并呈逐漸上升趨勢。在后續(xù)使用中,隨著PBOC 的升級,系統(tǒng)需要根據(jù)中鐵銀通卡應用的升級不斷優(yōu)化。下一步,可研究線上充值交易流程及異常處理機制的優(yōu)化,自動處理由于寫卡失敗等原因造成的充值失敗,還可研究業(yè)務系統(tǒng)的充值賬務自動核對、自動退款等新功能,提升旅客使用體驗。