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