2011-09-02 12 views
7

Tenemos un producto, el pago es por PayPal. Antes de ir a PayPal necesita aplicar un descuento. Queremos crear un sistema donde las personas puedan ingresar un código de certificado de regalo para obtener productos gratis (es decir, 100% de descuento) o ingresar algún código para obtener un descuento específico (es decir, SAVE10: obtener un 10% de descuento).Creación de sistema de código de descuento (MySQL/php)

Algunos códigos serán solo para un uso (es decir, certificados de regalo), algunos se pueden usar varias veces, es decir, SAVE10. Algunos también tendrán fechas de caducidad.

Voy a utilizar MySQL y php para armar.

¿Alguien ya ha hecho esto y ha armado algo juntos? o saber de algún código que podemos usar para ahorrar tiempo? No necesita todo el carro de la compra solo las partes del código de descuento.

Gracias.

+0

¿por qué la etiqueta java? –

+0

Eliminado ... ¿Tal vez algunos de los chicos de Java pensaban ... pero sí, decidieron eliminarlo ... lo siento ... – user718359

Respuesta

13

Esto es esencialmente una funcionalidad de una sola clase, realmente. Se necesitaría una interfaz de clase que se vería así

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 
} 

La tabla DB podría tener este aspecto

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 

Nota: El proceso de validación podría ser sólo un simple comunicado 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()) 

Luego solo use esta clase cuando valide el formulario de pago. Por ejemplo,

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

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

Bueno, así es como lo haría.

+0

Se ve bien ... ¿Ha puesto esto en práctica en cualquier lugar donde pueda verlo en acción? – user718359

+0

nunca recibió el contrato para hacerlo, no. Pero cualquier otra solución sería exagerada. El resto es solo una mera validación (obtenga datos de db, compruebe el valor, etc.) –

+0

Mmm ... esto se ve muy bien, trataré de implementarlo ahora ... ¿Está en línea durante la próxima hora más o menos para poder mantenerlo actualizado? – user718359

0

"No necesite todo el carrito de la compra sólo las partes de código de descuento .."

Ésta es una pregunta muy amplia que no tiene respuesta específica. Lograr lo que estás hablando requiere una gran cantidad de integración que sería específica para exactamente en lo que estás trabajando. Si publica su código en Github o en algún otro lugar y tiene un problema específico, intente volver a publicar cualquier dificultad que encuentre.

Si solo busca algunos ejemplos de esto, consulte http://www.oscommerce.com/community/contributions,4269 y vea si leer el código fuente le da algunas ideas de implementación.

+0

Gracias, eché un vistazo. Pero no quería usar el carrito de compras de oscommerce, etc. Exceso de bits ... espero una solución simple y rápida. – user718359

Cuestiones relacionadas