近年来,非接触式 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 的升级,系统需要根据中铁银通卡应用的升级不断优化。
下一步,可研究线上充值交易流程及异常处理机制的优化,自动处理由于写卡失败等原因造成的充值失败,还可研究业务系统的充值账务自动核对、自动退款等新功能,提升旅客使用体验。