Для оформления заказа через API сотрудниками техподдержки был предложен код, позволяющий оформить заказ.
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); global $USER; use Bitrix\Main, Bitrix\Main\Loader, Bitrix\Main\Config\Option, Bitrix\Sale, Bitrix\Sale\Order, Bitrix\Main\Application, Bitrix\Sale\DiscountCouponsManager; if (!Loader::IncludeModule('sale')) die(); $request = Application::getInstance()->getContext()->getRequest(); global $USER, $APPLICATION; $siteId = \Bitrix\Main\Context::getCurrent()->getSite(); $registeredUserID = $USER->GetID(); // или тут присваиваем идентификатор анонимного пользователя $order = Order::create($siteId, $registeredUserID); $order->setPersonTypeId(1); // ИД типа пользователя $basket = Sale\Basket::loadItemsForFUser(\CSaleBasket::GetBasketUserID(), Bitrix\Main\Context::getCurrent()->getSite())->getOrderableItems(); $order->setBasket($basket); $shipmentCollection = $order->getShipmentCollection(); $shipment = $shipmentCollection->createItem(); $shipment->setFields(array( 'DELIVERY_ID' => 1, 'DELIVERY_NAME' => 'Самовывоз', 'CURRENCY' => $order->getCurrency() )); $shipmentItemCollection = $shipment->getShipmentItemCollection(); foreach ($order->getBasket() as $item) { $shipmentItem = $shipmentItemCollection->createItem($item); $shipmentItem->setQuantity($item->getQuantity()); } $paymentCollection = $order->getPaymentCollection(); $extPayment = $paymentCollection->createItem(); $extPayment->setFields(array( 'PAY_SYSTEM_ID' => 2, 'PAY_SYSTEM_NAME' => 'Наличные', 'SUM' => $order->getPrice() )); $order->doFinalAction(true); $propertyCollection = $order->getPropertyCollection(); foreach ($propertyCollection->getGroups() as $group) { foreach ($propertyCollection->getGroupProperties($group['ID']) as $property) { $p = $property->getProperty(); if( $p["CODE"] == "CONTACT_PERSON") $property->setValue("VASYA"); } } $order->setField('CURRENCY', $currencyCode); $order->setField('COMMENTS', 'Заказ оформлен через АПИ. ' . $comment); $r = $order->save(); $orderId = $order->GetId(); if(!$r->isSuccess()){ if ($ex = $APPLICATION->GetException()) echo $aaaa = $ex->GetString(); // либо объекты ошибок с доп данными print_r($r->getErrors()); // либо только сообщения print_r($r->getErrorMessages()); // так же в заказе могут быть предупреждения, которые не являются причиной остановки процесса сохранения заказа, но мы их сохраняем в маркировки print_r($r->getWarnings()); print_r($r->getWarningMessages()); echo "Ошибка оформления"; } else { echo "Ваш заказ " . $orderId . " оформлен"; }
Вот такой код помог мне решить проблему с оформлением заказа на одном сайте с очень древним кодом - у них весь механизм оформления написан на старом API. Перевести их механизм оформления на работу компонента оказалось дольше, чем переписать само оформление на чистом API.
В общем, как всегда, низкий поклон техподдержке:)
Подайте заявку на разработку сайта на базе готового решения от компании 1С-Битрикс или одного из партнеров компании. Максимально подробно опишите, чему будет посвящен сайт, если это интернет-магазин - что он будет продавать, нужна ли мультиязычность, будут ли разные типы цен (розница, опт, крупный опт), будет ли интеграция с 1С, будет ли выгрузка товаров на различные торговые площадки...
Вы можете подать заявку на сопровождение вашего сайта на базе 1С-Битрикс. Сопровождение включает в себя: проверка актуальности обновлений сайта, проверка актуальности резервной копии, консультации по сайту. Опишите в заявке, какие еще объемы планируются на сопровождении и на какой срок вы планируете заключить договор на сопровождение - мы подберем подходящий вам бюджет на сопровождение
Вы можете подать заявку на выполнение определенного объема работ по сайту. Опишите в заявке объем работ. Это может быть разработка какого-то нового функционала, доработки по имеющемуся функционалу, доработки под требования сео-специалистов. На основании заявки вам будет сформирован бюджет работ, а также названы сроки на выполнение тех или иных работ.