用ecshop搭建的商城,有个需求,用户下的订单需要限制两个小时内支付,如果未支付则取消订单。
本来想的是做一个cron定时扫脚本,可这不是长久之计,但是php不像java有多线程。
试问该如何实现呢?
用ecshop搭建的商城,有个需求,用户下的订单需要限制两个小时内支付,如果未支付则取消订单。
本来想的是做一个cron定时扫脚本,可这不是长久之计,但是php不像java有多线程。
试问该如何实现呢?
比较粗暴:
做个clear_ord.php 做个url_write 变成clear_ord.js
入口页面加个random,随机概率低点,看用户访问量
优雅:
redis,memcache都可以解决
数据库字段加个创建订单的时间戳,看你自己需求也可以设置过期时间戳(创建订单时间戳+2个小时的时间戳),然后读取订单的时候判断当前时间戳跟数据库的时间戳的差值就可以了。不用定时跑任务啥的。很多系统都是这么搞的
订单生成时,以订单号为key写入到redis,同时设置缓存时间两小时,支付操作时,从redis里取订单信息,如果取不到,不允许支付,这样是否能满足你的需求
写个mysql的事件:
set GLOBAL event_scheduler = ON;
create event event_canle
on schedule every 1 DAY
starts date_add(date(curdate() + 1),interval 3 hour)
do update order_info set o_status = 2,finish_time = unix_timestamp(now())
where ( (unix_timestamp(now()) - add_time) > 86400)
and pay_id in(2,3) and pay_status = 0 ;
2 回答1.5k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
2 回答871 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
2 回答930 阅读
1 回答912 阅读
1 回答841 阅读
php是触发式的,
也就是说,你先保存订单生成的时间戳,状态字段为0,
到支付页面的时候,判断超时没有,如果超时,就把状态改成-1,给出超时提示,
如果没有超时,就支付,把状态改成1,如果支付成功,就把状态改成2。
搞不懂为啥要用crontab。