php 订单支付完成的时间超过订单自动取消时间

1. 订单支付完成的时间超过订单自动取消时间怎么处理

问题描述:下单时间12:00,订单支付超时自动取消时间为30分钟,客户跳转的三方支付后12:45才完成支付,然后会导致支付回调失败。

JensonWang
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案

这个主要是基于你的业务,如果是商城等为了成单,可以修复订单,毕竟目的是为了成交,如果是对时效要求比较高的订单,可以再支付的时候退款,一楼的做法其实能解决90%的情况,但是退款这一步还是要做兜底~

5个月前 评论
x7779a 5个月前
JensonWang (楼主) 5个月前
JensonWang (楼主) 5个月前
讨论数量: 27
Dcatplus-杨光

1.接入第三方支付,都有可以取消支付订单的接口。在系统里面创建定时任务计划,超过30分钟的未支付订单,关闭取消支付(第三方支付),订单关闭取消(业务系统)。

2.上面这种有一定的风险,就是取消支付和用户支付同步了。所以基本上只是关闭订单。

3.第三方支付都会有异步通知,如果收到成功支付的通知,把取消的订单自动恢复。

5个月前 评论
QIN秦同学 5个月前

这个主要是基于你的业务,如果是商城等为了成单,可以修复订单,毕竟目的是为了成交,如果是对时效要求比较高的订单,可以再支付的时候退款,一楼的做法其实能解决90%的情况,但是退款这一步还是要做兜底~

5个月前 评论
x7779a 5个月前
JensonWang (楼主) 5个月前
JensonWang (楼主) 5个月前
sanders

这应该是产品设计问题,也很常见,最简单的处理方案就是给用户在前端一个倒计时,显示还有多久订单就关闭支付了。你看美团外卖就这么干的。

5个月前 评论
JensonWang (楼主) 5个月前
vacker

这个很简单呀,写一个30分钟后执行的【取消订单队列】,30分钟后队列执行时判断是否支付成功,没有支付就执行取消程序,支付成功就不管了。

5个月前 评论
JensonWang (楼主) 5个月前
Imuyu 5个月前

在天狮产业园?上个月有家外派让我去,那怎么样呢

5个月前 评论
JensonWang (楼主) 5个月前

天狮集团,咋这么熟悉呢?干啥的

5个月前 评论
JensonWang (楼主) 5个月前

其实就是一个延时队列,例如12:00分创建订单,同时往延时队列里加入这个任务,如果用户在半小时内未支付,那么到点去执行关闭订单操作。如果用户在半小时内支付,就在延时队列里删除这个任务。

但是可能需要考虑一点,如果大量的延时队列存在,对于系统的压力的问题,以及留够冗余的处理时间。还有有个朋友提到的特殊情况,例如当用户支付过程中,延时队列关闭了订单,那么应该以支付结果为准等。

5个月前 评论
JensonWang (楼主) 5个月前

如支付宝、微信 他们的支付订单也有超时时间的吧。超过时间输入支付密码后我记得是会失败的吧。 支付宝文档:opendocs.alipay.com/open/203/10528... time_expire参数:非必填,过期时间,用户多长时间不支付订单关闭,如果不传默认是和签约协议保持一致。

5个月前 评论
JensonWang (楼主) 5个月前
博学多才的走停 (作者) 5个月前

弄个缓存 把要支付的订单id存进去 时间设置30分钟 如果读不到了 这个id就不存了 说明未支付

5个月前 评论

我觉得重点是怎么解决,订单取消 却被已经支付了的问题。比如订单失效5分钟。在4分50秒的时候,用户点开了支付宝。在输入密码的时候已经过了五分钟。在五分10秒支付成功,然而系统已经把订单取消了。但是支付宝回调支付成功。这个情况怎么处理。 如果影响不大 就把订单恢复?要么就是退款?

4个月前 评论
JensonWang (楼主) 3个月前

第三方支付都是可以设置过期时间的,一般不需要考虑这种情况。如果出现回调发现订单已经取消了,要么修复订单,要么退款,看产品策略了

4个月前 评论
JensonWang (楼主) 3个月前

订单状态只是一个status字段,0未支付,1已支付,-1取消。超时变为-1,支付成功后,又改成1。 支付回调,只是把一个已取消的订单状态改为支付成功。。没有什么冲突吧

1个月前 评论
JensonWang (楼主) 1个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!