银行POS交易流程及概念浅析
银行的交易体系是一套比较复杂的系统,本文将就POS机交易涉及到的一些概念、流程等作简要介绍。
名词解释
首先,解释一下我们在日常生活或者POS等支付系统开发时经常遇到的一些名词的基本概念。
-
1.签到
签到基本上是所有POS机必须支持的一项功能,并且POS机应该在每天的使用之前进行签到操作,其目的有两个:一是保证操作员及POS机的合法性(一般签到需要输入操作员号和对应的密码,也有自动签到的模式不需要手动输入这些信息);二是下载新的工作密钥。那么什么是工作密钥呢? -
2.工作密钥
工作密钥是专门用来在交易过程中对刷卡人的卡密码进行加密的,它是在签到的时候从后台获取的,那么为了保证工作密钥的安全性,在网络传输中POS机得到的工作密钥是密文的形式,获得后需要用POS机的主密钥来解密获得真实的工作密钥明文。那么主密钥又是怎么来的呢? -
3.主密钥
主密钥可以通过安全环境下手工输入或者由密钥母POS灌入等方式来存入到POS机,主要作用便是对工作密钥和MAC密钥等进行解密。 -
4.MAC密钥
与工作密钥类似,MAC密钥也是签到时从后台获取,并且用主密钥解密,主要作用是计算MAC(数据包校验值),该校验值附加在交易报文里进行传输,收端同样计算一个MAC值,通过比较两个MAC值来确定报文是否被篡改。 -
5.消费
消费即刷卡消费,不解释 -
6.消费撤销
故名思意,即因为某种原因已经进行过消费的一笔交易,请求撤销。需要注意的是,消费撤销必须是撤销消费所用POS机的当日当批次的消费交易。 -
7.退货
和消费撤销类似,退货也是对一笔消费交易进行退款,不同的是,一,退货不要求当日当批次的消费;二,退货一般支持部分退货,多次退货,而消费撤销一般都是直接退全款。想要理解消费撤销和退货的本质区别,那么必须首先知道什么是结算。 -
8.结算
一般POS机在每天的工作结束之后,应进行结算操作(分为手动结算和自动结算),结算会将当日POS机中存储的所有笔交易(包含消费、消费撤销)上传至后台并清空,然后进行签退。一个结算周期内所有的交易使用的是同一个批次号,即同一批次。因此可以简单的理解为结算之前只能消费撤销,因为消费数据在POS机里面存着;结算之后只能退货,此时原消费数据已从POS机里面清除。 -
9.冲正
当POS机终端将一笔交易的报文发往后台,但是没有收到返回最终超时时,POS机无法确定后台是否成功的完成了这笔交易。因此,当下笔交易发生前,POS机会先向后台请求撤销该笔不确定的交易,如果后台记录该笔交易成功,则回滚及撤销该笔交易,否则不处理,此为冲正成功;如果POS机与银联结算中间在数据传输过程中发生故障,则冲正不成功,此时刷卡方卡里的钱已经被扣,需要进行人工冲正。 -
10.补登
补登指支付应用将交易结果发送给POS机后并没有收到POS机的应答,因此不确定POS机端是否成功记录了该笔交易,此时支付应用应进行的自动或手动的POS端交易查询。 -
11.预授权相关
包含预授权,预授权追加,预授权完成,预授权撤销,预授权撤销完成。预授权类似于押金,即先冻结一部分用户银行卡的资金,等消费正式完成之后再扣取实际的金额即预授权完成。不难想象,预授权业务多用于酒店。
此外,POS机签购单上对应的一些字段术语,如下所示:
批次号(Batch NO.):POS从签到起至结算、签退为止的交易为一批次,交易批次号标识一批交易。POS中心为每个POS的每个批次分配一个批次号,在签到响应报文中下传给POS终端。对应银联ISO8583报文的报文头域7:批次号(Batch Number)
序号(Ref. NO.):POS中心为交易分配的流水号,在响应报文中下传给POS终端作为对账参考号,并用于事后查证。对应银联ISO8583报文的域37:检索参考号(Retrieval Reference Number)
授权号(Auth Code):授权标识应答码,简称“授权码”。是发卡行返回或银联CUPS代授权时返回的授权序号。对应银联ISO8583报文的域38:授权标识应答码 Authorization Identification Response
查询号(Trace NO.):POS机为每一笔交易产生的顺序编号。POS每上送一次交易此号码增加1。 POS流水号为6位数字,值从1至999999循环使用。在自动冲正时,POS中心依据POS流水号作为确定被冲正交易的要素之一。
凭证号(Voucher NO.):查询号(Trace NO. 也叫POS流水号)也作为交易凭证号(在签购单上打印为Voucher NO.),在进行撤销等交易时,输入原交易凭证号作为确定原交易的要素之一,并且必须上送原交易的凭证号。
流程分析
下图所示为一般的包含POS支付APP,POS终端,后台的交易流程示意图,所有的交易类型如消费、消费撤销、退货等都是这样一套流程。图中JAR是JAVA语言单独封装出来的一层,相当于APP、POS终端、后台服务器三者的媒介。当然,其他语言原理一样。
POS交易流程图参考上图,具体步骤为:
- APP通过用户界面发起一项交易(消费、消费撤销、退货等);
- JAR包收到交易指令后通知POS终端(二者通过串口或蓝牙进行通讯),显示交易指令并提示刷卡;
- 持卡人刷卡输入密码确认后,POS终端将交易请求数据打包发送给JAR包;
- JAR包将交易请求数据通过互联网发送给后台;
- 后台处理完毕后将处理结果返回给JAR包;
- JAR包将这一结果再次透传返回给POS终端,这一步POS终端如果接收超时,则下次交易发起时会进行自动冲正;
- POS机记录交易结果,并向JAR包应答,这一步JAR包如果接收超时,则需提示APP进行补登操作;
- JAR包将交易结果最终返回给APP。
另外,文中所出现的后台指的是收单机构的后台,收单机构又是和银联的后台对接的,那么这里需要详细解释一下。这个时候我们需要引入清算这个概念以及著名的721比例。
在一次普通的POS机交易中,可能涉及到四家机构,一是刷卡人的发卡行,二是为POS机拓展商户的收单机构(当然,POS机可能又是另外一家专门的POS机厂商生产的),三是商户账户对应的银行,四是银联。银联的清算中心作为一个桥梁,每天会对所有收单机构的交易进行清算,清算前,顾客刷卡消费的金额虽然已经从其银行卡上扣掉了,但实际上还是在该银行内部,通过银联的清算,这笔金额会通过银联到达收单机构的账户,收单机构又会再次通过银联将这笔钱转到商户所使用的银行账户上。上述的过程钱不是白转的,一般POS刷卡消费对于商户会有一定比例的手续费,如千分之六,那么这个手续费会按照持卡人发卡行:收单机构:银联=7:2:1的比例来进行分成。当然需要注意的是,收单机构既包括一些银行,也包括一些有收单支付牌照的第三方机构,当收单机构和持卡人的银行卡同属一家银行的时候,是不需要经过银联的,因此该银行可以通吃商户手续费。
需要说明的是,银行交易系统流程复杂,POS机应用模式也是多种多样,因此本文所讲内容可能只是冰山一角,不准确的地方还望大家批评指正。
另,个人技术博客,同步更新,欢迎关注!转载请注明出处!文中若有什么错误希望大家探讨指正!