一手交钱,一手交货
商城业务算是逻辑最严谨的业务之一,钱可千万不能算错。算少了,容易被薅羊毛,算多了,容易遭遇大规模投诉。
其中两个概念非常重要:
业界一般采用的方案有“

主要模块有:

下单--->支付--->交货
主要的模块包括
下单这里的主要问题是要保证**生成订单**和**减库存**是原子性的操作,不能出现一方成功一方失败。
那么,如何实现呢?
方案:加入异常消息队列,交易模块
下图就是加入异常队列后有异常时的操作流程。

交易模块主要问题是保证扣钱和发货的事务性,扣钱了必须要要发货。
扣钱这里也可能涉及到多个币种,例如微信读书的限时书币和永久书币,肯定是先扣了限时书币再扣除永久书币,或者书币扣完了再扣钱,其中一方失败都需要回滚或重试。
这里以书币为例,先扣书币再拉起支付扣钱。
这里我们可以先冻结掉书币,是冻结不是真扣,真扣除就会有流水。
再拉起支付,等待支付结果的状态回调,从而顺利进行下一步流程。

对账模块主要是以订单为维度,扫描各个订单的处理流程是否正常。
是否扣库存失败、是否支付失败、是否发货失败等等
这就要求:
所有自动化流程都可能失败,最终依赖异常处理模块(自动告警+重试)和人工介入——比如对账发现“扣了钱没发货”,系统自动触发补发,仍失败则通知运营/开发手动处理。
并不是说百分比自动补偿做不到,而是性价比太差,最后由人工兜底是比较划算的。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。