首先本地安装node环境
由于小编是搞后台开发的,前段框架略知一二,此处就不班门弄斧了,网上很多教程
http://nodejs.cn/
win和linux找才对应包
安装完成之后创建node一个框架express,创建一个工程
地址 127.0.0.1:3000
此处demo 为 LateSend
然后再创建文件
LateSend/routes/latefire.js
倒计时取消订单逻辑代码:
var express = require('express'); var router = express.Router(); var request = require('request'); var moment = require('moment'); router.get('/', function(req, res) { var taskname = req.query.taskname; var objectid = req.query.objectid; var time = req.query.time; var start = Date.now(); var returnUrl = req.query.returnUrl; console.log('当前时间:' + moment(start).format('YYYY-MM-DD HH:mm:ss')+"---taskname="+taskname+"----objectid="+objectid+"----time="+time); var oneID = setTimeout(function () { console.log(Date.now() - start + '毫秒后,'+ moment(start).format('YYYY-MM-DD HH:mm:ss')+'触发动作!被修改订单id:'+objectid+'\r\n'); request.post(returnUrl+taskname).form({order_id:objectid,time:time}); clearTimeout(oneID); }, time*60*1000); res.send("服务器将在"+time+"分 后触发"+taskname+"操作"); }); module.exports = router;
实现逻辑:
1.后台服务器,创建订单的地方,调用127.0.0.1:3000,请求倒计时功能
$url='http://127.0.0.1:3000/latefire?taskname=cancelOrderLateCancel&objectid='.$order_id.'&time=30&returnUrl=127.0.0.1:80/home/order/lateCancelOrder';
此处把express项目用到的信息,作为参数传递过来,回调地址,任务名称,订单ID,倒计时时间
2.node服务启动并持续运行,使用npm 安装插件forever,可一直运行该服务,否则,node退出窗口,服务停止
3.node服务运行,设置time=30之后,自动回调项目取消订单的功能逻辑
地址为127.0.0.1:80/home/order/lateCancelOrder
lateCancelOrder这个方法中,实现取消订单的基本逻辑
另外订单倒计时还有一更搓的方法,小编之前自己用的,也分享下吧
在订单下成功页面,js定时器,倒计时30分钟,发送取消请求的命令,缺点,用户会关掉浏览器,定时器,不能运行
这时候,做了各种补救错误,比如请求付款的接口处,先判断时间是否到时间,倒计时30分钟,到了,直接返回订单已过期
辅助linux crontab定时任务,每天晚上12点检查所有漏网之鱼,所有为取消的订单,系统取消掉