Группа sale.* отвечает за онлайн-продажи в Битрикс24: заказы CRM-магазина, позиции корзины, свойства заказа, оплаты и отгрузки, статусы и торговые площадки. Через неё внешний сайт или мобильное приложение создаёт полноценный заказ, который менеджеры ведут в CRM.
Модель данных заказа
Заказ (sale.order) — корневая сущность. К нему привязаны дочерние объекты, каждый со своей группой методов:
| Сущность | Метод | Роль |
|---|---|---|
| Заказ | sale.order.* | Сумма, покупатель, валюта, статус |
| Позиция корзины | sale.basketitem.* | Товары и количество |
| Свойство заказа | sale.propertyvalue.* | ФИО, телефон, адрес |
| Оплата | sale.payment.* | Платёж по заказу |
| Отгрузка | sale.shipment.* | Доставка позиций |
sale.*, вы управляете именно торговой частью, а карточка сделки обновляется автоматически.Тип плательщика и справочники
Перед созданием заказа выясните доступные типы плательщика и статусы. Тип плательщика (personTypeId) разделяет схемы «физлицо» и «юрлицо» и определяет набор свойств:
sale.persontype.list— типы плательщиков;sale.status.list— статусы заказов и отгрузок;sale.paysystem.list— платёжные системы;sale.delivery.getlist— службы доставки;sale.orderproperty.list— описание свойств заказа для нужного типа плательщика.
Эти справочники лучше кешировать: их значения нужны почти в каждом создаваемом заказе, а сами они меняются редко.
Создание заказа
Заказ создаётся методом sale.order.add. Минимально нужны валюта, тип плательщика и хотя бы одна позиция корзины:
sale.order.add { "fields": { "currency": "RUB", "personTypeId": 1, "basketItems": [ { "productId": 240, "quantity": 2, "price": 24990, "currency": "RUB", "name": "Кофемашина Bosch" } ] } }
В ответе — result.order.id, а также вложенные basketItems, shipments и payments с их идентификаторами. Позиции можно передать сразу в sale.order.add или добавлять позже через sale.basketitem.add с orderId. Поле productId позиции ссылается на товар каталога; если товара в каталоге нет, допустимо передать произвольную позицию с именем и ценой, но тогда она не свяжется с остатками и аналитикой каталога. Валюта позиции должна совпадать с валютой заказа, иначе сумма пересчитается некорректно.
Свойства заказа
Контактные данные (ФИО, телефон, адрес, комментарий) хранятся не в самом заказе, а в значениях свойств. Список свойств для типа плательщика даёт sale.orderproperty.list, а значения задаются через sale.propertyvalue.add:
sale.propertyvalue.add { "fields": { "orderId": 1024, "orderPropsId": 5, "value": "+7 900 000-00-00" } }
PHONE, EMAIL или ADDRESS используются доставкой и CRM. Не создавайте вручную новые свойства для телефона — заполняйте штатные, иначе данные не попадут в карточку клиента.Оплаты и отгрузки
Финансовую и логистическую части ведут отдельные объекты. Оплата создаётся sale.payment.add с указанием orderId, paySystemId и суммы; факт оплаты — обновлением поля paid в Y. Отгрузка создаётся sale.shipment.add с deliveryId, а состав задаётся sale.shipmentitem.*.
- оплата:
sale.payment.add→ отметкаpaid=Y; - отгрузка:
sale.shipment.add→ наполнениеsale.shipmentitem.add→ отметкаdeducted=Y(списание со склада); - смена статуса заказа:
sale.order.updateс полемstatusId.
События и синхронизация
Чтобы реагировать на изменения заказа в реальном времени, подпишитесь на события через event.bind. Полезные события группы sale:
OnSaleOrderSaved— заказ создан или изменён;OnSalePaymentEntitySaved— изменение оплаты;OnSaleShipmentEntitySaved— изменение отгрузки.
Обработчик получает POST на ваш URL с идентификаторами; в ответ подтяните полные данные через sale.order.get. Это надёжнее периодического опроса и не расходует лимиты на постоянный sale.order.list.
sale.order.add, а обратные статусы (оплачено, отгружено) прилетают вебхуком событий обратно на сайт.Выборка и фильтрация заказов
Метод sale.order.list поддерживает select, filter, order и постраничный start. В filter работают префиксы операторов: >=, <=, % (подстрока), ! (не равно). Типовые сценарии выгрузки:
- новые заказы за период — фильтр
{ ">=dateInsert": "2026-07-01" }; - неоплаченные — фильтр по
payedравномуN; - заказы в конкретном статусе — фильтр по
statusId; - заказы конкретной торговой площадки — по
tradingPlatform.
Для получения дочерних сущностей одним запросом объединяйте sale.order.get, sale.basketitem.list и sale.payment.list в batch. Ответы list-методов содержат total и next для постраничного перебора по 50 элементов. Чтобы не выгружать весь массив ради подсчёта, запрашивайте только select с полем id и берите total из первого ответа.
Итог
Группа sale.* представляет заказ как дерево объектов: сам заказ, корзина, свойства, оплаты и отгрузки. Корректная интеграция начинается со справочников (типы плательщика, статусы, платёжные системы и доставки), затем идёт создание заказа, заполнение штатных свойств и управление оплатой и отгрузкой, а синхронизация статусов держится на событиях, а не на опросе.
Мы связываем внешние сайты и учётные системы с CRM-магазином Битрикс24 так, чтобы заказы, оплаты и отгрузки шли единым потоком без ручного переноса. Если нужен надёжный обмен заказами с сайтом или 1С — поможем спроектировать и внедрить его.
Частые вопросы
Обязательно ли передавать personTypeId при создании заказа?
Да, тип плательщика определяет схему свойств заказа (физлицо или юрлицо) и допустимые платёжные системы. Получите доступные значения через sale.persontype.list и передайте нужное в sale.order.add.
Как добавить контактные данные покупателя?
Через значения свойств заказа. Получите описание свойств методом sale.orderproperty.list для нужного типа плательщика, затем задайте значения через sale.propertyvalue.add, заполняя штатные свойства телефона, email и адреса.
Связан ли заказ sale с CRM?
Да, заказ CRM-магазина связан со сделкой. Работая через sale.*, вы управляете торговой частью, а карточка сделки в CRM обновляется автоматически, включая сумму и состав.
Как отметить заказ оплаченным?
Создайте оплату через sale.payment.add с orderId и paySystemId, затем обновите оплату, установив поле paid в Y. Заказ пересчитает итоговый статус оплаты автоматически.
Как отслеживать изменения заказов без постоянного опроса?
Подпишитесь через event.bind на события OnSaleOrderSaved, OnSalePaymentEntitySaved и OnSaleShipmentEntitySaved. Битрикс24 будет присылать POST на ваш URL, а полные данные вы подтянете через sale.order.get.
Можно ли добавить позиции после создания заказа?
Да. Позиции можно передать сразу в sale.order.add в массиве basketItems или добавить позже через sale.basketitem.add с указанием orderId. Обновление и удаление — через соответствующие методы группы basketitem.
Как выгрузить только неоплаченные заказы за период?
Используйте sale.order.list с фильтром по payed равным N и по диапазону dateInsert. Метод возвращает total и next для постраничного перебора, а дочерние данные удобно добирать в batch.
Поможем с настройкой и поддержкой Для разработчиков
Поможем с настройкой, доработкой и поддержкой Для разработчиков.