Создание заказа на 1С-Битрикс программно.

Здравствуй, уважаемый читатель. Допустим, у нас встала задача создать заказ без стандартного компонента битрикс. Нам нужно легкое решение, которое позволит получить заказ. Возможно, Вы используете API партнера, которое генерирует заказ на Вашем сайте или, как я, бронируете услугу(автомобиль, апартаменты или номер в отеле). Приступим!

У меня стояла задача получить бронь на апартаменты. Представим, что пользователь отфильтровал элементы на указанный им интервал дат и нашел подходящие для него апартаменты. Во-первых, я бы советовал сохранять выбор интервала интересного пользователю в cookies и сессии. Во-вторых, на странице с апартаментами мы поместим форму выбора интервала дат. Скажем:

<form action="/booking/" method="get" name="MY_BOOKING_FORM">
Заселение: <input type="date" name="FROM"/><br/>
Выезд: <input type="date" name="TO"/><br/>
<input type="submit" value="Забронировать!"/>
</form>

Создаем папку booking и в ней файл index.php. Так же создаем собственный компонент(используйте папку local для всех изменений в битриксе) по адресу /local/components/custom/booking/ в ней минимально необходимый component.php и папку templates/.default/, в ней файл template.php. Более подробно о создании компонента описано в документации битрикса, сейчас это не наша задача.

Итак, напишем компонент. Редактируем component.php. Я подскажу вам основу, а остальное вы сделаете по Вашей необходимости. Я предполагаю, что читатель уже знаком с основами битрикс.

// создаем ID пользователя для корзины
$userId = '#'; // ID пользователя
$FUSER_ID = CSaleUser::GetList(array('USER_ID' => $userId)); // получаем FUSER_ID, если покупатель для данного пользователя существует
if(!$FUSER_ID['ID']) // если покупателя нет - создаем его
{
   $FUSER_ID = CSaleUser::_Add(array("USER_ID" => $userId));
}
$FUSER_ID = $FUSER_ID['ID']; // теперь переменную $FUSER_ID можно использовать для добавления товаров в корзину пользователя с $userId.

Далее создаем заказ:

$order_id = CSaleOrder::Add(
            array(
               'LID' => SITE_ID,
               'PERSON_TYPE_ID' => 1,
               'PAYED' => "N",
               'CANCELED' => "N",
               'STATUS_ID' => "N",
               'ALLOW_DELIVERY' => 'N',
               'DATE_ALLOW_DELIVERY' => '',
               'DELIVERY_DOC_DATE' => '',
               'PRICE' => $sum, // Сумма заказа
               'CURRENCY' => "RUB",
               'USER_ID' => $userId,
               'PAY_SYSTEM_ID' => 5,
               'DELIVERY_ID' => 1,
               'USER_DESCRIPTION' => 'ЗАКАЗ от SITE.RU',
               'ADDITIONAL_INFO' => 'ЗАКАЗ от SITE.RU',
               )
            );

Добавляем товар в корзину:

$arFieldsItem = array(
    'PRODUCT_ID' => $offer,
    'PRICE' => $price,
    'CURRENCY' => 'RUB',
    'QUANTITY' => $quantity,
    'LID' => SITE_ID,
    'NAME' => $name,
    'ORDER_ID' => $order_id,
    'DETAIL_PAGE_URL' => $link,
);
CSaleBasket::Add($arFieldsItem);

Связываем товары и корзину:

CSaleBasket::OrderBasket($order_id, $FUSER_ID, SITE_ID);

Заполняем свойства заказа:

$arFieldsFROM = array(
    "ORDER_ID" => $order_id,
    "ORDER_PROPS_ID" => #,
    "NAME" => "Начало брони",
    "CODE" => "FROM",
    "VALUE" => $_REQUEST["FROM"] // Тут правильно будет поставить обработанную переменную из формы
);
CSaleOrderPropsValue::Add($arFieldsFROM);
$arFieldsTO = array(
    "ORDER_ID" => $order_id,
    "ORDER_PROPS_ID" => #,
    "NAME" => "Конец брони",
    "CODE" => "FROM",
    "VALUE" => $_REQUEST["TO"] // Тут правильно будет поставить обработанную переменную из формы
);
CSaleOrderPropsValue::Add($arFieldsTO);

В итоге мы получаем заказ.

В следующей статье рассмотрю, как выставить счет на оплату 30% от суммы заказа и забронировать объект при статусе получения оплаты.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *