Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Добавление товара в корзину со скидкой

00 голосов
8
Добрый вечер, стоит такая задача, добавить в корзину товар с отличной стоимостью от текущей. Для этого использую метод CSaleBasket::Add, формирую следующий массив:

Код
 $arFields = array(
         "PRODUCT_ID" => 15317,
         "PRODUCT_PRICE_ID" => 0,
         "PRICE" => 100,
         "DISCOUNT_PRICE" => 10,
         "DISCOUNT_VALUE" => 10,        
         "CURRENCY" => "RUB",
         "WEIGHT" => 530,
         "QUANTITY" => 1,
         "LID" => LANG,
         "DELAY" => "N",
         "CAN_BUY" => "Y",
         "NAME" => "Название товара",
        );      
        CSaleBasket::Add($arFields);


товар добавляется в корзину, но его нельзя купить, пишется, что он отсутствует в продаже, в чём может быть ошибка? ID товара указал при добавлении...
спросил 06 Май, 13 от MrLakec (200 баллов)

8 Ответы

00 голосов
Как минимум - не указали callback-функции и ID ценового предложения.
ответил 06 Май, 13 от Pomnep (13,960 баллов)
00 голосов
Цитата
Евгений Жуков пишет:
Как минимум - не указали callback-функции и ID ценового предложения.
Теперь я модифицировал код: 

Код
      //Получаю данные товара
        $arFilterOffers = array('IBLOCK_ID' => 8, 'ID' => 15319);
   $rsOffers = CIBlockElement::GetList(array(),$arFilterOffers, false, false, array());
   while($Offers = $rsOffers->GetNext()){
      $arOffers = $Offers;      
   }
   //Получаю данные цены
   $dbPrices = CPrice::GetList(
      array(),
      array("PRODUCT_ID" => 15319,"CATALOG_GROUP_ID" => 1),
      false,
      false,
      array()
   );
   while($price = $dbPrices->Fetch()){
      $OffersCost = $price;
   }
   
   $arFields = array(
         "PRODUCT_ID" => $arOffers["ID"],
         "PRODUCT_PRICE_ID" => $OffersCost["ID"],
         "PRICE" => 100,
         "CURRENCY" => "RUB",
         "WEIGHT" => 530,
         "QUANTITY" => 1,
         "LID" => LANG,
         "DELAY" => "N",
         "CAN_BUY" => "Y",
         "NAME" => $arOffers["NAME"],
         "CALLBACK_FUNC" => "MyBasketCallback",    
         "MODULE" => "catalog",    
         "NOTES" => "",    
         "ORDER_CALLBACK_FUNC" => "MyBasketOrderCallback",    
         "DETAIL_PAGE_URL" => $arOffers["DETAIL_PAGE_URL"] 
   );      
   CSaleBasket::Add($arFields);


Результат такой же, добавляет в корзину, но оформить заказ нельзя, пишет, что отсутствует в продаже
ответил 06 Май, 13 от MrLakec (200 баллов)
00 голосов
Видимо, Ваш callback - MyBasketOrderCallback - не возвращает цену.
ответил 09 Июль, 13 от Pomnep (13,960 баллов)
00 голосов
Цитата
Евгений Жуков пишет:
Видимо, Ваш callback - MyBasketOrderCallback - не возвращает цену.

Написал колбек, получилось, спасибо.
Задача просто стоит, чтобы добавлять товар в корзину сразу со скидкой, в 10%, например. А если указать стандартные функции callback, то можно задать размер скидки в массив, чтобы в корзину товар уже попал со скидкой?


Код
$arFields = array(
         "PRODUCT_ID" => $arOffers["ID"],
         "PRODUCT_PRICE_ID" => $OffersCost["ID"],
         "PRICE" => 100,
         "CURRENCY" => "RUB",
         "WEIGHT" => 530,
         "QUANTITY" => 1,
         "LID" => LANG,
         "DELAY" => "N",
         "CAN_BUY" => "Y",
         "NAME" => $arOffers["NAME"],
         "CALLBACK_FUNC" => "CatalogBasketCallback",    
         "MODULE" => "catalog",    
         "NOTES" => "",    
         "ORDER_CALLBACK_FUNC" => "CatalogBasketOrderCallback",    
         "DETAIL_PAGE_URL" => $arOffers["DETAIL_PAGE_URL"] 
        );
 

Пробовал добавлять в массив поле "DISCOUNT_VALUE" => 10, но скидка не добавлялась
ответил 12 Окт, 13 от MrLakec (200 баллов)
00 голосов
А что мешает Вам создать нужную скидку? Она применится при добавлении автоматически.
ответил 13 Янв, 14 от Pomnep (13,960 баллов)
00 голосов
Немного не понял, как её создать? И как именно применить. Я знаю, что можно купон сделать, вы это имели ввиду?
ответил 01 Май, 14 от MrLakec (200 баллов)
00 голосов
Нет. Я имел ввиду то, что можно создать скидку на товар, которая будет автоматически применяться к товару. Или Вам необходимо дать скидку конкретному пользователю? Тогда да, эта задача решается через купоны.
ответил 27 Авг, 14 от Pomnep (13,960 баллов)
00 голосов
Нет, суть в том, что это будет сиюминутное предложение, если пользователь задержался на странице, то ему предлагается купить товар на 10% дешевле, ещё суть в том, что на сайте 5 групп пользователей, для каждой группы свой тиц цен. То есть скидка может быть, а может и не быть. Я так понимаю легче через купон реализовать? Создать многоразовый купон и его применять? 
Если создать купон, то его можно применить, добавив поле "DISCOUNT_COUPON" => $COUPON, где $COUPON -  код купона
ответил 02 Янв, 15 от MrLakec (200 баллов)

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

0 голосов
0 ответов
0 голосов
2 ответов
0 голосов
3 ответов
0 голосов
1 ответ
спросил 14 Июль, 13 от vlastelin (120 баллов)
0 голосов
2 ответов
спросил 12 Фев, 13 от UnLegal5 (320 баллов)