延时操作个人目前接触最多的场景是用户下单后一定时间未支付自动取消订单,传统的做法是采用定时任务定时扫描数据库超时订单或者利用客户端的请求每次请求去检测一次是否有超时订单,这些方法我始终感觉不是很好,所以一直想办法在弄一个比较理想的方法,至少比上面这两个方法好一点的处理方式

今天没事就研究了一下这个东西,主要是利用workerman的定时器。所以首先得下载workerman然后引入到自己的项目,或者composer安装也可以,具体就不再多说了。先贴出代码

use Workerman\Worker;

use \Workerman\Lib\Timer;

require_once './Workerman/Autoloader.php';

//创建一个Worker监听2345端口,使用http协议通讯

$http_worker = new Worker("

//启动4个进程对外提供服务

$http_worker->count = 4;

//检查订单是否超时

function check_order($order){

//这个方法用于检查该订单是否超时。。。。具体逻辑根据实际应用场景写,这里只记录是否进入这个方法

file_put_contents('./log.txt','订单编号:'.$order.' 处理时间:'.date('Y-m-d H:i:s')."\n",FILE_APPEND);

}

$http_worker->onMessage = function($connection, $data)

{

$msg='';

if(isset($data['get']['order'])){

$msg=json_encode($data['get']);

//10秒后执行检查订单方法,最后一个参数传递false,表示只运行一次

//这里记录请求时间用于对比延时操作的效果

file_put_contents('./log.txt','订单编号:'.$data['get']['order'].' 请求时间:'.date('Y-m-d H:i:s')."\n",FILE_APPEND);

Timer::add(10, 'check_order', array($data['get']['order']), false);

}

$connection->send('请求成功:'.$msg);

};

//运行worker

Worker::runAll();

新建一个php文件,假设命名为index.php,将上面代码复制到该文件,注意里面require_once的路径根据自己目录做调整,然后打开cmd窗口,进入到index.php所在目录,执行命令:php index.php,正常应该会看到的结果应该是这样

如果报错需要去看看workerman的文档,这时不要关闭该cmd窗口。这时我们浏览器去访问:http://127.0.0.1:2345/?order=No1

和http://127.0.0.1:2345/?order=No2,然后查看log.txt的记录

最终结果不错,达到了我预期的效果。

php 超时支付取消订单,php利用workerman的定时器实现延时操作(订单支付不成功后一定时间未支付自动取消订单)...相关推荐

  1. 秒杀情况下,用户下单扣除库存创建订单之后,迟迟不付款,时间到了自动取消订单(思路)

    秒杀情况下,用户下单扣除库存创建订单之后,迟迟不付款,时间到了自动取消订单 解决方案1. 使用redis实现 1.下单之后把生成分布式全局唯一id,把订单id放进redis中,设置一个过期时间 2.定 ...

  2. 三小时未付款自动取消订单实现

    电商系统中,有这样的需求,用户下单三小时未支付就自动取消,具体如何实现的呢? 一.实现方案 通常实现方案有以下方式: 方式一 使用定时任务不断轮询取消,此种方式实现简单,但是存在一个问题,定时任务设置 ...

  3. 支付后但是显示未支付,再次支付如果又支付成功了怎么办? 后端代码逻辑是什么?【杭州多测师_王sir】【杭州多测师】...

    什么是掉单? 所谓的掉单,就是用户下单支付,在钱包里完成了支付,结果回到电商APP一看,订单还是未支付-- 毫无疑问,用户肯定会炸,结果不是投诉,就是差评. 用户感觉受到了欺诈 那么掉单是怎么来的呢? ...

  4. delayQueue实现订单超时自动取消

    目录 说明 实现 1.编写Delayed实现类 2.编写DelayQueue业务类 3.编写订单业务逻辑 总结说明 说明 商城系统的订单模块都应该有:订单未支付超时后自动取消订单的操作.我们在开发过程 ...

  5. TP5.1 实现超时未支付订单自动关闭

    对于这个需求,我以前写过Laravel版本的.今天想在TP5.1中实现这个功能,但是网上基本没什么教程可供参考,所以写篇文章仅供大家学习. 一.前台 1.先来加载订单确认页面 当下单成功后,通过 js ...

  6. java订单到期自动取消_订单自动过期实现方案

    需求分析: 24小时内未支付的订单过期失效. 解决方案 被动设置:在查询订单的时候检查是否过期并设置过期状态. 定时调度:定时器定时查询并过期需要过期的订单. 延时队列:将未支付的订单放入一个延时队列 ...

  7. tp5.1 PHP + Redis实现自动取消订单

    PHP + Redis实现自动取消订单 业务场景 Redis 开启 keyspace notifications tp5.1 代码实现 后台运行脚本   简单定时任务解决方案:使用redis的keys ...

  8. 电商微信小程序(教你一个页面一个数据接口搞定所有分类订单页面(未支付 未发货 已发货 全部订单))

    注:解析主要都在注释里面 1.mysql建表思路 1.1最重要的是状态码,如果之前没有添加字段state,可以通过以下方式 -- 添加字段(规定只能规定为 未支付.未发货.已发货) ALTER TAB ...

  9. 微擎支付返回商户单号_一步一步教你在SpringBoot中集成微信扫码支付

    一:准备工作 使用微信支付需要先开通服务号,然后还要开通微信支付,最后还要配置一些开发参数,过程比较多. 申请服务号(企业) 开通微信支付 开发配置 具体准备工作请参考Spring Boot入门教程( ...

最新文章

  1. 再谈STM32的CAN过滤器-bxCAN的过滤器的4种工作模式以及使用方法总结
  2. 牛津临床和实验室调查手册 Oxford Handbook of Clinical and Laboratory Investigation
  3. boost::mp11::construct_from_tuple相关用法的测试程序
  4. 多普勒效应、多普勒效应、网关、路由器
  5. python3设置编码_python3 中文乱码与默认编码格式设定方法
  6. 计算机课伤害事故的防范,体育课安全伤害事故的防范与处理
  7. Spring : Spring Aop CGLIB动态代理调用过程
  8. 用数字化数据战略取代数据“收集和管理”
  9. qt 实现拖动矩形角度_Qt 绘图之图形视图框架
  10. 海马苹果助手ipad版_苹果IPA文件签名,软件掉签问题,自己也能轻松解决
  11. js中var self=this的用法解释
  12. 【React Router 6 快速上手一】重定向Navigate / useRoutes路由表 / 嵌套路由Outlet
  13. 全网最详细elasticsearch7.10.2安装手册
  14. 练习4-10 找出最小值 (20分) 本题要求编写程序,找出给定一系列整数中的最小值。
  15. html网页制作教程ppt,网页制作教程html篇.ppt
  16. java 类 函数,java常用类和函数
  17. 处理器最新排行_最新 iOS 性能排行榜,你的设备落伍了吗?
  18. 电脑重装系统以后出现 error: unknown filesystem怎么办?
  19. 【考研英语语法】介词短语
  20. 组件分享之后端组件——一个简单且高度可扩展的分布式文件系统seaweedfs

热门文章

  1. SpringBoot在东方通服务器TongWeb上显示pdf
  2. 填色涂鸦好工具,色彩艳丽又卫生,ohuhu马克笔体验
  3. Quartz-作业调度框架
  4. Tomcat部署html静态网站的五种方式
  5. 116.设计函数getSum,函数的功能是:根据以下公式计算s,计算结果作为函数值返回
  6. CSDN每日一练陶陶摘苹果 C语言
  7. json与formdata格式相互转换
  8. 【转】从头开始使用WinDbg
  9. zato oracle_Zato-基于Python的ESB和后端应用服务器
  10. html5点击梅花,梅花什么时候开?最早在2月,最晚可到5月