Для реализации возможностей интернет-магазина в системе битрикс используется модуль sale. С помощью данного модуля становятся доступными возможности работы с корзиной, оформления заказов, работа с покупателями, а также другой необходимый функционал. Для бизнеса, в большинстве случаев, стандартных компонентов оформления заказов иногда бывает достаточно. Однако это не исключает возможность реализации своего функционала для работы с заказами на уровне API. В данном посту мы рассмотрим простые примеры использования API битрикса ядра D7.
Перед использованием API для работы с заказами следует подключить модуль «sale»:
\Bitrix\Main\Loader::includeModule('sale'); use Bitrix\Sale\Order, Bitrix\Sale\Basket, Bitrix\Sale\Delivery, Bitrix\Sale\PaySystem;
Зная ID заказа, мы можем получить поля заказа, а также внести какие-либо изменения в них.
$order = \Bitrix\Sale\Order::load($orderId); // объект заказа $order->getFields(); // получение полей заказа $order->getField("DELIVERY_ID"); // ID службы доставки $order->setField('PAYED', 'N'); // изменить любой параметр $order->save(); // и сохраняем
Используя ID заказа мы инициализировали объект заказа, посредством метода load(), и присвоили переменной $order. Для получения полей заказа, мы выполнили метод getFields(). После этого нам становятся доступны поля для работы с ними. Так в примере через метод getField() мы получили значение DELIVERY_ID. Передавая таким образом символьный код этому методу мы можем получать значение этих полей в заказе. Далее используя метод setField() мы присвоили полю PAYED значение «N». Чтобы изменения записались в системе, следует так же выполнить метод save(). Использовать этот метод нужно лишь в том случае, когда мы вносим изменения в текущий заказ, и вызывается он в последнюю очередь. Таблица с описанием полей заказа опубликована в конце статьи.
Получать значение некоторых полей можно посредством специальных методов, которые так же удобно использовать в коде:
$order->getId(); // ID заказа $order->getSiteId(); // ID сайта $order->getDateInsert(); // объект Bitrix\Main\Type\DateTime $order->getPersonTypeId(); // ID типа покупателя $order->getUserId(); // ID пользователя $order->getPrice(); // Сумма заказа $order->getDiscountPrice(); // Размер скидки $order->getDeliveryPrice(); // Стоимость доставки $order->getSumPaid(); // Оплаченная сумма $order->getCurrency(); // Валюта заказа $order->isPaid(); // true, если оплачен $order->isAllowDelivery(); // true, если разрешена доставка $order->isShipped(); // true, если отправлен $order->isCanceled(); // true, если отменен
Для создания заказа нам следует выполнить цепочку последовательных действий: создать корзину, создать заказ и связать корзину с заказом, создать запись отгрузки, создать оплату.
// товары для добавления в корзину $arItems = array( array( 'PRODUCT_ID' => 150, 'NAME' => 'Наименование товара', 'PRICE' => 25000, 'CURRENCY' => 'KZT', 'QUANTITY' => 1 ) ); // создаём корзину, и добавляем в неё товары $basket = \Bitrix\Sale\Basket::create(SITE_ID); foreach ($arItems as $i => $arItem) { $basketItem = $basket->createItem("catalog", $arItem['PRODUCT_ID']); $basketItem->setFields($arItem); } // создаем заказ, связываем корзину с заказом (перерасчет происходит автоматически) $order = \Bitrix\Sale\Order::create(SITE_ID, $userId); $order->setPersonTypeId($personTypeId); $order->setBasket($basket); // создаём отгрузку заказа $shipmentCollection = $order->getShipmentCollection(); $shipment = $shipmentCollection->createItem( \Bitrix\Sale\Delivery\Services\Manager::getObjectById(1) ); $shipmentItemCollection = $shipment->getShipmentItemCollection(); foreach ($basket as $basketItem) { $item = $shipmentItemCollection->createItem($basketItem); $item->setQuantity($basketItem->getQuantity()); } // создаём оплату заказа $paymentCollection = $order->getPaymentCollection(); $payment = $paymentCollection->createItem( \Bitrix\Sale\PaySystem\Manager::getObjectById(1) ); $payment->setField("SUM", $order->getPrice()); $payment->setField("CURRENCY", $order->getCurrency()); // сохраняем все параметры заказа $result = $order->save(); if ($result->isSuccess()) { echo 'Заказ успешно создан!'; } else { echo $result->getError(); }
Аналогично как и в предыдущем примере все изменения заказа сохраняются посредством метода save(). В примере выше добавляется только один товар, однако на практике можно добавлять их целое множество, посредством массива $arItems.
В самом первом примере мы уже рассматривали возможность обновления полей заказа. Там, посредством использования метода setField() мы задавали значения поля заказа. При работе с заказом так же бывает требуется обновить другие данные заказа, которые обновляются немного иначе. Допустим нам требуется разрешить отгрузку заказа, для этого мы может выполнить такую операцию:
// получаем объект заказа $order = \Bitrix\Sale\Order::load($orderId); // добавляем комментарий от покупателя $order->setField('USER_DESCRIPTION', 'Доставить до дому'); // получаем объекты отгрузки $shipmentCollection = $order->getShipmentCollection(); foreach ($shipmentCollection as $shipment) { if (!$shipment->isSystem()) { $shipment->allowDelivery(); // разрешаем отгрузку } } // сoхраняем изменения заказа $result = $order->save(); if ($result->isSuccess()) { echo 'Изменения сохранены успешно!'; } else { echo $result->getError(); }
В данном примере мы добавили к заказу комментарий от покупателя — поле USER_DESCRIPTION, а также разрешили отгрузку товаров. По умолчанию для каждого заказа существует системная отгрузка, она создаётся при создании заказа. В цикле так прописано условие, которое исключает системную отгрузку, которую затрагивать нет необходимости.
*Стоит обратить внимание на то, что поля актуальны на момент написания данной статьи.
ID | Номер заказа. |
LID | Код сайта. |
ACCOUNT_NUMBER | Код заказа. |
TRACKING_NUMBER | Трек-номер заказа. |
PAY_SYSTEM_ID | Идентификатор платежной системы. |
DELIVERY_ID | Идентификатор службы доставки. |
DATE_INSERT | Дата добавления заказа в формате текущего сайта. |
DATE_UPDATE | Дата последнего изменения заказа в формате текущего сайта. |
PERSON_TYPE_ID | Идентификатор плательщика. |
USER_ID | Идентификатор пользователя, за кем закреплен заказ. |
PAYED | Фраг оплаченности заказа (Y/N). |
DATE_PAYED | Дата оплаты заказа. |
DATE_INSERT | Дата добавления заказа в формате текущего сайта. |
DATE_UPDATE | Дата последнего изменения заказа в формате текущего сайта. |
EMP_PAYED_ID | Идентификатор пользователя оплатившего заказ. |
DEDUCTED | Флаг отгруженности заказа (Y/N). |
DATE_DEDUCTED | Дата отгрузки заказа. |
EMP_DEDUCTED_ID | Идентификатор пользователя, отгрузившего заказ. |
REASON_UNDO_DEDUCTED | Комментарий причины отмены отгрузки заказа. |
STATUS_ID | Код статуса заказа. |
DATE_STATUS | Дата изменения статуса заказа. |
EMP_STATUS_ID | ID пользователя, изменивший статус заказа. |
MARKED | Флаг проблемности заказа (Y/N). |
DATE_MARKED | Дата выставления флага проблемности заказа. |
EMP_MARKED_ID | Идентификатор пользователя, установивший флаг проблемности заказа. |
REASON_MARKED | Комментарий причины проблемности заказа. |
PRICE_DELIVERY | Стоимость доставки. |
ALLOW_DELIVERY | Флаг разрешена ли отгрузка заказа (Y/N). |
DATE_ALLOW_DELIVERY | Дата выставления флага разрешения отгрузки заказа. |
EMP_ALLOW_DELIVERY_ID | Идентификатор пользователя, установивший флаг разрешение отгрузки заказа. |
RESERVED | Флаг зарезервированно ли всё кол-во товара в заказе (Y/N). |
PRICE | Стоимость заказа. |
CURRENCY | Валюта заказа. |
DISCOUNT_VALUE | Значение скидки заказа. |
TAX_VALUE | Размер налога на заказ. |
SUM_PAID | Сумма оплаченного заказа. |
USER_DESCRIPTION | Комментарий пользователя оформившего заказ. |
PAY_VOUCHER_NUM | Номер документа оплаты. |
PAY_VOUCHER_DATE | Дата оплаты документа. |
ADDITIONAL_INFO | Дополнительная информация заказа. |
COMMENTS | Комментарии к заказу. |
COMPANY_ID | Идентификатор компании, к которой привязан заказ. |
CREATED_BY | Идентификатор пользователя, кто создал заказ. |
RESPONSIBLE_ID | Идентификатор ответственного пользователя. |
STAT_GID | Код статистики. |
DATE_PAY_BEFORE | Дата предоплаты. |
DATE_BILL | Дата выставления счета. |
LOCKED_BY | Флаг, кто заблокировал заказ. |
DATE_LOCK | Дата, когда был заблокирован заказ. |
AFFILIATE_ID | Идентификатор аффилиата. |
DELIVERY_DOC_NUM | Номер документа отгрузки. |
DELIVERY_DOC_DATE | Дата документа отгрузки. |
UPDATED_1C | Флаг обновления данных в 1C. |
ORDER_TOPIC | Идентификатор темы на форуме, к которому привязан заказ. |
XML_ID | Внешний код заказа. |
ID_1C | Код в 1С. |
VERSION_1C | Версия обмена. |
EXTERNAL_ORDER | Флаг, определяющий является ли заказ внешним. |
STORE_ID | Код склада. |
CANCELED | Флаг отмены заказа. |
EMP_CANCELED_ID | Идентификатор пользователя, кто отменил заказ. |
DATE_CANCELED | Дата отмены заказа. |
REASON_CANCELED | Причина отмены заказа. |
DATE_INSERT_FORMAT | Дата добавления заказа в формате региональных настроек. |
DATE_UPDATE_SHORT | Дата обновления заказа в формате региональных настроек. |
DATE_STATUS_SHORT | Дата смены статуса заказа в формате региональных настроек. |
DATE_CANCELED_SHORT | Дата отмены заказа в формате региональных настроек. |
BY_RECOMMENDATION | Флаг оформлен ли заказ по рекомендации. |
LOCK_STATUS | Код блокировка(green/yelow/green). |
LOCK_USER_NAME | Имя пользователя, блокирующего заказ. |
RESPONSIBLE_LOGIN | Логин ответственного за заказ пользователя. |
RESPONSIBLE_NAME | Имя ответственного за заказ пользователя. |
RESPONSIBLE_LAST_NAME | Фамилия ответственного за заказ пользователя. |
RESPONSIBLE_SECOND_NAME | Отчество ответственного за заказ пользователя. |
RESPONSIBLE_EMAIL | Email ответственного за заказ пользователя. |
RESPONSIBLE_WORK_POSITION | Должность ответственного за заказ пользователя. |
RESPONSIBLE_PERSONAL_PHOTO | Фото ответственного за заказ пользователя. |
USER_LOGIN | Логин пользователя, за кем закреплен заказ. |
USER_NAME | Имя пользователя, за кем закреплен заказ. |
USER_LAST_NAME | Фамилия пользователя, за кем закреплен заказ. |
USER_EMAIL | Email пользователя, за кем закреплен заказ. |