Начиная с 16 версии используется новая версия ядра магазина Битрикс, являющаяся частью ядра Битрикс D7. Многое описанное здесь может работать и в переходной версии 15.5. Все классы для работы с магазином собраны в модуле sale, поэтому для работы примером используем use для пространства модуля интернет-магазина.

Заказ (SaleOrder)

Заказ представляет собой объект класса BitrixSaleOrder. Нужно запомнить, что пока не вызван метод save() этот объект необязательно связан с сохранённым заказом. Также пока вы не вызовете save(), изменения в заказе не будут сохранены в базе данных.

Существующий заказ можно получить следующим образом:

Поля заказа можно получить короткими вызовами:

Также любое поле по имени можно получить так:

Список доступных полей можно получить, вызвав $order->getAvailableFields().

Заказ имеет связь один-ко-многим с несколькими объектами в виде коллекций — коллекция товаров в корзине (SaleBasket), коллекция отгрузок (SaleShipmentCollection), коллекция оплат (SalePaymentCollection) и коллекция свойств заказа (SalePropertyValueCollection).

Самый простой способ получить список способов доставки и оплаты — короткие вызовы:

Чтобы получить список примененных к заказу скидок, нужно вызвать:

В массиве $discountData[‘DISCOUNT_LIST’] содержится список скидок, в $discountData[‘COUPON_LIST’] содержится список купонов. Т.к. скидки можно отключать в админке, следует проверять поле APPLY: если Y — скидка/купон применёны, если N — были отключены менеджером.

Корзина заказа (SaleBasket)

Про работу с корзиной была отдельная статья, привязать и получить корзину заказа можно так:

Свойства заказа (SalePropertyValueCollection)

Свойства заказа — объекты BitrixSalePropertyValue — собраны в коллекции propertyCollection

Получить значения всех свойств и группы свойств можно так:

У многих свойств заказа есть определенное встроенное назначение (атрибуты IS_EMAIL, IS_PAYER, IS_LOCATION, IS_LOCATION4TAX, IS_PROFILE_NAME, IS_ZIP, IS_PHONE, IS_ADDRESS). Такие свойства можно получить следующими методами:

Получить значение свойства по ID:

В любом случае получаем значение свойства — экземпляр класса BitrixSalePropertyValue. Из него мы можем получить значение свойства:

И информацию о самом свойстве:

Чтобы изменить значение свойства следует вызвать метод setValue и сохранить сущность

Оплаты заказа (SalePaymentCollection)

Из коллекции оплат также можно получить информацию об оплате, что и из объекта заказа. Оплата с внутреннего счета также считается одной из оплат:

Коллекция содержит объекты оплаты SalePayment с информацией об оплатах:

Оплатить или вернуть оплату можно методами setPaid(), setReturn():

Инициировать оплату (вывести шаблон оплаты: форму, кнопку и т.п.) можно следующим образом:

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

Для примера приведу простейший код оформления заказа с комментариями

BitrixSaleOrder — класс для работы с заказами. Он расширяет базовый класс, добавляя работу с оплатами, отгрузками и источниками заказа.

Цепочка наследования

Методы класса

$id .

—>

