余额支付对账

我们公司是做借条托管平台的,最近的一次改版,需要支持用户线上出借和还款,并且支持用户用账户的余额出借和还款。但是线上交易存在退票的问题,就是当时明明银行提示交易成功了,但是第二天对账单显示这笔交易失败了,这时候代码就得做回滚处理,将昨天生效的借条和还款作废。用银行卡支付这种方式对账处理起来比较简单,就是直接将相关联的借条或还款作废。但是用余额支付交易后,对账就没有那么简单了。我们系统支持用当天充值的钱做余额支付。只是提现需要第二天对账后确认前一天的交易确实成功后才可以提现。
现在一个设置典型场景,如果A用户是专业出借人,他用别人还他的钱加上自己充值的钱,采用余额支付的形式出借。第二天和第三方支付对账发现别人还他的钱支付失败,需要回滚。这时他已经将别人还的钱支付出去了,回滚后他的余额就变成负数了。需要在余额对账的时候把他的出借也做回滚才可以。因此做余额对账的时候,只要把昨天和第三方支付对账后,余额是负数的人的出借或还款回滚就好了。但是回滚很容易触发雪崩效应。具体的场景就是B把A的余额出借的得来的钱,采用余额支付的方式还款给了C,但是A的余额支付回滚了,现在B的余额是负数了,还需要回滚B的支付。在一个真实交易的系统中,情况会更复杂。这时候怎么对余额交易的账。
经过仔细考虑,我想到了一个解决方法。在余额对账的时候,首先检索到所有昨天采用余额支付并且余额是负数的人,将他们昨天发生的不低于当前负数金额的交易做回滚操作,将他们的余额变成正数。然后再次重复上一个操作,检索到所有昨天采用余额交易并且余额是负数的人,将他们昨天发生的不低于当前负数金额的交易做回滚操作。一直重复这个操作,直到所有的人的余额都是正的。最后将昨天发生的,还没有对账确认的余额支付交易都置为对账并且支付成功状态。
通过这种反复对账的方式,终于可以解决这种复杂场景下的余额支付对账的问题了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值