03 系统面临的现实问题:订单退款流程失败以及订单支付超时问题

Posted 鮀城小帅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了03 系统面临的现实问题:订单退款流程失败以及订单支付超时问题相关的知识,希望对你有一定的参考价值。

1.回顾支付后的业务流程

支付成功后要做的业务如下图,包含扣减库存、通知发货、更新积分、发放优惠券、红包、push通知、更新订单状态等。

2.退款流程

有下单,也就有退款,这是订单支付的反向流程。

分析:

  1. 下单时,支付之后会发放优惠券、红包、积分,还会通知第三方发货等,那么现在退款了。
  2. 这些相关的福利也该退回才是,也就是说,退款之后要归还优惠券、积分、红包等。

退款需要做的事:

  1. 重新给商品增加库存
  2. 更新订单状态为“已完成”
  3. 减少你的积分
  4. 收回你的优惠券和红包
  5. 发送push告诉你退款成功了
  6. 通知仓储系统取消发货

最重要的,退款需要调第三方支付系统把钱重新退回去

3.存在的问题

问题一:退款和支付存在一样的问题,流程太长,子步骤太多,如果用户点击退款后执行那么多步骤,等到响应回去可能要好几秒,这种体验很差。

问题二:退款失败怎么办?这是很可能存在的。至于原因:可能第三方支付系统的问题,也可能是网络原因导致调用失败。

 

4.下单不支付问题

用户下单的同时锁定了库存,在跳转支付页后,用户放弃了支付。如果用户一直不付款,是不能一直放着的,因为锁定了库存,导致对应的库存商品不能被其他用户购买。

所以,一般下单后,对订单都应该有一个未支付的过期时间,如果过了这个时间没有支付,就将订单取消(无效化),同时将锁定的库存归还。

5.订单支付状态处理方案

当前给出的方案是:后台线程不断扫描的方式

系统后台启动一个线程,专门去扫描数据库中待付款的订单。发现超过24小时未支付的,将状态改为“已关闭”,并释放库存。

问题:如果有十几万个订单没有付款,难道就全部扫描一遍吗?

答:这是不可能的,这种后台线程不断去扫描十几万订单的方式效率是很低的。

参考电商小程序给出的方案:

  1. redis的键空间通知机制实现定时调度取消订单
  2. rocketmq的延迟队列实现定时调度取消订单

 

 

以上是关于03 系统面临的现实问题:订单退款流程失败以及订单支付超时问题的主要内容,如果未能解决你的问题,请参考以下文章

RocketMQ - 基于延迟消息机制优化大量订单的定时退款扫描问题

微信小程序订单完成怎么申请退款流程?

39 生产案例:基于延迟消息机制优化大量订单的定时退款扫描问题示例代码

订单退款&重复支付需求疑问点归纳整理

04 系统面临的现实问题:第三方客户系统的对接耦合性太高,经常出问题

微密圈多久可以不退款