一、订单
- 订单相关属性:
订单号、子订单号、订单类型、订单状态、用户id、用户名称、单价、数量、总价、支付方式、支付时间、订单备注、运费等。
订单号和订单状态、支付方式,是比较重要的属性。
一个订单,可能会有多个子订单。
- 状态机:
订单状态:待支付、已支付、超时、取消、完成、关闭。
如果需要发货和收货,可以增加一个 待发货、待收货、已收货 的状态。或者是已收货后,订单状态变为已完成。
关闭的状态,可以细分为:订单取消交易关闭、支付超时交易关闭、全部退款交易关闭。
- 数据存储:
订单一定就要考虑数据量,是否分库分表。
最好设置冷库和热库,时间比较久远的订单,可以归档,放到冷库,避免数据越积越多,影响查询和更新等业务的响应速度。
添加订单(下单)
下单可以和添加支付单 合成一个按钮,用户点击后,生成支付要素,显示支付金额,再输入密码确认。
订单超时
下单后,如果不支付,超过一定时间后,订单状态会变成 订单超时。
订单超时,需要设置超时时间,比如15分钟,超时后订单变为超时状态,一般会用延时队列实现。
取消订单
取消订单,如果是调用第三方的下单接口,一般在取消订单时,也需要调用第三方的取消订单接口。
取消订单之前,最好先去第三方系统 查一下订单的状态,是否已经支付成功。
取消订单,或者退款后,订单变为关闭状态。
产品需要明确,取消订单,是否自动退款。
用户在拉起支付页面后,有可能切换到其他的支付方式,比如用微信支付,没有输密码/指纹支付,而是切换为支付宝支付,因此取消订单,需要考虑是否要取消所有下过单的下单方式。
取消订单,如果有库存,需要回滚库存。
订单列表:
- 可以根据订单状态、订单类型,展示不同的订单。
订单详情:
-
用户体验: 可以为 订单号 提供一个复制按钮,方便用户复制,有问题时提供订单号,分析问题会方便些。
-
如果订单详情,涉及多个第三方支付系统/订单系统,那么可以多重试几次。
比如 支付成功后,第三方系统的订单状态、支付状态还是 未支付,那么可以多重试几次,状态为支付成功时才展示。
二、支付
- 支付相关的属性:
订单号,用户id,支付流水号,支付状态,支付方式,支付金额,支付回调时间。
- 安全:
支付相关的,要注意安全性。
做好风控,针对账号和ip进行记录和监控,发现有异常行为的账号或者ip,及时做名单限制,避免黑产。
- 产品需求:
产品需要明确,支付成功后能否取消订单。
- 第三方支付:
微信支付、支付宝、云闪付等
- 幂等性:
支付回调,需要做幂等。
- 事务性:
支付成功,收到回调通知,修改订单状态,执行业务逻辑,需要保证事务性,要么全部成功,要么全部失败。
支付-二清
- "二清"是支付行业中一个特定的概念,它指的是在支付结算过程中存在两次清算的行为,
其中第二次清算发生在没有获得中国人民银行(PBOC)颁发的《支付业务许可证》(即支付牌照)的机构之间。这种行为在中国被认为是非法的。
二清的基本定义:
一清:这是指资金直接从持牌的支付机构(如银行或拥有支付牌照的第三方支付公司)清算到商户账户的过程。
二清:当资金先由持牌支付机构清算到一个无证的中间平台(这个平台可能是电商平台、O2O平台等),然后再由这个中间平台将资金分配给其子商户时,这就构成了所谓的"二清"。
在这个过程中,中间平台实际上扮演了一个资金清算的角色,而这正是需要支付牌照才能合法进行的操作。
二清的解决方案:
申请支付牌照:虽然成本高昂且审批严格,但对于大型企业来说,这可能是最直接的方式之一。
与持牌机构合作:通过与已取得支付牌照的银行或第三方支付公司合作,利用他们的合规体系完成资金清算流程。
使用分账系统:一些金融科技公司提供的分账系统可以帮助企业在不触碰资金的情况下完成对下游商户的资金分配,确保资金流向透明可控。
支付单:
调用第三方添加支付单,返回支付要素,用户输入密码后,再根据支付回调,更新订单状态。
同一订单,生成支付单后不支付,重新支付时,一般需要取消旧的支付单。
支付回调:
调用第三方的支付,添加支付单后,会返回支付要素,用户输入密码确认,之后系统会收到第三方系统的支付回调。
根据是否支付成功,执行业务逻辑。
主动查询支付状态:
不能依赖第三方系统的回调,第三方系统有可能会出现不回调的情况,需要主动查询。
可以在客户端调用后端查询支付状态的接口,每隔几秒轮询一次,一般情况下,重试三次到五次即可。
三、发货
- 发货相关属性:
物流公司、物流单号、发货日期。
四、收货
- 收货方式:
用户确认收货、自动收货。
可以在管理界面,设置自动收货的时间。
五、履约
履约是指从用户下单到商品交付的完整执行过程,涵盖库存管理、物流配送及售后服务等环节。
核心目标:确保商品准确、高效地送达用户手中。
典型场景:
用户下单后,仓库分拣商品并打包,由物流公司配送至用户地址。
商品缺货时,触发采购或调拨流程以保证履约能力。
关键流程:
订单分派:根据库存分布、物流成本等规则,选择最优仓库或供应商。
库存扣减:预占库存防止超卖(需与核销环节解耦,避免因支付失败导致库存死锁)。
物流配送:对接第三方物流(如顺丰、京东物流)或自建物流,生成运单并跟踪物流状态。
异常处理:拦截订单(如用户申请退款)、物流异常重派、缺货补发等
五、交付(某些交易系统会存在交付的行为)
- 产品需求:
业务的交付,需要指定是立即交付,还是收货后才交付。
- 幂等性
交付要做好幂等处理,不要重复交付。
- 部分交付:
如果业务允许 订单分多次交付,每次交付一部分,那可以根据子订单来划分部分交付。
六、技术文档
微信:
-
微信文档:
https://pay.weixin.qq.com/docs/partner/apis/partner-in-app-payment/partner-jsons/partner-app-prepay.html -
微信接入前准备:
https://pay.weixin.qq.com/wiki/doc/api_external/ch/open/chapter3_4_2.shtml -
微信技术社区:
https://developers.weixin.qq.com/community/homepage
支付宝
- 支付宝文档:
https://opendocs.alipay.com/mini/03l5wn
支付宝 sdk 调用失败:
- 支付宝的错误原因:当前服务端SDK版本不支持openid 。
比如:当前服务端SDK版本(alipay-sdk-java-3.3.87.ALL)不支持openid 。
解决方法: 可以反馈给支付宝的客服、技术支持,给这个商户降级处理一下,提供项目的appid就行。
具体参考版本申诉回退的文档 : https://opendocs.alipay.com/mini/0ai736?pathHash=e4af54b3
支付宝的技术支持:
有问题可以提问,咨询客服。
https://opensupport.alipay.com/support/home
抖音
- 抖音开放平台:
https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/server/server-api-introduction