Вот информация из просторов сети.
Скидка правила работы с корзиной добавляется методом:
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(); 