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

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

5705
13.04.2015
21.06.2017

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

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

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

	 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

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