Создание системы скидочных кодов (MySQL / php)

У нас есть один продукт, оплата осуществляется через PayPal. Прежде чем перейти к PayPal, необходимо применить скидку. Мы хотим создать систему, в которой люди могут ввести код подарочного сертификата, чтобы получить бесплатный продукт (то есть 100% скидку) или ввести код для получения конкретной скидки (т.е. SAVE10 – получить скидку 10%).

Некоторые коды будут использоваться только для одного использования (например, подарочные сертификаты), некоторые могут использоваться несколько раз – т.е. SAVE10. У некоторых также будут даты истечения срока действия.

Переход к использованию MySQL и php для объединения.

Кто-нибудь там уже сделал это и поставил что-то вместе? или знаете какой-нибудь код, который мы можем использовать, чтобы сэкономить время? Не нужно всю корзину покупок только части кода скидки.

Спасибо.

Это, по сути, функциональность одного класса. Вам понадобится интерфейс класса, который будет выглядеть так:

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 } 

Таблица БД может выглядеть так:

 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 

Примечание. Процесс проверки может быть простым выражением 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()) 

Затем просто используйте этот класс при проверке формы выписки. Например,

 if (!empty($discountCode)) { $discount = ProductDiscount::validate($discountCode); if ($discount !== null) { $price *= (1 - $discount->getDiscount()); $discount->consume(); } } Получите if (!empty($discountCode)) { $discount = ProductDiscount::validate($discountCode); if ($discount !== null) { $price *= (1 - $discount->getDiscount()); $discount->consume(); } } 

Ну, это как-то, как я это сделаю.

«Не нужно всю корзину покупок только частей кода скидки».

Это очень широкий вопрос без конкретного ответа. Выполнение того, о чем вы говорите, требует большой интеграции, которая была бы конкретной для того, над чем вы работаете. Если вы публикуете свой код в Github или где-то и имеете определенную проблему, попробуйте повторно отправить любые трудности, с которыми вы столкнулись.

Если вы просто ищете некоторые примеры этого, посмотрите http://www.oscommerce.com/community/contributions,4269 и посмотрите, читаете ли вы исходный код некоторые идеи реализации.