订单系统微信支付,支付宝如何设计?

业务需求:
用户先下单,然后在刚才得订单再下附加订单(可以多次),还可以加小费(可以多次)。订单如何设计?退款如何设计?
目前遇到问题是退款这里。

订单表

CREATE TABLE `fa_iqicrm_order`  (
  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `orderid` int(10) NOT NULL DEFAULT 0 COMMENT '订单id',
  `price` decimal(10, 2) UNSIGNED NOT NULL DEFAULT 0.00 COMMENT '金额',
  PRIMARY KEY (`id`) USING BTREE
)

目前这样做的,用户下单订单是:1

INSERT INTO `fa_iqicrm_order` (`id`, `order_id`, `price`) VALUES (1, 0, 1);

,然后用户附加(2)、加小费订单(3)

INSERT INTO `fa_iqicrm_order` (`id`, `order_id`, `price`) VALUES (2, 1, 2);
INSERT INTO `fa_iqicrm_order` (`id`, `order_id`, `price`) VALUES (3, 1, 3);

订单1是主的,订单2,3是订单1的附加订单,小费订单。
支付是没有问题,退款就有问题了。
1、如果全额退款,就直接三个订单退款了。

2、如果是部分退款,微信,支付宝就有问题了,如何设计?比如1+2+3=6,现在要退4元,也不能每个订单都退点款。不合理。微信支付宝也不能在上面3个订单中的一个订单退款4元。

请大佬教一教。

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

最终选择了每个订单都退款,根据金额来退。

1年前 评论
讨论数量: 21
巴啦啦

我看你所有场景似乎都是使用的fa_iqicrm_order这张表,其实你上面说的很清楚。我们先识别三个实体出来。

  1. 订单表。
  2. 附加单表。
  3. 小费表。
    当它们分开了,退款应该就没什么问题了吧?附加单也是订单,但是它对订单表是强依赖的。订单表根据业务需求,可以对附加单表,和小费表的数据进行冗余设计。这看起来像是做餐饮服务行业。拆开了能够应对更多的变化和需求。
1年前 评论

或许把退款看成是反向的订单,正常的订单是商家发布商品,客户看到中意的商品,客户付钱下订单,商家发货,客户确认收货,订单完成。 退货是客户发布商品,商家确认可以退的商品,商家付钱下退货单,客户发货,商家确认收货, 退货完成。

没做过电商系统,以上仅供参考。

1年前 评论

是分开付款,还是一同付款的

1年前 评论
转打瞎比比 (楼主) 1年前
php_yt (作者) 1年前
转打瞎比比 (楼主) 1年前
php_yt (作者) 1年前
转打瞎比比 (楼主) 1年前

为什么只有三个订单1,2,3 但是可以退款4元?

1年前 评论
转打瞎比比 (楼主) 1年前

退款优先商品金额,其次服务金额。 可以使用递归的概念来做。

  1. 确认用户退款金额。
  2. 优先从支付最大单扣除,如果不足继续下探顺序订单 但不会 collect 小费订单
  3. 尝试小额单据继续扣除递归至扣除完毕

注意点

  1. 小费不可退,不要期望使用小费来弥补退款的金额
  2. 优先使用原始订单扣除,后续再使用附加订单扣除,因为退款顺序应该和支付顺序一致。
  3. 应该在申请退款的时候确定好最大可退金额

PS 小费单可不可退需要确认,只是以小费单不可退完成的设计。

1年前 评论
转打瞎比比 (楼主) 1年前
陈先生 (作者) 1年前
转打瞎比比 (楼主) 1年前
hongfs 1年前

上楼有人说了,三张数据表分开设计,或者在你设计的那张张表中还需要另一个字段来标注不同的订单类型也行(但是不便于扩展)

1年前 评论

1.一键退款按钮。点击退款后,先把主单跟小费的订单数据查出来,直接全部退款 2.部分退款。在小费单旁边都有一个退款按钮,点击小费单后,就把当前的小费单跟关联的主单金额退了 看看这种逻辑行不行

1年前 评论

目前你应该是让产经或者客户针对退款的先后问题(小费,附加单,主单)作出明确回复,而不是你自己在想如何处理退款,不要最后做完了,产经或者客户要的不是这样处理

1年前 评论

部分退款:确定退款单子的优先级,递归退款

1年前 评论

1.部分退款也是按单退款,保存好订单号,服务费也按子单处理; 2.增加后台退款审核

1年前 评论

最终选择了每个订单都退款,根据金额来退。

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!