【问题标题】:php: how to approach auto premium membership renewal?php:如何处理自动高级会员续订?
【发布时间】:2010-01-10 06:40:11
【问题描述】:

场景:

有4个项目:

30day pass
60day pass
180day pass
365day pass

有一个每月(30 天)的信用上限。因此,如果您在月底前用完积分,则需要再购买 30 天通行证,或者等到下一个续订期。

一个人今天购买了 30 天的通行证,购买日期记录到 DB。还会记录到期日期。

if ($todaysdate >= $expirydate) //DONE. 

但是 60 天和 180 天的通行证呢?

我们已购买日期和到期日期。每 30 天,需要为下个月重置信用额度。

我真的不知道如何最好地解决这个问题。

【问题讨论】:

    标签: php renewal


    【解决方案1】:

    一种方法是使用 cron 和 mysql

    当你每天运行这个 cron 时

    定义一个变量

    define (DAY_AMOUNT ,30);
    

    通过查询查看当日通行证

    SELECT mem_id  DATEDIFF(CURDATE(),mem_date) AS daypass FROM table
     WHERE ((DATEDIFF(CURDATE(),mem_date))=".DAY_AMOUNT."
    

    返回的结果是自该日期起超过 30 天的所有成员。

    【讨论】:

      【解决方案2】:

      您可以每天运行一项任务(或 cron 作业)来检查当前日期是否晚于记录的到期日期,以及是否将用户信用重置为 0,并向他们发送一封电子邮件,让他们知道他们的信用已过期。

      当用户购买信用时,您只需将其到期日期增加 30、60 或 90 天。

      有关详细信息,请参阅php + cronjob 标签。

      【讨论】:

      • 我最终做的只是计算 30 天。每天运行 cron 以查看该用户是否已超过 30 天。如果是这样,请重置他们的信用。这还需要使用最新日期更新表格,因此始终计算 30 天。
      【解决方案3】:

      在你的情况下,你可以有一个这样的表:

      pass: (id, user_id, start_time, end_time, credit)
      

      您可以每天刷新任何已过期的通行证上未使用的积分:

      update user join
        (select user_id, sum(credit) as credit from pass
          group by user_id where end_time <= now() and not flushed) b
        set user.credit = max(user.credit - b.credit, 0)
        where user.user_id = b.user_id
      
      update pass set flushed = 1 where end_time <= now() and not flushed
      

      通过使用 end_time

      这实际上是预付费电话卡的工作方式 - 您有一定的分钟数,有效期为 X(30/60/90 天),最后会重置分钟数。

      顺便说一句,您可以使用易于使用的订阅管理系统(如 recurlychargify)来简化所有这些工作。

      【讨论】:

        【解决方案4】:

        或者,在数据库中,你可以保存每个人都有自己的有效期。

        要确定到期日期,您应该使用 unix 时间戳。 30 天是 2592000,因此要找到到期日期,如果要计算到期日期,可以使用以下内容(以多少个月更改月份)。

        $months = 2; $expiry_date = time() + 2529000*$months;

        然后,将这些值放入数据库。

        然后,您可以执行一些自动化任务(例如,cron)。

        当您运行该自动化任务时,您会检查当前时间戳(时间的另一个词)是否大于到期日期。如果是这样,则在字段中更改数据库中的值,以确定他们是否具有正确的信用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-05-19
          • 2018-08-28
          • 2017-06-16
          • 2021-06-21
          • 1970-01-01
          • 2015-06-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多