Пример оформления заказа на D7

Иногда возникает ситуация, когда для оформления заказа по каким-то причинам нельзя воспользоваться системным компонентом оформления заказа, приходится производить оформление напрямую, через api.

Для оформления заказа через 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.

В общем, как всегда, низкий поклон техподдержке:)

Количество показов: 12322
04.10.2017

Возврат к списку

Если вам была полезна статья можете отблагодарить автора:
Ethereum:

0x16Df809287333C49D3A237296C6248A6c08702Bc

Разработка сайта

Подайте заявку на разработку сайта на базе готового решения от компании 1С-Битрикс или одного из партнеров компании. Максимально подробно опишите, чему будет посвящен сайт, если это интернет-магазин - что он будет продавать, нужна ли мультиязычность, будут ли разные типы цен (розница, опт, крупный опт), будет ли интеграция с 1С, будет ли выгрузка товаров на различные торговые площадки...

Сопровождение сайта

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

Работы по сайту

Вы можете подать заявку на выполнение определенного объема работ по сайту. Опишите в заявке объем работ. Это может быть разработка какого-то нового функционала, доработки по имеющемуся функционалу, доработки под требования сео-специалистов. На основании заявки вам будет сформирован бюджет работ, а также названы сроки на выполнение тех или иных работ.