Creating Discount Code System (MySQL/php)

前端 未结 2 523
情深已故
情深已故 2020-12-08 06:07

We have one product, payment is by PayPal. Before going to PayPal need to apply a discount. We want to create a system where people can enter a gift certificate code to get

相关标签:
2条回答
  • 2020-12-08 06:21

    "Do not need entire shopping cart just the discount code parts.."

    This is a really broad question with no specific answer. Accomplishing what you're talking about requires a lot of integration that would be specific to exactly what you're working on. If you publish your code to Github or somewhere and are having a specific problem, try re-posting any difficulties you run into.

    If you're just looking for some examples of this being done, check out http://www.oscommerce.com/community/contributions,4269 and see if reading the source code gives you some implementation ideas.

    0 讨论(0)
  • 2020-12-08 06:24

    This is essentially a one class functionality, really. You'd need a class interface that would look like this

     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
    }
    

    The DB table could look like this

    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
    

    Note : The validation process could just be a simple SELECT statement :

    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())
    

    Then just use this class when validating checkout form. For example,

    if (!empty($discountCode)) {
       $discount = ProductDiscount::validate($discountCode);
    
       if ($discount !== null) {
          $price *= (1 - $discount->getDiscount());
          $discount->consume();
       }
    }
    

    Well, that's somewhat how I would do it.

    0 讨论(0)
提交回复
热议问题