МетодОписаниеС версии
addPrintedCheckПривязывает к объекту заказа чек.17.0.1
getDeliveryIdListВозвращает список ID служб доставок, которые используются в заказе.18.0.0
getPaySystemIdListВозвращает список ID платежных систем, которые используются в заказе.18.0.0
getPaymentCollectionВозвращает коллекцию оплат, привязанных к заказу.15.5.0
getPrintedChecksВозвращает список чеков (массив объектов класса BitrixSaleCashboxCheck ), которые были созданы для заказа.17.0.1
getShipmentCollectionВозвращает коллекцию отгрузок, привязанных к заказу.15.5.0
getTradeBindingCollectionВозвращает коллекцию различным источникам, которые привязаны к заказу.18.5.0
loadPaymentCollectionВозвращает коллекцию оплат, привязанных к заказу, из базы данных.15.5.0
loadShipmentCollectionЗагружает коллекцию отгрузок, привязанных к заказу, из базы данных.15.5.0
15.5.0
[link=BitrixSaleOrder::getLockedStatus]getLockedStatus[/link]Метод возвращает объект BitrixSaleResult с данными кто заблокировал заказ, статус блокировки и дату.15.5.0
[link=BitrixSaleOrder::getTax]getTax[/link]Метод возвращает сущность класса BitrixSaleTax.15.5.0
[link=BitrixSaleOrder::isLocked]isLocked[/link]Метод возвращает true, если заказ заблокирован. В противном случае, возвращает false.15.5.0
[link=BitrixSaleOrder::lock]lock[/link]Метод выполняет блокировку заказа с кодом $id .15.5.0
[link=BitrixSaleOrder::onBasketModify]onBasketModify[/link]Метод информирует заказ о том, что корзина изменилась, а также о конкретных измененных данных.15.5.0
[link=BitrixSaleOrder::onPaymentCollectionModify]onPaymentCollectionModify[/link]Метод информирует заказ о том, что произошли изменения в коллекции оплат, а также о конкретных измененных данных.15.5.0
[link=BitrixSaleOrder::onPaymentCollectionModify]onPropertyValueCollectionModify[/link]Метод информирует заказ о том, что произошли изменения в коллекции значений свойств, а также о конкретных измененных данных.15.5.0
[link=BitrixSaleOrder::onShipmentCollectionModify]onShipmentCollectionModify[/link]Метод информирует заказ о том, что произошли изменения в коллекции отгрузок, а также о конкретных измененных данных.15.5.0
[link=BitrixSaleOrder::refreshData]refreshData[/link]Метод выполняет обновление данных заказа.15.5.0
[link=BitrixSaleOrder::setAccountNumber]setAccountNumber[/link]Метод запускает процесс генерации номера заказа на основе идентификатора этого заказа.15.5.0
[link=BitrixSaleOrder::setBasket]setBasket[/link]Метод прикрепляет корзину к заказу.15.5.0
[link=BitrixSaleOrder::unlock]unlock[/link]Метод снимает блокировку с заказа с кодом $id .15.5.0
[link=6852129]save[/link]Метод сохраняет данные заказа и сущности относящиеся к нему.15.5.0

Методы родительского класса BitrixSaleOrderBase

МетодОписаниеС версии
appendBasketПрикрепляет корзину к новому заказу.17.5.0
applyDiscountПрименяет рассчитанные скидки к заказу.18.0.0
createСоздает объект заказа.15.5.0
deleteУдаляет заказ, предварительно отменяя заказ.18.0.0
deleteNoDemandУдаляет заказ напрямую из базы.18.0.0
doFinalActionВыполняет расчет скидок, налогов и применяет их к заказу.18.0.0
getAvailableFieldsВозвращает массив полей, которые могут быть установлены через методы setField() и setFields() .15.5.5
getBasketВозвращает объект корзины, прикрепленной к заказу.15.5.0
getCurrencyВозвращает валюту заказа.15.5.0
getDateInsertВозвращает дату создания заказа.15.5.0
getDeliveryLocationВозвращает стоимость доставок для всех заказов.15.5.0
getDeliveryPriceВозвращает стоимость доставок для всех заказов.15.5.0
getDiscountВозвращает объект класса BitrixSaleDiscountBase .18.0.0
getDiscountPriceВозвращает величину скидки/наценки на заказ.15.5.0
getHashВозвращает хеш заказа.18.0.0
getIdВозвращает ID заказа.15.5.0
getPersonTypeIdВозвращает ID типа плательщика заказа, к которому привязан заказ.15.5.0
getPriceВозвращает стоимость заказа с учетом скидок/наценок.15.5.0
getPropertyCollectionВозвращает коллекцию значений свойств, привязанных к заказу15.5.0
getRegistryTypeВозвращает тип реестра, которому относится объект.18.0.0
getSiteIdВозвращает ID сайта, на котором оформлялся заказ.15.5.0
getSumPaidВозвращает стоимость заказа, которую уже оплатили.15.5.0
getTaxВозвращает объект класса BitrixSaleTax .17.5.0
getTaxLocationВозвращает ID местоположения которое используется для расчета налогов.18.0.0
getTaxPriceВозвращает величину налога на заказ.15.5.0
getTaxValueВозвращает ставку налога на заказ.15.5.0
getUfIdВозвращает ID пользовательских полей. По умолчанию null .18.0.0
getUserIdВозвращает ID покупателя.15.5.0
getVatRateВозвращает ставку НДС, которая была применена.15.5.0
getVatSumВозвращает общую величину НДС.15.5.0
isAllowDeliveryВозвращает значение true , если для заказа разрешена доставка (иначе возвращает false ).18.0.0
isCanceledВозвращает значение true , если заказ отменен (иначе возвращает false ).18.0.0
isChangedВозвращает значение true , если заказ изменен (иначе возвращает false ).18.0.0
isExternalВозвращает true , если заказ пришел извне (например, из 1С). Иначе возвращает false .15.5.2
isMarkedВозвращает true , если заказ промаркирован (иначе возвращается false ). Заказы маркируются только в случае каких-либо ошибок.16.0.22
isNotEmptyBasketВозвращает true , если корзина не пуста. В противном случае — false .15.5.0
isPaidВозвращает значение true , если заказ оплачен (иначе возвращает false ).18.0.0
isShippedВозвращает true , если заказ отгружен (иначе возвращает false ).15.5.0
isUsedVatВозвращает true , если используется НДС (иначе возвращает false ).15.5.0
loadЗагружает заказ по ID и возвращает объект (либо null ).15.5.0
loadByAccountNumberЗагружает заказ по его номеру и возвращает объект (либо null ).18.0.0
loadByFilterВозвращает массив объектов заказа (либо null ).18.0.0
loadPropertyCollectionЗагружает коллекцию значений свойств, привязанных к заказу из базы данных.15.5.0
refreshDataВыполняет пересчет заказа.17.5.0
refreshVatВыполняет пересчет налогов.15.5.0
resetDataСбрасывает информацию по заказу.18.5.3
resetTaxСбрасывает информацию по налогам.18.0.0
saveСохраняет заказ.15.5.0
setBasketПрикрепляет корзину к новому заказу и актуализирует ее. При попытке прикрепить корзину к существующему заказу будет выброшено исключение: BitrixMainNotSupportedException .18.0.0
setPersonTypeIdУстанавливает ID типа плательщика для заказа.15.5.0
verifyПроверяет заказ и связанные с ним сущности на корректность.18.0.0

