猜码
猜码
  • 发布:2021-07-20 18:36
  • 更新:2022-08-01 17:54
  • 阅读:1473

各位大神,能否分享一下:订单倒计时超时未支付,云端实现订单自动取消关闭的逻辑思路?谢谢!

分类:uniCloud

比如,消费者下了订单,但未支付,并退出应用,怎么实现在云端订单自动取消关闭(时间30分钟)。

2021-07-20 18:36 负责人:无 分享
已邀请:
有问

有问 - 生活,趣与失。

那就。。。不是有redis吗,将订单信息写入到redis中,用户支付时,如果里面没有缓存,则是为已过期,无法支付,如果用户主动点了订单就可以查询并关闭,如果没主动点,那就一小时循环检查一次,过期的订单关闭就好了。

DCloud_Android_DQQ

DCloud_Android_DQQ

跑定时任务啊。
检查未完成订单状态,超时则关闭。

  • 猜码 (作者)

    谢谢大神回复,我现在的需求是30分钟倒计时(甚至更短时间)结束后,自动取消关闭订单,但阿里的定时触发器限制为最高频率每小时触发一次,不符合要求。还有就是每个订单下单时间是不一致的,在执行跑批前,会存在一些已经倒计时结束的订单,但是此时这些订单的状态依然是未取消关闭的;另外一个需求是想单独控制每一个订单,每个订单自动取消关闭后,及时地把已订购的数量释放回库存。前端主动取消订单,是可以通过云函数来控制订单状态并释放订购的数量回库存,但是消费者不主动取消订单,并退出应用,这种场景下,就没什么思路了。望大神再次不吝赐教!


    2021-07-20 20:36

  • DCloud_Android_DQQ

    回复 猜码: 另外一个需求是想单独控制每一个订单,每个订单自动取消关闭后,及时地把已订购的数量释放回库存---------这个是合理需求。


    2021-07-21 11:16

  • DCloud_Android_DQQ

    没太明白你的意思,如果订单要求超过30分钟超时。。那么你的批处理30分钟跑一次肯定不行。。。要以十分钟,五分钟的粒度跑。 看上去你的问题关键点在于 但阿里的定时触发器限制为最高频率每小时触发一次


    2021-07-21 11:17

  • DCloud_Android_DQQ

    回复 猜码: 这个限制哪来的。 是基于uni-cloud?


    2021-07-21 11:17

  • 猜码 (作者)

    回复 DCloud_Android_DQQ: 是基于uni-cloud,您们官方文档里是这样描述的:当前阿里云没有服务空间用量计费,为避免资源浪费,定时触发器限制为最高频率每小时触发一次,要求cron表达式中的秒和分仅支持配置固定的数字,不支持特殊字符。(如需提高调用频率可以发送邮件到service@dcloud.io进行申请)


    2021-07-21 22:02

吃个大西瓜

吃个大西瓜

  1. 你可以换成腾讯云服务器,腾讯云定时可以做到30分钟一次
  2. 如果不想换服务器,可以使用一个临时方案 就是24小时开着一个网页 这个网页写一个定时任务,30分钟请求一次
  3. 上述都不行,就找产品经理改需求,将30分钟改成1个小时
DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

其实不需要定时任务,只要给订单一个设置一个超时时间就行了,端上判断超时之后不允许支付即可

  • 吃个大西瓜

    他的需求里有一个释放库存的操作


    2021-07-21 11:07

  • DCloud_uniCloud_WYQ

    回复 吃个大西瓜: 释放库存这步只能用定时任务扫描了


    2021-07-21 11:25

  • 吃个大西瓜

    回复 DCloud_uniCloud_WYQ: 有一个骚操作 就是写一个清理超时订单和释放库存的云函数 放到客户端 每当客户打开app/小程序/网页时就调用一次 或者他们进行商品和订单查看的时候就调用一次 因为只有当有用户进入app查看订单时 订单状态才有意义 当没有用户查看订单时 订单处于什么状态是没有意义的 同时还需要在后台管理系统里做相应的设置 这样基本上也实现了他的需求里


    2021-07-21 11:33

  • 猜码 (作者)

    谢谢两位大神。“其实不需要定时任务,只要给订单一个设置一个超时时间就行了,端上判断超时之后不允许支付即可”,在前端这个功能是需要的,但服务端还要做一层超时之后不允许支付,原因是如果用户在倒计时结束前修改了前端时间,此时的时间是本机时间,而不是网络时间,相当于可以不断地延长结束时间,还是可以支付的(此时定时任务已经把这订单作废了并释放库存),这样就存在安全隐患。我现在的思路是:用定时任务扫描和释放库存,细粒度可以用两个同功能不同名的云函数分别在准点和半点运行跑批,再结合前后端超时防支付,基本可以达到要求。


    2021-07-21 22:40

  • 生涯

    回复 猜码: 给订单设置超时间后,用客户端时间判断订单是否超时,显示还是隐藏,无非就是要提前拉取订单数据提前判断。个人觉得也没必要非得30分钟1小时什么就释放库存,设定一个后半夜的定时器,查一次统一批量删除失效订单不好么。


    2021-07-22 09:49

  • 猜码 (作者)

    回复 4***@qq.com:部分场景下是可以用这种方法。但如果商品数量较为有限的情况下,要及时释放库存,提高成交率,比如12306就是这样,订单30分钟内不支付就失效了。


    2021-07-22 10:24

  • 生涯

    回复 猜码: 那你把控制权交给客户端,让客户端去触发云函数,把失效订单清除释放库存,照你说的商品数量有限的情况下,这样操作,不管是哪个用户启动程序,都会先释放一下库存。


    2021-07-23 09:42

七月_

七月_

rabbit 延时队列插件

1***@qq.com

1***@qq.com

请问作者最终怎么解决了?

要回复问题请先登录注册