@BarneyGumble

Как в Битриксе программно создать купон на товары?

Делаю следующее:

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
use Bitrix\Sale\Internals;
 
CModule::IncludeModule("catalog");
CModule::IncludeModule("iblock");
CModule::IncludeModule("sale");
 
global $APPLICATION;
 
// Первым делом, создадим правило со скидкой для купона
 
// размер скридки в %
$discountValue = 10; 
 
$arActions["CLASS_ID"] = "CondGroup";
$arActions["DATA"]["All"] = "AND";
$arActions["CLASS_ID"] = "CondGroup";
$arActions["CHILDREN"][0]["CLASS_ID"] = "ActSaleBsktGrp";
$arActions["CHILDREN"][0]["DATA"]["Type"] = "Discount";
$arActions["CHILDREN"][0]["DATA"]["Value"] = $discountValue;
$arActions["CHILDREN"][0]["DATA"]["Unit"] = "Perc";
$arActions["CHILDREN"][0]["DATA"]["All"] = "OR";
 
// получаем список товаров из определённых разделов, по SECTION_ID
$DbParentEl = CIBlockElement::GetList(
	array(),
	array(
		"IBLOCK_ID" => array(17),
		"SECTION_ID" => array(787)
	),
	false,
	false,
	array("ID")
);

$i=0;
while($arElem = $DbParentEl->Fetch()){
 
    // формируем массив для создания скидок на товары
    $arActions["CHILDREN"][0]["CHILDREN"][$i]["CLASS_ID"] = "CondIBElement"; 
    $arActions["CHILDREN"][0]["CHILDREN"][$i]["DATA"]["logic"] = "Equal";
    $arActions["CHILDREN"][0]["CHILDREN"][$i]["DATA"]["value"] = $arElem["ID"];
    $i++;
 
}
 
$arConditions["CLASS_ID"] = "CondGroup";
$arConditions["DATA"]["All"] = "AND";
$arConditions["DATA"]["True"] = "True";
$arConditions["CHILDREN"] = "";
 
// начало активности скидки
$unixStart = strtotime(date("d.m.Y H:i:s"));
 
// окончание активности скидки
$unixEnd = $unixStart + 43200; // интервал 12 часов
 
// Формируем массив для добавления правила
$arFields = array(
        "LID" => "s1",
        "NAME" => $discountValue."% Скидки ".date("d.m.y"), // название скидки
        "CURRENCY" => "RUB", // валюта
        "ACTIVE" => "Y", // активность
        "USER_GROUPS" => array(1), // группа пользователей
        "ACTIVE_FROM" => ConvertTimeStamp($unixStart, "FULL"),
        "ACTIVE_TO" => ConvertTimeStamp($unixEnd, "FULL"),
        "CONDITIONS" => $arConditions,
        'ACTIONS' => $arActions
    );
 
// добавление нового правило скидок
$discountID = CSaleDiscount::Add($arFields);
if ($discountID > 0) {
 
    // генерируем новый код купона
    $codeCoupon = CatalogGenerateCoupon();
 
    $couponFields = array(
                    "DISCOUNT_ID" => $discountID, // ID правила скидок
                    "COUPON" => $codeCoupon,
                    "ACTIVE" => "Y",
                    "TYPE" => 2,
                    "MAX_USE" => 0
                );
 
    // добавляем новый купон
    $addCouponRes = Internals\DiscountCouponTable::add($couponFields);
    if (!$addCouponRes->isSuccess()){
         
        $err = $addCouponRes->getErrorMessages();
        print_r($err);
         
    } else {
        echo 'Новый купон успешно создан! Номер купона: '.$codeCoupon;
    }
 
} else {
    $ex = $APPLICATION->GetException();  
    echo 'Ошибка при создании нового правила скидок: '.$ex->GetString();
}


В результате получаю на странице ошибку:
Ошибка при создании нового правила скидок: Действия, заданные для правила, некорректны. Правило не может быть сохранено.

Что делаю не так?
  • Вопрос задан
  • 554 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы