购物车、订单创建与重复请求
电商订单与支付系统实战#Python全栈#第二十三阶段#电商订单与支付系统实战#购物车、订单创建与重复请求约 730 字 · 2 分钟阅读
追问显示点击任意追问卡片可收起 / 展开
购物车中的商品、数量与选中状态应怎样保存?
追问 匿名用户和登录用户是否需要不同策略?跨设备使用、登录合并与商品失效时,怎样确定最终内容并反馈?
提交订单前需要完成哪些服务端检查?
追问 用户身份、商品状态、购买限制、数量、地址、优惠与库存如何检查?哪些检查必须与实际占用资源的操作一起保证一致?
怎样设计提交订单的业务防重标识?
追问 标识作用于哪个用户、哪个操作和哪次确认?同一标识携带不同商品或金额时应怎样处理,怎样与渠道支付幂等键区分?
用户双击提交或网络超时重试,怎样返回同一个业务结果?
追问 创建记录、占用库存与防重记录怎样保证一致?操作还在进行中时返回什么,失败后是否允许重试以及如何判断?
订单创建中的本地事务应包含哪些操作?
追问 订单、明细、库存预留和优惠占用如何选择原子边界?如果其中一步失败,怎样验证没有残留订单或被永久占用的资源?
为什么不宜在持有数据库事务时长时间调用支付网关?
追问 锁、连接占用与网关超时怎样影响其他订单?拆开本地保存与外部调用后,新产生的中间状态如何追踪和恢复?
怎样生成订单标识并处理唯一性冲突?
追问 业务编号与数据库主键是否必须相同?可预测编号对访问授权有什么影响,唯一约束与冲突重试怎样验证?
创建订单成功,但响应未送达用户时,页面怎样恢复?
追问 按防重标识查询、订单列表与再次提交分别有什么用途?怎样避免用户误以为失败后不断创建新订单?
未支付订单的取消与超时关闭怎样设计?
追问 关闭资格、库存释放、优惠恢复和渠道支付状态怎样协调?重复关闭任务与已经付款的订单应分别怎样处理?
怎样让订单列表、详情与操作入口保持一致?
追问 后端返回的可执行操作是否仍需在写入时重新检查?缓存、旧页面与多设备并发操作发生冲突时,用户应看到什么结果?