php: auto premium üyelik yenilenmesini yaklaşım nasıl?

4 Cevap php

senaryo:

4 öğe vardır:

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

Bir aylık (30 gün) kredi kap var. Eğer ay sonuna kadar kredi kullanabilirsiniz yüzden eğer başka bir 30 günlük pass satın, ya da bir sonraki yenileme dönemine kadar beklemek gerekir.

Bir kişi bugün 30 günlük geçiş satın, satın alma tarihi DB kaydedilir. Bitiş tarihi de kaydedilir.

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

ama ne hakkında 60day ve 180day geçer için?

Biz PurchaseDate var & tarih dolmasından. Her 30gün, kredi sonraki ay için sıfırlanması gerekiyor.

Gerçekten en iyi bu sorunu yaklaşım nasıl kaybetti ediyorum.

4 Cevap

Sen kontrol ve geçerli tarih daha sonra kaydedilen sona erme tarihinden daha olup olmadığını görmek için günlük bir görev (veya cron işi) çalıştırabilir ve bu 0'a kullanıcıların kredi sıfırlamak, ve onlara bildirerek onlara bir e-posta göndermek ise kredi süresi doldu .

Kullanıcıların kredi satın alır gibi, sen sadece onların son kullanma tarihine kadar 30, 60 veya 90 gün ekleyin.

Daha fazla bilgi için, php + cronjob etiketleri bakın.

Bunu yapmak için bir yolu cron ve mysql ile

Eğer her gün bu cron'u çalıştırdığınızda

Bir değişken tanımlamak

define (DAY_AMOUNT ,30);

Sorgu tarafından gün pass kontrol

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

dönmek sonuçları tarihten itibaren 30 gün geçmesine tüm üyeler.

Sizin durumunuzda, böyle bir tablo olabilir:

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

her gün doldu herhangi geçişte kullanılmayan kredi temizleyebilirsiniz:

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 kullanarak <= şimdi () Eğer kredi sağlamak için sadece son kullanma tarihi geçtikten sonra sıfırlanır. Eğer geçerse kızardı hangi hatırlıyorum çünkü, istediğiniz sıklıkta olarak çalıştırmak ve bir gün eksik (bu sonraki kaçak tespit edilecek) bir sorun değildir yapabilirsiniz.

Bu bir ön ödemeli arama kartı işe ne kadar etkili - X için geçerlidir dakika belli bir sayıda (30/60/90 ne olursa olsun) gün ve dakika sonunda sıfırlanır.

btw, sen recurly veya chargify gibi abonelik yönetim sistemi, kullanımı kolay kullanarak tüm bu şeyler kolaylaştırabilirsiniz.

Ya da veritabanında, her kişi kendi son kullanma tarihi vardır kaydedebilirsiniz.

Son kullanma tarihi yapmak için, bir unix zaman damgası kullanmak gerekir. 30 gün size (kaç ay ile ay değiştirme) bitiş tarihini hesaplamak istiyorsanız 2592000 yani son kullanma tarihini bulmak için, aşağıdaki gibi bir şey kullanabilirsiniz olduğunu.

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

Sonra, bir veritabanına bu değerleri koydu.

Ardından, otomatik bir görevi (örneğin, cron) yaptığı bir şey yapabilirsiniz.

Bunu otomatik görev çalıştırdığınızda geçerli zaman damgası (bir süre için başka bir kelime) son kullanma tarihi daha sonra daha büyük olup olmadığını, kontrol. Eğer öyleyse, o zaman doğru kredi varsa için alanında veritabanındaki değeri değiştirin.