php 如何实现订单限时支付


ecshop 搭建的商城,有个需求,用户下的订单需要限制两个小时内支付,如果未支付则取消订单。

本来想的是做一个 cron定时扫脚本 ,可这不是长久之计,但是php不像java有 多线程

试问该如何实现呢?

php 取消订单 ecshop

堕落的猴子 10 years, 7 months ago

这个有点像短信验证码的有效期!memcache存储相关支付信息,设个有效期就行了吧。

kikyo answered 10 years, 7 months ago

显示的地方把未支付的并且时间超过两小时的显示为已取消的订单就行了。
在构造支付信息的页面也判断一下时间。

坏-苹果-麒 answered 10 years, 7 months ago

composer 里有个Carbon包 可以用这个

广重36号样刻 answered 10 years, 7 months ago

php是触发式的,
也就是说,你先保存订单生成的时间戳,状态字段为0,
到支付页面的时候,判断超时没有,如果超时,就把状态改成-1,给出超时提示,
如果没有超时,就支付,把状态改成1,如果支付成功,就把状态改成2。
搞不懂为啥要用crontab。

朕射你无罪 answered 10 years, 7 months ago

如果要严格执行你想要的逻辑,就需要做定时任务,可以用cron。如果取巧,可以在查看订单的时候去修改订单状态,保证看的时候是正确的就可以了,注意最好前后台都做同样地逻辑。

CJoshua answered 10 years, 7 months ago

订单生成时,以订单号为key写入到redis,同时设置缓存时间两小时,支付操作时,从redis里取订单信息,如果取不到,不允许支付,这样是否能满足你的需求

东方八云紫 answered 10 years, 7 months ago

数据库字段加个创建订单的时间戳,看你自己需求也可以设置过期时间戳(创建订单时间戳+2个小时的时间戳),然后读取订单的时候判断当前时间戳跟数据库的时间戳的差值就可以了。不用定时跑任务啥的。很多系统都是这么搞的

其实咱是马甲 answered 10 years, 7 months ago

提交订单时,记录一个时间,支付时,再判断当前时间 减去 提交时的时间,如果大于2小时,提示定单已过期.

戦術的敗北 answered 10 years, 7 months ago

@tiyee 说的是后端验证,我再补充一点,你用js的定时器来做一个倒计时,用户能看到还剩多长时间,你看时间到了,直接就把状态置为过期!~

御坂御坂御坂 answered 10 years, 7 months ago

一般做法:
写个计划任务 在Linux上面定时把满足条件的订单状态改为已取消

悠逸yui answered 10 years, 7 months ago

比较粗暴:

做个clear_ord.php 做个url_write 变成clear_ord.js

入口页面加个random,随机概率低点,看用户访问量

优雅:

redis,memcache都可以解决

史前大龙虾 answered 10 years, 7 months ago

这个限时两小时内支付,按正常需求来说这个并不一定要特别准时吧,上下差个几分钟还是没关系的吧。

那就写个job,每5分钟去跑一次。

直接用计划任务呗。

ciadean answered 10 years, 7 months ago

支付的时候判断一下订单生成时间不就是了。查看订单列表的时候再读一下时间就OK啦。

白纸傲娇君 answered 10 years, 7 months ago

Your Answer