请教一笔订单分两次或多次支付,应该怎么设计?

一笔商城订单,用户先支付一部分预付款,然后等到活动开始后再支付剩余尾款,请问这种情况应该怎么分订单?#

1. 一个订单号只可以支付一次,那尾款怎么支付呢?再分一笔订单出来吗?
2. 那以哪个订单号为准呢?
3. 如果以第一个订单号为准,是否需要告知用户第二笔尾款支付的订单号?
4. 如果涉及到退款的话要分批次退吗?

如果分订单的话,是不是要设计一个 尾款 的从表,订单表 与它是一对多关系?

第一次做这种需求,希望大家能给个思路,感谢 :heart:

悲观者永远正确,乐观者永远前行。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

我们之前也是这样, 同一个订单可以分多笔不同渠道,不同支付方式。当时的表设计是: 订单 , 订单收款单 , 收款流水。关系:订单 1 v 1 订单收款单 1 v N 流水。 当 收款流水金额 === 订单收款单金额时, 确认收完,更新收款单 , 订单。调用第三方发起支付使用流水的(id/uuid/snowflake), 创建流水根据收款单剩余最大金额创建。

3年前 评论
MArtian (楼主) 3年前
讨论数量: 12

我们之前也是这样, 同一个订单可以分多笔不同渠道,不同支付方式。当时的表设计是: 订单 , 订单收款单 , 收款流水。关系:订单 1 v 1 订单收款单 1 v N 流水。 当 收款流水金额 === 订单收款单金额时, 确认收完,更新收款单 , 订单。调用第三方发起支付使用流水的(id/uuid/snowflake), 创建流水根据收款单剩余最大金额创建。

3年前 评论
MArtian (楼主) 3年前

如果是我,我会把预付款订单和正常订单分开表。 预付款订单两个价格,一个是预付款价格,一个是尾款,然后 status 控制订单状态

3年前 评论
MArtian (楼主) 3年前
channel (作者) 3年前
sunny123456 3年前
颠倒的玉石

简单看成个分期,分两期

3年前 评论

支付订单号和订单的订单号分开

3年前 评论

这种突然想到,这种该一个订单号里放两个子订单号吧

3年前 评论

我们之前也是这样, 同一个订单可以分多笔不同渠道,不同支付方式。当时的表设计是: 订单 , 订单收款单 , 收款流水。关系:订单 1 v 1 订单收款单 1 v N 流水。 当 收款流水金额 === 订单收款单金额时, 确认收完,更新收款单 , 订单。调用第三方发起支付使用流水的(id/uuid/snowflake), 创建流水根据收款单剩余最大金额创建。

3年前 评论
MArtian (楼主) 3年前

感觉大家的做法都一样,只是表的名称有点区别吧,有的叫子母表, 有的叫分期,我们叫流水 :joy:

3年前 评论
sanders

一般分为订单表和流水表;如果再考虑售后,还得有售后单表,流水表中的金额还可以为负数。

3年前 评论
hhhhkkk 3年前

@22 @hhhhkkk @sanders 请教一下,分订单表和流水表,那么在发起支付的时候(支付宝,微信创建的订单)订单号就填的是流水号吗?就是把流水号作为订单号创建支付宝,微信的订单,是这样吗?

3年前 评论
hhhhkkk 3年前
sanders 3年前

支付表叫商户订单,面向支付平台,商户订单号和平台订单号是对应的。 而商城订单是业务订单,面向的是客户,是通过查支付订单来判断业务订单的支付状态。 所以 “一个订单号只可以支付一次” 是混了概念。

3年前 评论
MArtian (楼主) 3年前

分两个订单号?
1 -> 1.1,1.2,1.3

3年前 评论

是不是可以把预付款看成,购买了一张只能购买响应成品的优惠券,优惠券中有一种类型叫预付款,这样不就可以了吗?

3年前 评论

之前公司也有这个业务,当时是订单是一个表(可以存每次订单的总价格,当前价格),建一个子订单表(真正支付的订单表)。

3年前 评论