2011-09-02 13 views
7

Mamy jeden produkt, płatność jest przez PayPal. Przed wyjazdem do serwisu PayPal należy złożyć zniżkę. Chcemy stworzyć system, w którym ludzie mogą wpisać kod bonu podarunkowego, aby otrzymać produkt za darmo (tj. 100% rabatu) lub wpisać jakiś kod, aby uzyskać konkretną zniżkę (np. SAVE10 - otrzymaj 10% zniżki).Tworzenie kodu rabatowego (MySQL/php)

Niektóre kody będą tylko do jednego użytku (np. Bony podarunkowe), niektóre mogą być używane wielokrotnie - np. SAVE10. Niektóre będą miały również daty wygaśnięcia.

Wykorzystanie MySQL i php do złożenia.

Czy ktoś tam już to zrobił i umieścił coś razem? lub znasz jakiś kod, którego możemy użyć, aby zaoszczędzić czas? Nie potrzebujesz całego koszyka tylko części kodu rabatowego.

Dziękuję.

+0

dlaczego tag java? –

+0

Usunięto .. Czy thining może niektórzy z Javy mają na myśli .. ale tak, zdecydowali się usunąć .. przepraszam .. – user718359

Odpowiedz

13

Jest to zasadniczo jedna klasa funkcjonalności, naprawdę. że potrzebny jest interfejs klasy, która będzie wyglądać następująco

class ProductDiscount { 
    /** 
    * Create a NEW discount code and return the instance of 
    * 
    * @param $code string  the discount code 
    * @param $discount float price adjustment in % (ex:   
    * @param $options array (optional) an array of options : 
    *       'expire' => timestamp (optional) 
    *       'limited' => int   (optional) 
    * @return ProductDiscount       
    */ 
    static public function create($code, $discount, $options = NULL); 

    /** 
    * This essentially validate the code, and return the instance of the 
    * discount if the code exists. The method returns null if the discount 
    * is not valid for any reason. If an instance is returned, to apply 
    * the discount, one should invoke the "consume()" method of the instance. 
    * 
    * @param $code string 
    * 
    * @return ProductDiscount|null 
    */ 
    static public function validate($code); 

    private $_code;  // string 
    private $_discount; // float 
    private $_expire; // unix timestamp (see time()) or null if unlimited 
    private $_count; // int or null if unlimited 

    private function __construct(); 
    public function getCode();  // return string 
    public function getDiscount(); // return float 
    public function isLimited(); // return bool; true if $_count || $_expire is not null 
    public function getCount();  // returns int; how many of this discount is left or null if unlimited 
    public function getExpireDate();// returns int (unix timestamp) or null if unlimited 

    public function consume();  // apply this discount now 

    public function consumeAll(); // invalidate this discount for future use 
} 

tabela DB mógłby wyglądać następująco

id UNSIGNED INT(10) NOT NULL AUTOINCREMENT -- (Primary Key) 
code VARCHAR(12) NOT NULL     -- (Indexed, unique) 
discount UNSIGNED INT(3) NOT NULL   -- percent value 0..100 
expire DATETIME DEFAULT NULL    -- unlimited by default 
count INT(10) DEFAULT 1      -- can be NULL 

Uwaga: Proces walidacji może być tylko proste stwierdzenie SELECT :

SELECT * 
    FROM tblproductdiscount 
WHERE code = {$code}     -- $code = mysql_real_escape_string($code) 
    AND (count IS NULL OR count > 0) 
    AND (expire IS NULL or expire > NOW()) 

Następnie użyj tej klasy podczas sprawdzania formularza kasowego. Na przykład:

if (!empty($discountCode)) { 
    $discount = ProductDiscount::validate($discountCode); 

    if ($discount !== null) { 
     $price *= (1 - $discount->getDiscount()); 
     $discount->consume(); 
    } 
} 

Cóż, w pewnym sensie to zrobię.

+0

Wygląda dobrze ... Czy wprowadziłeś to do działania w dowolnym miejscu, w którym widzę w akcji? – user718359

+0

nigdy nie dostałem umowy, aby to zrobić, nie. Ale każde inne rozwiązanie byłoby po prostu przesadą. Reszta to tylko sprawdzanie poprawności (pobierz dane z db, sprawdź wartość, itp.). –

+0

Mmm .. to wygląda wspaniale, spróbuj wprowadzić teraz. Jesteś online przez następną godzinę, więc mogę Cię informować na bieżąco? – user718359

0

„Nie trzeba całą koszyka zaledwie części Kod rabatowy ..”

Jest to bardzo szerokie pytanie bez konkretnej odpowiedzi. Osiągnięcie tego, o czym mówisz, wymaga dużej integracji, która byłaby ściśle związana z tym, nad czym pracujesz. Jeśli opublikujesz swój kod na Github lub gdzieś i masz konkretny problem, spróbuj ponownie opublikować wszelkie napotkane trudności.

Jeśli szukasz tylko kilku przykładów, sprawdź numer http://www.oscommerce.com/community/contributions,4269 i sprawdź, czy czytanie kodu źródłowego daje kilka pomysłów na wdrożenie.

+0

Dzięki, spojrzał. Ale nie chciałem korzystać z koszyka na zakupy oscommerce itp. Przesadny bit ... mam nadzieję na szybkie proste rozwiązanie .. – user718359

Powiązane problemy