《支付系统-收银台设计》
1 序
本文属于支付系统设计系列,原文参见Ping++的《支付系统白皮书》
2 支付方式的选择
收银台的常见支付方式有两种:收单,充值。
收单:通过各种支付方式对业务订单进行付款。
充值:用户对余额账户进行充值。
业务流程:以充值为例进行介绍
充值比收单区别就是,收单在支付成功后通知业务系统,而充值则是要回调充值服务。
实际上区别,可能根据具体业务有关,比如充值除了设计的赠送外,不适用额外 的优惠券。而收单通常可以余额支付的混合支付加上优惠。后面再说。
支付结果以异步通知服务端为准,前端的returnurl 通常有几秒延迟在查询支付状态。
3 组合支付
组合支付即一种以上的支付渠道完成付款的支付方式,组合支付是交易系统提供的一种交易服务类型。常见支付方式是余额+三方的组合。这里余额可以从广义的角度去理解,比如红包、优惠券、预付卡等都属于,单反账户余额本身不够支付需要三方组合付款都是此类。
3.1组合支付的流程
这里作者推荐的方式是优先调用三方扣除,成功后再调用本身的扣除余额。
实际情况不一定是这样,各有利弊,比如坏处就是本身余额失败了就需要走三方的退款,这个过程复杂。
不管怎么样设计,这里一个落地实践重要模式就是TCC模式。也是组合支付常见方式。
失败流程就不贴出来了。
3.2组合支付的设计
对于交易系统来说,组合支付就是两笔付款行为,会生成两笔支付记录,一笔是余额,一笔是三方。都成功的情况下,才通知业务系统,否则就要回退。也就体现出TCC的适用之处。
落地方案:对于余额系统或者红包来说,本身需要设置一个状态就是冻结,先冻结成功,再扣三方,三方回调成功则解冻实际扣除,否则解冻。
4 优惠支付
无论是代金券、优惠券、红包本质是基于账户的营销支付流程设计。作者提了两种方案:
1基于平台侧营销账户:营销成本从这个账户进行扣除,需要预先充值金额,用户支付时从此账户进行扣除。
2.基于用户侧营销账户:积分、红包各个与用户一一对应,对此账户进行操作。
营销支付系统设计
可以分为基于业务端做营销和基于支付端做营销两种模式
基于业务端做营销:
在业务平台对于优惠金额进行扣除。传入支付系统就是实际待支付金额。
基于支付端做营销:
因为常见营销有较强的用户属性,所以通常在营销系统里为用户开设单独账户,在支付时候,采取组合支付的方式,一笔订单多个支付渠道。
营销的本身疼点在于促销规则的多变性与系统稳定性,反作弊是其中重要环节。不属于本文讨论方向不展开。
其他:
实际项目中:扫码支付等也属于收银台范畴。而与之对应的是现金收款、POS机等非规范手段,对账是大问题。