Начиная с 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 — класс для работы с заказами. Он расширяет базовый класс, добавляя работу с оплатами, отгрузками и источниками заказа.
Цепочка наследования
Методы класса
Метод | Описание | С версии |
---|---|---|
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 — это идентификаторы инфоблока товаров и предложений соответственно):