Skip to main content
Одна структура объекта проходит через весь SDK. Это то, что возвращает getCart(), что cart_loaded и cart_updated передают вашему обработчику и что получает блок Custom code.
Все денежные суммы указаны в минимальных единицах валюты (центы для USD), никогда — в виде отформатированной строки. 5779 — это $57.79. Используйте formatMoney для отображения.

Корзина

itemCount не всегда равен сумме items. items отражает реальную корзину Shopify, включая позиции-дополнения, которые drawer скрывает, например защиту доставки. itemCount — это число для покупателя, соответствующее значку корзины. Для «сколько вещей выбрал покупатель» используйте itemCount; для перебора позиций, которые отрисовывает корзина, используйте items.Две вещи полностью отсутствуют в items: позиции, скрытые через setHidden, и дочерние позиции комплектов, которые переносятся на свой якорь. Обе всё равно учитываются в итогах корзины, которые приходят напрямую из Shopify.

Позиции корзины

Каждая запись в items, а также item в item_added и item_removed:
properties может содержать введённые покупателем данные, например поле пользовательского текста из формы товара. Отображайте их как текст, никогда — как необработанный HTML.

Идентификация позиции

Используйте key для всего, что действует на позицию, и variantId или productId для всего, что идентифицирует товар:
Один и тот же вариант может присутствовать в нескольких позициях, когда свойства различаются. Две кружки с гравировкой с разными текстами гравировки — это две позиции с одним variantId. Именно поэтому действия принимают key.

Цены позиции

Три цены, которые легко перепутать:

Комплекты

Когда позиции сгруппированы в комплект, якорная позиция несёт объект bundle. Дочерние позиции сворачиваются в него и больше не появляются в items самостоятельно. О том, как настраивается группировка, см. Группировка позиций комплектов из другого приложения. Каждая дочерняя позиция несёт key (null для нативного компонента), title, variantTitle, quantity, perAnchorQty, imageUrl, finalLinePrice, originalLinePrice и compareAtPrice.

Планы подписки

Активный план позиции — sellingPlan, или null для разовой покупки. Для ответа по всей корзине читайте hasSubscriptionItems, а не сканируйте позиции самостоятельно, поскольку он также учитывает позиции-дополнения, которые items показывает, но itemCount пропускает:
Доступные планы позиции, те, что в селекторе, отсутствуют в объекте корзины. Формируйте их с помощью registerSubscriptionOptionsTransform и registerDefaultSubscriptionOptionSelector.

Что дальше