@IliaMal

Почему при оформлении заказа в 1 клик не передается цена (API)?

Здравствуйте.

Если оформить "Быстрый заказ" текущего пользователя, получив корзину так:
$basket = Sale\Basket::loadItemsForFUser(Sale\Fuser::getId(), Bitrix\Main\Context::getCurrent()->getSite());

то все корректно: 60bc7bb9e1e0a931464643.png
Если я хочу купить один товар передав его ID, вот так:
$ID = 	520747;
$price = CPrice::GetBasePrice($ID)['PRICE'];
$products = array(
    array(
        'PRODUCT_ID' => $ID,
        'NAME' => "Бс-100/24",
        'PRICE' => $price,
        'CURRENCY' => 'RUB',
        'QUANTITY' => 1
    )
);
$basket = Bitrix\Sale\Basket::create(SITE_ID);
foreach ($products as $product)
{
    $item = $basket->createItem("dress_catalog", $product["PRODUCT_ID"]);
    unset($product["PRODUCT_ID"]);
    $item->setFields($product);
}

то заказ создается, но нужный товар не прикрепляется.
60bc7d781ade7979279538.png

Во всех статься дублируется этот вариант, другого способа добавить товар к заказу я не нашел.
Вот весь код.

Где ошибка?
Может есть другой способ оформить заказ?
  • Вопрос задан
  • 151 просмотр
Решения вопроса 1
@Ex1st
Попробуйте мой код:
$basket = \Bitrix\Sale\Basket::create('s3');
$basket = $basket->getOrderableItems();

foreach ($basket as $item) {
    $item->getItemById($id)->delete();
}

$item = $basket->createItem("catalog", $id);
$item->setFields(array(
    'PRODUCT_ID' => $id,
    'CURRENCY' => 'RUB',
    'QUANTITY' => $quantity,
    'LID' => SITE_ID,
    'PRODUCT_PROVIDER_CLASS' => '\CCatalogProductProvider'
));

// order
$order = \Bitrix\Sale\Order::create(SITE_ID, $USER->isAuthorized() ? $USER->GetID() : $ID);
$order->setPersonTypeId(5);
$order->setBasket($basket);

//shippment collection
$shipColl = $order->getShipmentCollection();
$shipp = $shipColl->createItem(\Bitrix\Sale\Delivery\Services\Manager::getObjectById(1));

$shipColl = $shipp->getShipmentItemCollection();

foreach ($basket as $basketItem) {
    $item = $shipColl->createItem($basketItem);
    $item->setQuantity($basketItem->getQuantity());
}

//props
$propsColl = $order->getPropertyCollection();

$order->setField('COMMENTS', 'Это быстрый заказ. Нужно перезвонить клиенту.');

$phoneProp = $propsColl->getPhone();
$phoneProp->setValue($phone);

$nameProp = $propsColl->getProfileName();
$nameProp->setValue($name);

$emailProp = $propsColl->getUserEmail();
$emailProp->setValue($email);

// pay
$payColl = $order->getPaymentCollection();
$payment = $payColl->createItem(\Bitrix\Sale\PaySystem\Manager::getObjectById(13));

$payment->setField("SUM", $order->getPrice());
$payment->setField("CURRENCY", $order->getCurrency());

//save
$order->save();
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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