Корзина и заказы: Sale API
Работа с интернет-магазином ведется строго через объектную модель модуля sale: операции с позициями корзины выполняются через класс Basket, а создание и модификация заказа — через методы объекта Order. Прямое обновление таблиц через ORM Internals\*Table обходит жизненный цикл заказа, приводя к потере истории изменений, сбоям расчета скидок и блокировке почтовых уведомлений.
Прогресс хранится в этом браузере. Войдите, чтобы сохранить его в аккаунте.
Что нужно понимать
-
1
Bitrix\Sale\Basket и Order
-
2
Свойства заказа и покупатели
-
3
Статусы, оплаты, отгрузки
-
4
Резервирование и гонки при оформлении
-
5
Внутренний счёт покупателя
Материалы
Официальная документация
-
Создание заказа Новая дока
Материалы BXMax
Проверь себя
Скрипт переводит заказы в другой статус через OrderTable::update(). Статус меняется, а письма не уходят и в 1С заказ не попадает. Почему?
ORM-запись минует объектную модель: события, история, уведомления и пересчёт не запускаются. Нужно Order::load(), setField('STATUS_ID') и Order::save().
Заказчик жалуется на дубли заказов при двойном клике по кнопке «Оформить». Что защитит?
Собственный реестр операций с уникальным ключом, зарезервированным до Order::create(). Индекс XML_ID уникальность не гарантирует, а Order::lock() защищает редактирование, не создание.
Чем Basket::save() отличается от Order::save() для корзины уже оформленного заказа?
Корзину заказа отдельно не сохраняют: Basket::save() обойдёт пересчёт заказа, скидки и историю. После изменения позиции зовут Order::save() целиком.
Почему списание с внутреннего счёта нельзя делать как «прочитать баланс, вычесть, записать»?
Между чтением и записью другой процесс меняет счёт. UpdateAccount() принимает дельту и работает с логической блокировкой, но отрицательный баланс не запрещает и повтор не отличает — нужен свой ключ операции, а оплата заказа идёт через внутреннюю платёжную систему.
Не сходится?
Спросите ассистента BXMax: он знает документацию и материалы сайта по этой теме.
Знаете материал лучше?
Предложите ссылку: после проверки она появится в этом разделе.
Войти, чтобы предложить