Как программно добавить купон на корзину

Как программно добавить купон на корзину

3958
13.04.2015

Как же программно добавить купон на всю корзину?

Вот информация из просторов сети.

Скидка правила работы с корзиной добавляется методом:

	 CSaleDiscount::Add($arFields)

Купон правила работы с корзиной добавляется методом

	 Internals\DiscountCouponTable::add($fields);

Для данных методов нужно подключать модуль sale.
Описание функции CSaleDiscount::Add доступно по ссылке .

Для метода Internals\DiscountCouponTable::add($fields); не предусмотрено описания, это не документированная функция. Её применение можно посмотреть в кода ядра в файле \bitrix\modules\sale\admin\discount_coupon_edit.php, а также в файле \bitrix\modules\sale\admin\discount_edit.php, где создается скидка-правило работы с корзиной.

Update 2017-06-21

Ниже пример кода, генерирующего купон для определенной скидки с установкой активности купона в 2 дня (привожу как есть, по коду много комментариев, думаю, все прозрачно и понятно)

require($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');

class PaiCouponGeneration{
	var $DISCOUNT_ID = 9;  // идентификатор скидки
	var $PERIOD = '2 days'; // период активности купона  если нужен будет 1 день - заменить на '1 day', 
	// в остальных случаях - просто замена цифры
	function __construct()
	{
		\Bitrix\Main\Loader::includeModule('sale');
	}

	function GetDiscountID(){
		if(intval($this->DISCOUNT_ID)<=0){
			$arDiscountFilter = array('ACTIVE'=>'Y','ID'=>$this->DISCOUNT_ID);
			// сюда можно прописать любые параметры фильтрации для поиска конктетной скидки по параметрам
			// если же нужно просто привязаться к какой-то конкретной скидке - прописываем ее идентификатор 
			// в переменную $DISCOUNT_ID
			$saleDiscountDb = \CSaleDiscount::GetList(array('DATE_CREATE' => 'DESC'),$arDiscountFilter,
				false,false,array('ID','ACTIONS','CONDITIONS'));

			$saleDiscountId = null;
			if ($saleDiscount = $saleDiscountDb->Fetch())
			{
				$saleDiscountId = $saleDiscount['ID'];
			}

			$this->DISCOUNT_ID = $saleDiscountId;
		}
	}

	function GenerateCoupon(){
		$this->GetDiscountID();
		if(intval($this->DISCOUNT_ID)>0){
			$activeFrom = new \Bitrix\Main\Type\DateTime();
			$activeTo = new \Bitrix\Main\Type\DateTime();
			$activeTo = $activeTo->add($this->PERIOD);
			$coupon = \Bitrix\Sale\Internals\DiscountCouponTable::generateCoupon(true);
			$addDb = \Bitrix\Sale\Internals\DiscountCouponTable::add(array(
				'DISCOUNT_ID' => $this->DISCOUNT_ID,
				'COUPON' => $coupon,
				'TYPE' => \Bitrix\Sale\Internals\DiscountCouponTable::TYPE_ONE_ORDER,
				'ACTIVE_FROM' => $activeFrom,
				'ACTIVE_TO' => $activeTo,
				'MAX_USE' => 1,
				'USER_ID' => 0,
				'DESCRIPTION' => ''
			));
			if ($addDb->isSuccess())
			{
				echo $coupon;
			} else {
				echo $addDb->getErrorMessages();
			}
		} else {
			echo 'Ошибка генерации купона скидки. Обратитесь к администратору сайта';
		}
	}
}

$coupon = new PaiCouponGeneration();
$coupon->GenerateCoupon();


Благодарю за внимание! Делитесь вашими замечаниями в комментариях ниже.


P.S. Обращайтесь ко мне за приобретением лицензий и продлений на 1C-Битрикс "Управление сайтом", лицензий на облачную и коробочную версии Битрикс 24 а также за приобретением и внедрением готовых решений на базе 1С-Битрикс от партнеров. За более подробной информацией свяжитесь со мной любым удобным для вас способом


Комментарии

Здравствуйте! Можете реализовать для меня описанное в статье? Подробности задачи отправлю в ответном письме.
  • Ответить
Реализовали:) Кодом реализации дополнил статью
  • Ответить

Добавить комментарий

captcha

Возврат к списку