关于冲正

在支付领域,有一个专有名字叫“冲正”。按照 百度百科的解释:冲正就是“ 对错误的账务进行改正”。主要是在与银联POS刷卡交易的时候用到。
按照相关的标准,当POS刷卡设备发出一次扣款请求的时候,如果POS刷卡设备因为各种原因未能获得本次刷卡请求的结果,则需要发出一次“冲正”请求,冲正就是告诉服务器,如果刚才的交易成功了,就取消掉,然后返回冲正成功。如果没有成功,或者服务器也没发现有,那么就直接冲正成功。当然,如果交易成功,但是取消失败,那么服务器需要返回“冲正失败”,这个时候,就只能人工办理“退款”了。
从整个交互流程来看,其实“冲正”就类似退款,只不过这个退款是设备发出,并且自动执行的。对于银行,可能这笔交易根本就不会出现在用户的交易记录中(这个我不确定);

那么,现在有了一个问题,为什么需要冲正呢?
冲正的需求,是来自于“流水型系统”(我自己起的名字),什么叫流水型系统,就是所有的请求来了,直接处理,就像流水一样,直接走下去。比如说,POS服务器对于POS的支付请求,只要来了一个请求,它不问青红皂白,直接开始扣款。什么叫“不问青红皂白”,就是说,他不会管这个请求是不是重复的,以前是失败了还是成功了……。
所以,如果请求方和服务器在扣钱的过程中出现了中断,那么请求方不知道是否成功的时候,就有可能已经扣款了,如果这个时候请求方不管不顾,再次发出请求,那么可能结果就是用户被多次扣款,引起投诉。所以,银联的POS标准就要求,只要POS设备请求扣款没有获得明确的结果,都必须发出“冲正请求”。没有款则以,有扣款就退掉。至于如果还要支付,那么再重新请求……
再一个问题,为什么银联要设计成冲正这种模式呢?
这个是源于分布式的系统架构考虑。对于POS业务,刷卡支付要求安全、准确、稳定、高效、可靠。所以服务方一定会需要大规模的分布式系统来实现一遍支持大量的支付请求。而每一个请求,都需要快速相应,系统根本无法顾及是否重复(因为如果要检查重复,就必须要搜索所有的历史请求,资源消耗和时间都太大了)。
如果面对冲正的请求,就需要对整个最近的请求进行检索,然后确认是否有处理记录,如果有处理取消掉,如果没有直接返回。当然,冲正的请求相对支付请求量非常小,所以即使资源消耗和时间消耗大一些也可以应付。

既然前边两个问题都清楚了,那么我们就需要考虑,是不是我们自己的系统都必须要提供冲正的功能?我们在什么情况下,应该用冲正的模式来解决问题呢?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值