Задать вопрос

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

Есть пример оформления заказа по API на сайте Битрикса

Я применяю его, подставляя свои данные, все записывается кроме цены, она идет 0.
$order->getPrice() не находит нужную цену. Из формы когда вставляю $request['ELEMENT_PRICE'] тоже не пишет, (в комменты пишет, а в заказ нет). В консоли ошибок нет. В админке тоже по 0 все

<? require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");

use Bitrix\Main\Application;

$application = Application::getInstance();
$context = $application->getContext();
global $APPLICATION;
global $USER;

$request = \Bitrix\Main\HttpApplication::getInstance()->getContext()->getRequest();

\Bitrix\Main\Web\Json::encode($request);

if ($request->isPost() && isset($request['ELEMENT_ID']) && isset($request['PHONE']) && isset($request['EMAIL']) && isset($request['ELEMENT_PRICE'])) {


    Bitrix\Main\Loader::includeModule('sale');
    Bitrix\Main\Loader::includeModule('catalog');

    /*$products = array(
        array('PRODUCT_ID' => $request['ELEMENT_ID'], 'NAME' => $request['ELEMENT_NAME'], 'PRICE' => $request['ELEMENT_PRICE'], 'CURRENCY' => 'RUB', 'QUANTITY' => 1)
    );*/

    $products = array(
        array('PRODUCT_ID' => 699, 'NAME' => 'Товар 1', 'PRICE' => 800, 'CURRENCY' => 'RUB', 'QUANTITY' => 5)
    );

    $basket = Bitrix\Sale\Basket::create(SITE_ID);

    foreach ($products as $product) {
        $item = $basket->createItem("catalog", $product["PRODUCT_ID"]);
        unset($product["PRODUCT_ID"]);
        $item->setFields($product);
    }

    $order = Bitrix\Sale\Order::create(SITE_ID, 1);
    $order->setPersonTypeId(1);
    $order->setBasket($basket);

    $shipmentCollection = $order->getShipmentCollection();
    $shipment = $shipmentCollection->createItem(
        Bitrix\Sale\Delivery\Services\Manager::getObjectById(1)
    );

    $shipmentItemCollection = $shipment->getShipmentItemCollection();

    /** @var Sale\BasketItem $basketItem */

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

    $paymentCollection = $order->getPaymentCollection();
    $payment = $paymentCollection->createItem(
        Bitrix\Sale\PaySystem\Manager::getObjectById(2)
    );
    $payment->setField("SUM", $order->getPrice());
    $payment->setField("CURRENCY", $order->getCurrency());

    $order->doFinalAction(true);

    // Устанавливаем свойства
    $propertyCollection = $order->getPropertyCollection();
    foreach ($propertyCollection->getGroups() as $group) {
        foreach ($propertyCollection->getGroupProperties($group['ID']) as $property) {

            $p = $property->getProperty();
            if ($p["CODE"] == "EMAIL") {
                $property->setValue($request['EMAIL']);
            }
            if ($p["CODE"] == "PHONE") {
                $property->setValue($request['PHONE']);
            }
            if ($p["CODE"] == "NAME") {
                $property->setValue($request['NAME']);
            }

        }
    }

    $order->setField('COMMENTS', $request['ELEMENT_PRICE'] . " get price =" . $order->getPrice());

    $result = $order->save();
    if (!$result->isSuccess()) {
        echo $result->getErrors();
    } else {
        \Bitrix\Main\Web\Json::encode("ok");
    }
} else {
    echo "ERROR <br>";
    echo "ELEMENT_ID " . $request['ELEMENT_ID'] . " НАзвание " . $request['ELEMENT_NAME'] . " PHONE " . $request['PHONE'] . " EMAIL " . $request['EMAIL'] . " ELEMENT_PRICE " . $request['ELEMENT_PRICE'];
} ?>
  • Вопрос задан
  • 409 просмотров
Подписаться 1 Средний 3 комментария
Решения вопроса 1
kirk_novozhilov
@kirk_novozhilov
Lead Bitrix Developer, Bitrix mentor
Итого,
Если нужна кастомная цена товара:
массив товара должен выглядеть как
array(
    'PRODUCT_ID' => 699, 
    'NAME' => 'Товар 1', 
    'PRICE' => 800, 
    'CURRENCY' => 'RUB', 
    'QUANTITY' => 5
    'CUSTOM_PRICE' => 'Y'
)

если нужно тянуть из каталога:
array(
    'PRODUCT_ID' => 699, 
    'NAME' => 'Товар 1', 
    'CURRENCY' => 'RUB', 
    'QUANTITY' => 5,
    'PRODUCT_PROVIDER_CLASS' => '\CCatalogProductProvider'
)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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