很多站长朋友们都不太清楚php订单失效时间,今天小编就来给大家整理php订单失效时间,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 php怎么实现 下单以后超过24小时不支付,订单自动删除 2、 ecshop程序(php内核)怎么来实现 下订单后3小时不付款,自动取消订单 3、 如何使用php、html及消息队列实现订单超时自动关闭订单 4、 php怎么实现下单以后超过几个小时不付款,订单自动删除(是删除不是关闭或不让支付) 5、 订单超时,活动过期解决方案:php监听redis键重复触发引发事件 php怎么实现 下单以后超过24小时不支付,订单自动删除一般订单是保存数据库的,购物车的东西可以放到cookie,你可以弄个定时任务,每小时查询未付款订单,这个看你的精确度了,你要不需要精确,,就一小时一次,需要精确,就时间间隔缩短
ecshop程序(php内核)怎么来实现 下订单后3小时不付款,自动取消订单你在页脚埋一个js吧 当前台有用户访问网站的时候 都会触发这个JS 服务端 用txt文本 或这 数据库 记录一下 上次处理订单的时间 当这个js触发的时候 调用服务端的文件判断当前时间和上次时间是否有1个小时(这个可以自行设置频率 根据网站订单的量调节) 如果满足时间差了 就处理下订单表里面的 未付款订单 如果不满足 则放弃.. 这样 对服务器的压力也不是很大.... 当然 如果你还是觉得大了 就种cooke 当用户访问的时候 第一次激活js 则埋下cooke 再次触发的时候 先通过js 读取用户端的cooke 判断时间 大于某个值的时候再请求 服务端文件 否则就放弃 ....能想到的就是这么处理了
如何使用php、html及消息队列实现订单超时自动关闭订单从php脚本方面解决的话,那就是每分钟用ajax请求一次php脚本,检查订单状态和当前时间,30分钟后检查到订单无异,测php更新订单到关闭状态,这个地方需要用到setTimeout了,循环执行请求,但是缺点是页面必能关闭,关闭了js就不执行,所以这个方法不太可取,30分钟时间太长,不可能不进行其他页面行为。
使用Mysql 定时计划任务(推荐你使用),语法体
create event myevent
on schedule at current_timestamp + interval 1 hour (周期或者时间点)
do
update myschema.mytable set mycol = mycol + 1; (执行的sql
详细使用可以参考:,很清楚
php怎么实现下单以后超过几个小时不付款,订单自动删除(是删除不是关闭或不让支付)这个问题可以用sql的定时任务实现,程序只能启动线程定时扫描,在线程中判断是否满足删除条件,满足则删除,不满足则跳过,这个和sql的定时任务原理是一样的
订单超时,活动过期解决方案:php监听redis键重复触发引发事件订单超时,活动过期解决方案:php监听redis键重复触发引发事件
Redis的2.8.0版本之后可用,键空间消息(Redis Keyspace Notifications),配合2.0.0版本之后的SUBSCRIBE 可以完成这个定时任务的操作了,定时的单位是秒。
1.我们先订阅频道称为 redisChat
2.现在,我们重新开启个redis客户端,然后在同一个频道redisChat发布消息,订阅者可以接收到消息。
接收到的消息如下:
3.Key过期事件的Redis配置
需要这里配置notify-keyspace-events的参数为“EX” .X代表了过期事件。notify-keyspace-events “Ex”保存配置后,重启Redis的服务,使配置生效。
PHP Redis实现订阅键空间通知
redis实例化类:
redis.class.php
1个
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18岁
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
//遇到类别重复的报错,所有叫Redis2
classRedis2
{
private$redis;
publicfunction__construct($host= '127.0.0.1', $port= 6379)
{
$this->redis = newRedis();
$this->redis->connect($host, $port);
}
publicfunctionsetex($key, $time, $val)
{
return$this->redis->setex($key, $time, $val);
}
publicfunctionset($key, $val)
{
return$this->redis->set($key, $val);
}
publicfunctionget($key)
{
return$this->redis->get($key);
}
publicfunctionexpire($key= null, $time= 0)
{
return$this->redis->expire($key, $time);
}
publicfunctionpsubscribe($patterns= array(), $callback)
{
$this->redis->psubscribe($patterns, $callback);
}
publicfunctionsetOption()
{
$this->redis->setOption(\Redis::OPT_READ_TIMEOUT, -1);
}
}
过期事件的订阅:
psubscribe.php
1个
2
3
4
5
6
7
8
9
10
11
12
13
14
15
require_once'./Redis.class.php';
$redis= new\Redis2();
// 解决Redis客户端订阅时候超时情况
$redis->setOption();
$redis->psubscribe(array('__keyevent@0__:expired'), 'keyCallback');
// 回调函数,这里写处理逻辑
functionkeyCallback($redis, $pattern, $chan, $msg)
{
echo"Pattern: $pattern\n";
echo"Channel: $chan\n";
echo"Payl
oad: $msg\n\n";
//keyCallback为订阅事件后的回调函数,这里写业务处理逻辑,
//比如前面提到的商品不支付自动撤单,这里就可以根据订单id,来实现自动撤单
}
设置过期事件:
index.php
1个
2
3
4
require_once'./Redis.class.php';
$redis= new\Redis2();
$order_id= 123;
$redis->setex('order_id',10,$order_id);
先用命令行模式执行 psubscribe.php
在浏览器访问 index.php
效果如下:
关于php订单失效时间的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。
查看更多关于php订单失效时间 php订单提醒功能的详细内容...