php: как подойти к продлению членства в авто премиум?

Сценарий:

Есть 4 пункта:

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

ежемесячный (30-дневный) кредитный лимит. поэтому, если вы используете кредит до конца месяца, вам необходимо приобрести еще один 30-дневный пропуск или дождаться следующего периода продления.

Человек сегодня покупает 30-дневный пропуск, дата покупки записывается в БД. Дата истечения срока также записывается.

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

но как насчет 60-дневных и 180-дневных пропусков?

мы приобрели срок годности. каждые 30 дней, кредит должен быть сброшен на следующий месяц.

Я действительно потерян, как лучше всего подойти к этой проблеме.

4 ответа

Решение

Вы можете запускать задачу (или задание cron) ежедневно, чтобы проверить и узнать, является ли текущая дата более поздней, чем записанная дата истечения срока действия, и если она сброшена, пользовательский кредит равен 0, и отправить им электронное письмо, сообщающее им, что срок их кредита истек.,

Когда пользователи покупают кредит, вы просто добавляете 30, 60 или 90 дней к дате их истечения.

Для получения дополнительной информации см. Теги php + cronjob.

Один из способов сделать это с помощью Cron и MySQL

когда вы запускаете этот хрон каждый день

определить переменную

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;$expiry_date = time() + 2529000*$months;

Затем поместите эти значения в базу данных.

Затем вы можете сделать что-то, что выполняет автоматизированное задание (например, cron).

Когда вы запускаете эту автоматизированную задачу, вы проверяете, больше ли текущая временная метка (другое слово для времени), чем дата истечения. Если это так, то измените значение в базе данных в поле, если они имеют правильные кредиты.

В вашей ситуации у вас может быть такая таблица:

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 <= now(), вы гарантируете, что кредит сбрасывается только после истечения срока годности. так как вы помните, какие проходы были сброшены, вы можете запускать их так часто, как вам нравится, и пропуск дня не является проблемой (это будет обнаружено при следующем запуске).

эффективно работает предоплаченная визитная карточка - у вас есть определенное количество минут, которые действительны для X (30/60/90 независимо) дней, и минуты сбрасываются в конце.

Кстати, вы можете упростить все это, используя простую в использовании систему управления подписками, например, регулярную или платную.

Другие вопросы по тегам