# 《小型支付商城系统》第3-4节:商品下单
作者:小傅哥
博客:https://bugstack.cn (opens new window)
沉淀、分享、成长,让自己和他人都能有所收获!😄
# 一、本章诉求
对接数据库表,完成商品下单。
要注意商品下单中,要考虑整个流程中可能存在的失败节点。做编程开发很多时候都是在处理异常。
商品下单中,或者下单完成都可能存在失败的情况。比如写库失败,或者调用外部支付平台创建支付单失败,也可能存在用户创建完支付单但未支付的情况。
这些流程都是要在下单中做的处理,在公司的实际场景中,下单还要过很多规则校验。比如账户状态、风控、营销、试算、锁券等等流程,才会到下单。所以很多这样的场景,都会考虑使用设计模式进行解耦,否则很难完成后续的迭代。
# 二、下单流程
如图,本节我们先做下单流程。调用 Alipay 支付宝创建支付单和等待回调我们后续章节在处理。
- 首先,用户在系统中创建订单(流水单),创建过程中需要判断是否存在未支付订单,存在则可以直接返回。另外还有一种可能,创建的订单存在,但没有支付单,也就是【掉单】。这是因为本身的业务系统和外部的支付创建(支付宝)不是一个事务,不能一起成功或失败,所以要做一些流程的校验。比如我们创建订单成功,但创建支付单失败。这个之后用户继续创建订单,就会优先使用这笔订单创建支付单。如果流程中没有存在的掉单,则直接创建支付单即可。
- 之后,创建完支付宝订单,会由页面跳转到网络收银台,引导用户完成支付操作。
- 最后,就是接收支付回调消息,更新本地的订单状态,以及推动后续流程。比如;发放商品、驱动物流、虚拟支付等。当然在实际的商城中,还会有逆向流程,比如商品有问题,或者用户主动发起退单。这个时候就要走逆向流程,退单、审核、退款流程。你可以尝试完成。