2011-09-02 32 views
7

Chúng tôi có một sản phẩm, thanh toán bằng PayPal. Trước khi đi đến PayPal cần phải áp dụng giảm giá. Chúng tôi muốn tạo một hệ thống nơi mọi người có thể nhập mã chứng nhận quà tặng để nhận sản phẩm miễn phí (tức là giảm giá 100%) hoặc nhập một số mã để được giảm giá cụ thể (tức là SAVE10 - được giảm giá 10%).Tạo Hệ thống Mã Giảm giá (MySQL/php)

Một số mã sẽ chỉ dành cho một lần sử dụng (ví dụ: phiếu quà tặng), một số có thể được sử dụng nhiều lần - tức là SAVE10. Một số cũng sẽ có ngày hết hạn.

Sẽ sử dụng MySQL và php để kết hợp với nhau.

Có ai ngoài đó đã làm điều này và sắp xếp thứ gì đó với nhau không? hoặc biết một số mã chúng ta có thể sử dụng để tiết kiệm thời gian? Không cần toàn bộ giỏ hàng chỉ là các bộ phận mã giảm giá ..

Cảm ơn bạn.

+0

lý do tại sao thẻ java? –

+0

Đã bị xóa .. Có phải việc ăn trộm có thể là một số người Java có suy nghĩ .. nhưng có, đã quyết định xóa .. xin lỗi .. – user718359

Trả lời

13

Đây thực chất là một chức năng một lớp. Bạn sẽ cần một giao diện lớp đó sẽ trông như thế này

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 
} 

Bảng DB có thể trông như thế này

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 

Lưu ý: Quá trình xác nhận chỉ có thể là một tuyên bố đơn giản 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()) 

Sau đó, chỉ cần sử dụng lớp này khi xác thực biểu mẫu thanh toán. Ví dụ:

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

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

Vâng, đó là cách tôi sẽ làm.

+0

Có vẻ tốt .. Bạn đã đặt điều này vào bất cứ nơi nào tôi có thể thấy trong hành động? – user718359

+0

chưa bao giờ có hợp đồng để làm như vậy, không. Nhưng bất kỳ giải pháp khác sẽ chỉ là quá mức cần thiết. Phần còn lại chỉ là xác nhận hợp lệ (lấy dữ liệu từ db, giá trị kiểm tra, v.v.) –

+0

Mmm .. điều này có vẻ tuyệt vời sẽ cố gắng triển khai ngay bây giờ .. Bạn trực tuyến trong vài giờ tới để tôi có thể cập nhật cho bạn? – user718359

0

"Đừng cần toàn bộ giỏ hàng chỉ những phần mã giảm giá .."

Đây là một câu hỏi thực sự rộng không có câu trả lời cụ thể. Hoàn thành những gì bạn đang nói về đòi hỏi rất nhiều tích hợp mà sẽ được cụ thể cho chính xác những gì bạn đang làm việc trên. Nếu bạn xuất bản mã của mình lên Github hoặc ở đâu đó và đang gặp sự cố cụ thể, hãy thử đăng lại mọi sự cố mà bạn gặp phải.

Nếu bạn chỉ đang tìm kiếm một số ví dụ về việc này, hãy xem http://www.oscommerce.com/community/contributions,4269 và xem việc đọc mã nguồn có cung cấp cho bạn một số ý tưởng triển khai hay không.

+0

Cảm ơn bạn đã xem. Nhưng không muốn sử dụng giỏ hàng osCommerce vv .. Bit overkill .. hy vọng cho một giải pháp đơn giản nhanh chóng .. – user718359

Các vấn đề liên quan