银行转账功能(二)
1、上一篇我们说过了同行转账,就是同库转账。其原理无非是一个减钱,一个加钱。
思考:既然原理都是一样的,那么为什么还要说这个不同银行(跨行)转账呢?
2、跨行(跨地区和跨银行)转账实质上我们可以理解为跨数据库转账。那么如果说是这样的话:
转出方:账户甲
转入方: 账户乙
(1) 获取不到 账户已 的账号信息
(2)无法或者说没有能力将给 账户乙 的加款这件事添加事务
3、跨行转账的基本实现思路:
前提:每个银行都会有一个公有账号(PublicAccount),这个账号存在的意义主要是用来处理跨行业务。
(1)从账户甲扣款(新手看的时候括号内的备注请忽略,真扣还是假扣我们不管,真扣(马上减去转账金额),假扣(该账户会有一个字段记录转出金额,定时根据转入方到账或者银行自己的条件对其进行归0处理))。
(2)给 银行甲 的PublicAccount加钱。
(3)通知 账户乙 所在的 银行乙,按照 银行乙 约定的方式传递数据给该行所提供的API 。
(4)银行已处理完之后,会通过某种方式提醒 账户甲所在的 银行甲。然后 账户甲完成了向账户乙的转账操作。
(5)那么问题来了,银行甲 还欠着 银行乙 的钱呢。它只是收 账户甲 的钱,让 银行乙 给 账户乙 加款。但是 银行甲 没给 银行乙 转账(此时 账户乙 加款成功)。
(6)在夜深人静的时候(在线用户较少的时候),银行甲的PublicAccount账户会向银行乙的PublicAccount中转账。就是把当天的银行甲向银行乙中所有转账金额加到银行乙的PublicAccount账户中。当银行乙的反馈信息中是加款成功的时候,银行甲减去向银行乙的转账金额(不归0的原因是这个操作过程中可能有用户完成了一笔转账或别的操作)。