php: как подойти к продлению членства в авто премиум? - PullRequest
3 голосов
/ 10 января 2010

сценарий:

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

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

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

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

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

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

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

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

Ответы [ 4 ]

1 голос
/ 10 января 2010

один из способов сделать это с помощью 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 дней с даты.

0 голосов
/ 10 января 2010

Или, в базе данных, вы можете сохранить каждый человек имеет свою собственную дату истечения срока действия.

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

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

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

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

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

0 голосов
/ 10 января 2010

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

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

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

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

0 голосов
/ 10 января 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...