Методы родительского класса BitrixSaleInternalsEntity

МетодОписаниеС версии
doFinalActionАбстрактный метод, предназначенный для реализации логики "конечных" расчетов.15.5.0
getAvailableFieldsВозвращает массив полей, которые могут быть установлены через методы setField() и setFields() .15.5.0
getAvailableFieldsMapВозвращает массив полей, которые могут быть установлены через методы setField() и setFields() . В качестве ключей массива выступают значения getAvailableFields.17.5.0
getFieldВозвращает значение поля $name .18.0.3
getFieldValuesВозвращает массив полей со значениями.15.5.0
getIdВозвращает идентификатор сущности.15.5.0
initFieldИнициализирует поле значением. При этом объект не считается измененным.15.5.0
initFieldsИнициализирует поля значениями. При этом объект не считается измененным.15.5.0
isChangedПроверяет, была ли изменена сущность. Если да, то возвращает true , иначе false .15.5.2
isMathActionOnlyПроверяет, идет ли расчет на текущих данных (данные из провайдера не запрашиваются). Если да, то возвращает true , иначе false .15.5.0
setFieldУстанавливает значение поля $name .15.5.0
setFieldsИнициализирует поля значениями. При этом объект не считается измененным.15.5.0
setMathActionOnlyОтключает запросы к провайдеру при выполнении расчетов.15.5.0
verifyПроверяет, корректен ли объект. Возвращает объект BitrixSaleResult .16.0.0

Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.

Создание заказа через api d7. Заказ корзины либо конкретных товаров минуя корзину.

Для начала необходим класс функций, которая будет создавать пользователя, если заказ происходит без авторизации. Данный класс создает пользователя с логином соответствующим номеру телефона, либо возвращает ID пользователя, если таковой уже есть. Второй параметр $newUserProps функции getByPhone может содержать другие параметры пользователя, например, E-mail. Эти параметры используются только при создании пользователя. Если заказ происходит только после авторизации, данный класс не нужен:

Другой вариант функции авторегистрации — пользователь создается в любом случае, независимо от того, регистрировался ли он ранее:

Непосредственно код создания заказа:

Пример ajax-обработчика для создания заказа с одним товаром (11 и 12 — это идентификаторы инфоблока товаров и предложений соответственно):