一张小票看透支付清结算架构

本文由作者 陈天宇宙 发布于社区
支付清结算相关的系统写了很多了,单模块介绍的也不少;虽然有几个架构性质的文章,但是有不少朋友反馈说无法串起来;今天我们就从一次美团外卖的小票来看,将支付清结算串起来会是什么体验!准备好了么,抓好扶手,走起!

1.一张小票我们看下面外卖盒上的小票,牛肉拌饭1份一共39元,餐盒费1元,没有配送费,合计40元,优惠了19元,实付21,实收17元

我们再看美团订单的信息,烤肉饭1分39元,打包费1元,配送费原价7元现价2元,美团会员15元;美团红包减7元,满减优惠14元;总优惠26元,合计36元

我们发现商家的小票和美团的订单信息之间有不少的差异,特别是优惠的明细展示以及优惠总额和应付总额之间存在差异;下面我们就来顺藤摸瓜,分析背后的玄机

我们先认清一个关系,订外卖的陈老师跟商家没有直接的关系,美团跟商家直接是结算关系,也就是美团帮助商家代收餐费,并进行结算;简而言之就是陈老师付给美团综合的外卖钱,美团抽一部分然后给商家结算餐费

我们先粗略地假想一下,这个过程是怎么完成的:
我们先到美团平台选择喜欢的“商品”然后“下单”并生成交易“账单”选择支付方式进行“支付”支付成功后美团要履行承诺把餐送到“履约”完成以后美团就开始进行各方利益的“清分”计算了算清楚应给给各方多少钱时并计入账簿“记账”然后就是进行“结算”

按照这个思路,我们来看,上面的小票在每个环节都是怎么处理的呢
2.商品商品广泛用于电商系,在o2o领域我们可能叫“服务”多一点,这里其实站在吃货的角度来看,订外卖,买了一份商品也没什么问题;商品模型这里我们不过多介绍,简而言之就是下面这样一个高度抽象的结构


那么这一单外卖的商品有哪些呢,有4个(这里我们将配送服务看做商品)

这里我们要说一下美团会员,这是美团推出的一个会员服务,相当于花钱买了多张优惠券,所以购买美团会员获得优惠券也是一次交易,而且本交易要先与外卖单,因为外卖单的支付用到了这批券,交易层处理很有意思,大家可以思考一下


3.订单选购好了商品,那么就需要下单了,这时候订单会去营销系统获取可以使用的活动优惠或者卡券,本小票我们可以看出来,有这些优惠我们可以使用


因为目前我们还不清楚美团和商家之间的清结算协议,所以暂且认为所有优惠由美团提供给用户,后续美团再基于协议跟商家之间做优惠的分摊,这部分不是本文的重点,大家可以私下思考交流

这样我们就得到了订单信息了


其实我们发现,其中的美团红包是基于15元购买了优惠券以后才能使用的优惠,相当于这一单,你要先买会员获得优惠券,然后在本单同时使用优惠券进行优惠,虽然是同一个订单,但我们可以想象出来,在交易处理层,至少需要做2次处理,一个是对美团会员的处理,另一个是对本单整单的优惠处理;所以订单需要拆成2个子单,一个是外卖单,一个是美团会员单


我们看到商家的小票,商品总价是40,总优惠是19;跟订单11101之间的7元差额是什么呢,其实就是配送费,那么将配送费抛出后跟商家小票一致,我们可以推断出商家承担了5元的配送优惠成本,加上满减优惠14,商家总优惠成本是19;
但最后我们发现商家实收17元,那么这4元是什么呢?其实我们有2个推断,一是美团抽佣4元,另一个可能是商家承担美团红包7元优惠中的4元;如果是取中间可能的话那么实际可能是
4元=x+y
x=美团抽佣;x属于[0-4]元
y=分摊美团红包优惠;y属于[0-4]元

4.交易完成了订单以后就需要创建支付账单了,基于以上分析交易处理是非常复杂的,因为要先处理美团会员的购买,然后处理外卖订单,

这里因为有2个子单,所以我们生成2个交易账单,但是在支付的时候我们进行合并支付


基于账单生成支付请求


5.支付
账单生成以后,我们进行支付处理,微信支付请求支付系统,优惠类支付我们等待微信支付成功以后请求营销系统,完成优惠券的核销,这样我们就完成了账单的支付了,这时候账单变为已支付,订单支付状态变为已支付,订单状态变为待配送

6.履约订单变为待配送时,会生成服务订单,也就是配送订单,由骑手小王01抢单了

然后的过程大家都熟悉,取了餐,送餐,确认已送达,服务单完成,将订单推送至清算中心进行清分计算
7.清算清算系统接收到的清算订单信息包含,订单信息,账单信息,支付信息,履约信息





在清分计费环节有几个关键的模块,我们可以设定为一下模型


计费模型就是基于订单业务我们就知道应该计算出什么样的费用出来,比如本单其实有2个业务,一个是外卖业务,一个是美团会员业务

我们假设有计费模型是这样的,美团外卖业务需要计算商家应结算金额,抽佣金额,优惠分摊金额;美团会员计费模型需要计算出美团会员费给平台业务的分成,那么简单起见我们的模型如下:

我们再基于业务类型,去查找计费规则,什么是计费规则呢,就是计费参数,计费基数,计费模式,计费规则;我们设定规则如下:


那么计费规则,我们可以计算出以下清分结果:

所以我们得到以下清分结果:

剩下的就是优惠成本的分摊了

8.账务完成清分计费以后就需要请求账务系统完成记账了,为了简单我们只对商家的结算和骑手的结算进行记账;这时先生成账务记录

账务流水去操作账户更新余额,这部分内容大家可以看《账户系统设计从入门到精通》


入账成功后账户余额变为

9.结算商家和骑手都可以在钱包里看到账户里入账了,然后可以对余额发起提现;生成提现订单,请求打款中心完成出款,这个我们就不详细介绍了
10.相关系统这里面涉及到了11个系统,我们之前都有文章详细介绍过,文末点击「阅读原文」即可查看

收银台设计方法论

支付路由设计详解-我见过的最美算法

支付通道介绍和接入

订单系统设计解析

详解|交易核心设计指南
账户系统设计从入门到精通

详解 | 结算系统设计

对账系统从入门到精通
11.综合架构从上面的案例,并结合之前的一些文章,我们抽象出一个清结算的通用架构,我们称之为“311架构模型”,即分3层,11个系统;所以叫311架构模型;大家记住这个架构,基本可以解决绝大部分平台的订单支付交易清结算业务模型


思考题:
这张打车小票,司机手机的结算信息与用户订单的结算信息;你能想象出来系统层的实现方式以及业务流转么?用户,滴滴,司机三者之间的清结算结果是怎么样的呢,滴滴这一单是挣钱了还是赔钱了呢?欢迎交流。

声明:以上内容均为案例讲解设定,推测,并非美团真实系统设计,请悉知

↘好文推荐:
俞军:产品经理必备的2个模型
用户细分指南:6种模型与5类维度
产品方案:我的PRD撰写规范

点个“在看”吧
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Java代码,用于打印输出购物小票结算: ```java import java.util.Scanner; public class Shopping { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("请输入T恤件数:"); int tShirtNum = input.nextInt(); int tShirtPrice = 245; int tShirtTotalPrice = tShirtNum * tShirtPrice; System.out.println("请输入网球鞋件数:"); int tennisShoesNum = input.nextInt(); int tennisShoesPrice = 570; int tennisShoesTotalPrice = tennisShoesNum * tennisShoesPrice; System.out.println("请输入网球拍件数:"); int tennisRacketNum = input.nextInt(); int tennisRacketPrice = 320; int tennisRacketTotalPrice = tennisRacketNum * tennisRacketPrice; int totalPrice = tShirtTotalPrice + tennisShoesTotalPrice + tennisRacketTotalPrice; double discount = 0.8; double actualPrice = totalPrice * discount; System.out.println("购买物品\t\t单价\t个数\t金额"); System.out.println("T恤\t\t" + tShirtPrice + "\t" + tShirtNum + "\t" + tShirtTotalPrice); System.out.println("网球鞋\t\t" + tennisShoesPrice + "\t" + tennisShoesNum + "\t" + tennisShoesTotalPrice); System.out.println("网球拍\t\t" + tennisRacketPrice + "\t" + tennisRacketNum + "\t" + tennisRacketTotalPrice); System.out.println("折扣:\t\t8折"); System.out.println("消费总金额:\t" + actualPrice); System.out.println("实际交费:\t"); double payment = input.nextDouble(); double change = payment - actualPrice; System.out.println("找钱:\t\t" + change); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值