php:如何处理auto premium会员续约?

php:如何处理auto premium会员续约?,php,renewal,Php,Renewal,情景: 共有4项: 30day pass 60day pass 180day pass 365day pass 每月有30天的信用上限。因此,如果你在月底之前用完信用卡,你需要再购买一张30天的通行证,或者等到下一个续签期 一个人今天购买30天通行证,购买日期记录在DB中。还记录了有效期 if ($todaysdate >= $expirydate) //DONE. 但是60天和180天的通行证呢 我们有购买日期和有效期。每30天,信用卡需要在下个月重置一次 我真的不知道如何最好地解

情景:

共有4项:

30day pass
60day pass
180day pass
365day pass
每月有30天的信用上限。因此,如果你在月底之前用完信用卡,你需要再购买一张30天的通行证,或者等到下一个续签期

一个人今天购买30天通行证,购买日期记录在DB中。还记录了有效期

if ($todaysdate >= $expirydate) //DONE. 
但是60天和180天的通行证呢

我们有购买日期和有效期。每30天,信用卡需要在下个月重置一次


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

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

当用户购买信用卡时,您只需在其到期日后添加30天、60天或90天


有关更多信息,请参阅标记。

在您的情况下,您可以有如下表格:

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一种方法是使用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天的所有成员。

或者,在数据库中,您可以保存每个人都有自己的到期日期

要确定到期日期,应使用unix时间戳。30天是2592000,因此要找到到期日,如果您想计算到期日随月份的变化而变化的月份数,可以使用以下内容

$months=2; $到期日=时间+2529000*$个月

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

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


当运行该自动任务时,检查当前时间戳(另一个时间字)是否大于到期日期。如果是这样,请更改数据库中字段中的值,以确定他们是否拥有正确的学分。

我最后做的只是计算30天。每天运行cron,查看该用户是否已超过30天。如果是这样,重新设置他们的信用。这还需要使用最新日期更新表,因此始终计算30天。