1、支付网关接口的种类
目前支付网关的接口主要有四种类型,分别是支付接口、查询接口、冲正接口以及对账接口,各自的作用是:
(1)支付接口
一般情况下,支付接口都是web接口,它的功能主要是接收商家和企业上传的订单信息和数字签名信息,支付完后向商家或者用户返回支付后的结果。
(2)查询接口
现在,有部分银行为商家、企业或者消费者提供订单查询功能,这个订单查询功能是通过接口来实现的,查询接口的主要功能包括单笔订单查询、多笔订单查询、批次订单查询等三种方式。
(3)冲正接口
如果一笔交易在银行网络支付交易业务中的客户端显示是交易成功的,那么还需要返回到服务器端,即银行的服务端进行相应的标记,所以可以将冲正的概念理解为是对一笔正交易的反交易。
冲正接口的设计可以在很大的程度上保护用户和商家的利益,在终端交易成功后也要返回到客户端进行相应的回滚交易,这样的一笔交易才算是成功的交易,如果没有按照要求进行回滚,则会将这次的交易定性为失败的交易,同时返回给客户终端。
(4)对账接口
对账是指银行在固定的时间内,跟各商户对相应的交易进行整理和确认,并将钱款划到对应的商户的账户上,是对信用的结算。对账是网上交易的一个最为关键环节,如果没有对账接口,必须在线下进行人工的对账。
2、现有银行支付网关接口总结
现有银行支付网关接口各有不同,存在着较大的差异性。下面针对17家银行的支付网关的接口做出分析总结,其中包括有订单号要求、安全机制(包括协议证书以及明文格式)、提交方式、提交所需数据项以及支付结果通知方式等几个方面的内容,以便为统一接口提供对比数据信息。具体的银行支付网关接口总结情况可见表1所示。
表1 银行支付网关支付接口总结
编号 | 银行名称 | 订单号要求 | 安全机制 | 提交方式 | 提交所需数据项 | 支付结果通知方式 | ||
长度 | 唯一性 | 协议及证书 | 明文格式 | |||||
1 | 广东发展银行 | 长度固定 | 唯一 | SSL;银行公钥、商户私钥 | 商户号+订单号+金额 | http get | 金额、商户号、订单号、返回URL、签名 | 前台通知 |
2 | 上海浦东发展银行 | <=12位 | 唯一 | SSL;私钥容器 | 项目构成为“项目名=项目值”,各项之间用“|”分隔 | http post | 交易名称、明文、签名 | 前台通知 |
3 | 交通银行 | <=20位 | 订单号+8位日期唯一 | SSL;银行系统根证书、商户私钥 | 项目构成为“项目名=项目值”,各项之间用“|”分隔 | http post | 接口版本、商户号、订单号、订单日期、订单时间等 | 由商户提交的字段决定。可进行后台、前台的通知。 |
4 | 建设银行 | <=30位 | 唯一 | SSL;加密采用无密钥的MAC算法;数字签名采用MD5算法,需要银行公钥 | 项目构成为“项目名=项目值”,各项之间用“&”分隔 | http get | 商户号、posid、支行号、订单号、金额、备注、签名等 | 前台通知、后台通知 |
5 | 广大银行 | 1-30位 | 14位时间+订单号唯一 | SSL;私钥容器 | 项目构成“项目名=项目值”,各项之间用“~|~”分隔 | http post | 交易名称、明文、签名 | 前台通知、后台通知可配置 |
6 | 辽宁银联 | 16位 | 订单号+14位时间唯一 | SSL;银行公钥、商户私钥 | 接口封装 | http post | 版本、mpiReq(请求报文,由接口封装) | 后台通知、前台通知 |
7 | 中信银行 | <=15位 | 唯一 | SSL;商户私钥,银行公钥 | 固定格式的XML字符串 | http post | signMsg | 由前台通知,成功后后台通知 |
8 | 民生银行 | 20位 | 唯一 | SSL;银行公钥、商户私钥 | 项目构成为“项目名=项目值”,各项之间用“|”分隔 | http post | orderinfo | 由前台通知,成功后后台通知 |
9 | 招商银行 | 6位 | 一天内唯一 | SSL;银行端安装一个证书,请求用https协议,SSL自动加密 | 无 | http post | 支行号、用户号、订单号、金额、日期、商户URL、商户参数 | 前台通知、后台通知 |
10 | 好易联 | <=20位 | 唯一 | SSL;商户私钥、银行公钥 | 项目构成为“项目名=项目值”,各项之间用“&”分隔 | http post | 加密串,签名串 | 前台通知 |
11 | 北京农村商业银行 | 12位 | 唯一 | SSL;商户私钥容器,商户公钥,将商户公钥通过北农商户系统传递给银行 | 项目构成为“项目名=项目值”,各项之间用“|”分隔 | http post | 交易名称、明文、签名 | 前台通知 |
12 | 工商银行 | <=30位 | 一天内唯一 | SSL;商户私钥、银行公钥 | 项目构成为“项目值”,各项之间没有分隔符 | http post | 接口名称、接口版本、订单号、金额、商户号等 | 先后台通知商户返回售货地址或关闭连接,银行再前台通知用户。此过程串行执行 |
13 | 环讯 | <=30位 | 唯一 | SSL;128位SSL证书。MD5摘要;通过https传输信息,SSL自动加密 | 项目构成为“项目值”,各项之间没有分隔符 | 商户号、订单号、网关类型、金额类型、金额、日期等 | 前台通知可选,后台通知可选 | |
14 | 农业银行 | <=50位 | 唯一 | SSL;农行根证书、支付平台证书、商户证书 | 封装接口 | 封装接口 | 前台通知,后台通知 | |
15 | 深圳发展银行 | 一天内唯一 | SSL;商户私钥容器(导入商户私钥),将商户证书(公钥)传递给银行 | 项目构成为“项目名=项目值”,各项之间用“|”分隔 | http post | 明文、签名、交易名称、返回URL | 前台通知 | |
16 | 兴业银行 | <=12位 | 唯一 | SSL;不需要证书,DES加密 | 项目构成为“项目值”,各项之间没有分隔符 | http post | 订单号、商户号、订单日期、金额等 | 前台通知 |
17 | 邮政储蓄 | 20位 | 唯一 | SSL;证书流 | 项目构成为“项目值”,各项之间没有分隔符 | http post | 商户号、订单号金额、货币类型、交易日期、交易类型、用户名、签名、商户URL | 前台通知 |
3、支付网关功能需求
通过对当前银行支付网关的调研,本文整理出了银行支付网关系统的具体功能情况,其中主要有交易支付功能、订单查询功能、支付结果通知功能、信息查询功能以及用户管理功能等,具体用例可见图1所示。
图1 支付网关用例视图
作为用例视图来讲,其主体有:参与者、系统边界和用例。从图3-1可以看出,边界外部为参与者,边界内部为用例,用例表达参与者对系统功能的实际需求。
在支付网关系统当中,参与者主要有三种类型,分别是系统管理员、商户以及银行支付网关。
由系统的用例图可以得知,系统的管理员可以通过对电子商务平台支付网关系统进行相应的管理,同时也能够对整个系统的权限进行有效地分配;
通过对电子商务平台支付网关系统可以进行查询、冲正、对账和支付等业务,本文所设计的通过对电子商务平台支付系统可以很有效的为各个商户和银行的支付网关提供一个统一的接口,通过这个网关支付接口可以有效的缩小各个银行之间的差异,可以使各个网络的支付变得通畅和快捷。
通过对电子商务平台支付系统到银行的支付网关期间要经过很多个步骤,每个步骤都有具体的需要执行的任务,分别是:
(1)交易支付
商家借助http协议将订单数据传送到支付网关系统当中,由支付网关系统对其做出一系列的验证,如果一切正常,就会自动对比数据项里面是否包括对应银行的相关支付信息内容。
(2)支付结果通知
在交易支付行为结束之后,支付网关系统会自动验证支付结果通知,并把订单信息以及结果信息输入列表当中,以便商户查阅。
(3)订单冲正
订单冲正包括两种情况,第一种情况是如果系统当中的查询功能检测到某笔订单支付失败,而且银行那里未获得查询结果,系统就会提交冲正请求给银行;第二种情况是由商家向支付网关系统提出冲正请求,在系统验证成功之后会转送到银行那里。
(4)对账
为保证款项的精确,每日必须把交易发起方的账目信息和银行的账户信息进行工整对帐,在每天的一定时间,以进行对账交易。
(5)订单查询
订单查询能够给商户提供一个订单状态查询接口,以便商家能够随时了解到订单的状态信息,并做出相应的操作。
(6)订单信息实时查询
如果出现网络终中断或者是服务器故障,系统就可能会未收到银行支付结果的返回信息。数据库中对支付状态为初始、失败、或不确定的订单进行了详细的记录,订单实时查询的功能能够定时查询系统数据库中的总订单信息,需要到银行进行查询,以确定订单的最终状态。
(7)系统管理
系统管理指系统管理员针对软件系统的配置、改善和更新维护,使得软件系统能够正常工作。作为商业支付平台,其构成涉及计算机的各个方面,包括硬件、软件、网络等各个层面,系统管理可以使支付网关高效地运行。
4、支付网关非功能需求
按照马斯洛的需求层次理论,需求可以分为五个层次,从最基本的低级需求到最高级的自我实现需求,是一个阶梯形的过程。对于软件系统来讲,软件需求也可以分为多个层次,最基本的需求是功能需求,在实现基本需求的基础上软件需要满足各项非功能性需求,包括可靠性、安全性、可维护和可扩展性等。电子商务支付涉及到敏感数据,对安全性的要求非常高。
这就要求对交易过程中的数据提出更高的要求:即保密、完整和即时。保密性,又称机密性,是指防止不正确或不合法的操作和使用造成的数据泄露、数据更改或者数据破坏,保护数据库;完整性是指数据的正确性、一致性和相容性;即时性是要防止延迟或拒绝服务。
支付网关使用如下技术实现安全保障:
(1)密码技术和密钥服务管理
所谓密码技术,是指对商家、企业、客户以及消费者的信息,详细的交易信息会被二次编码,并将部分货物信息隐藏起来,以保护用户的隐私,确保不会遭到非法侵害。密钥服务管理是一个对各种密钥,比如密码、数字证书等密钥信息进行管理、授权、注销等的管理。
在本系统当中,需要使用到密码技术来加密交易信息内容,使得交易信息与支付信息都能够受到严密的保护。按照PCI里面的DSS规范,已经被加密的私钥需要定期做出更改,而且不能够很明确的存储在数据库中。在密钥服务管理过程当中,会应用到散列编码技术,这其实就是一个通过散列算法的求值处理,并且要保证信息被传输时保留原样,不会有任何改变。
因为散列编码属于不可逆的操作管理,所以在支付网关系统里面可以通过授信服务来认证商家信息。在PCI要求当中,支付网关系统需要定期替换密钥,而通过密钥服务就可以自动定期编排新的密钥,然后被添加到密钥仓库里面。在使用支付网关系统过程当中,需要先获取密钥,从而确保历史数据不会被篡改。具体的密钥服务业务用例情况可见图2所示。
图2 密钥服务的业务用例
(2)网络安全控制
网络安全控制包括特权及公钥管理、统一身份认证与授权、容侵与容灾、安全协议的设计以及各种网络安全控制模型等。支付网关系统应该具备良好的安全性,以便保证隐私资料不外传。
这里所重点提出的安全,一方面是外在的,比如防止黑客借助计算机网络实施入侵行为,导致资料外泄;另一方面就是对内的,主要还是针对那些系统的操作人员,应该设置访问权限级别,从而有效的避免越权访问行为发生。应用安全主要包括操作系统与数据库管理系统安全访问等。
具体可以采用操作系统与数据库管理系统的权限管理来实现,目前最常用、也是最有效的安全技术方法就是用户名和各种口令机制,这能够提供用户身份鉴别的服务,从而可以排斥非法用户对于信息系统所进行的访问行动。而对于病毒的防治则可以采用Symantic Ant Virus防病毒系统。而对于系统崩溃或严重故障则采用Ghost分区备份和恢复实施做出预防。