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