検索

ホームページ  >  に質問  >  本文

ecshop - php 如何实现订单限时支付

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

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

试问该如何实现呢?

黄舟黄舟2896日前1156

全員に返信(14)返信します

  • 伊谢尔伦

    伊谢尔伦2017-04-10 15:32:29

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

    返事
    0
  • PHPz

    PHPz2017-04-10 15:32:29

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

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

    直接用计划任务呗。

    返事
    0
  • 怪我咯

    怪我咯2017-04-10 15:32:29

    比较粗暴:

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

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

    优雅:

    redis,memcache都可以解决

    返事
    0
  • ringa_lee

    ringa_lee2017-04-10 15:32:29

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

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 15:32:29

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

    返事
    0
  • 巴扎黑

    巴扎黑2017-04-10 15:32:29

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

    返事
    0
  • 黄舟

    黄舟2017-04-10 15:32:29

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

    返事
    0
  • 高洛峰

    高洛峰2017-04-10 15:32:29

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

    返事
    0
  • 高洛峰

    高洛峰2017-04-10 15:32:29

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

    返事
    0
  • 大家讲道理

    大家讲道理2017-04-10 15:32:29

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

    返事
    0
  • キャンセル返事