Виджет интернет-магазина

Интеграция корзины

Как виджет превращает раскладку в строки корзины и почему цена, остатки и оформление заказа остаются главными на вашей платформе.

Виджет превращает готовую раскладку в конкретные строки корзины и передаёт их вашему магазину. Ваш магазин остаётся ответственным за цены, скидки, остатки и оформление заказа.

Полезная нагрузка колбэка

Когда покупатель нажимает Добавить в корзину, виджет вызывает onAddToCart с:

{
  lines: [
    { sku: 'TILE-600-300', qty: 5, unit: 'box' },
  ],
  layoutFingerprint: '…',
  layoutToken: '…',
}

lines — это позиции для добавления. Каждая строка — SKU каталога, числовое количество и единица. Ответ всегда содержит строку плитки — итоговое число плиток к покупке, выраженное в коробках.

Расходники — по желанию

Клей, затирка и грунтовка всегда считаются и показываются в смете на экране и в Blueprint PDF. Синхронизируются ли они ещё и в корзину — отдельная настройка, которую включают мерчантам, продающим эти товары. Когда она включена, эти строки добавляются рядом с плиткой:

{
  lines: [
    { sku: 'TILE-600-300', qty: 5, unit: 'box' },
    { sku: 'ADHESIVE-25', qty: 12.5, unit: 'kg' },
    { sku: 'GROUT-2KG', qty: 3, unit: 'kg' },
    { sku: 'PRIMER-10L', qty: 1, unit: 'l' },
  ],
  layoutFingerprint: '…',
  layoutToken: '…',
}

Свяжитесь с нами, если вы продаёте расходники и хотите включить их — мы включим это для вашего магазина при настройке.

layoutFingerprint — это стабильный идентификатор раскладки. layoutToken — подписанный токен, который вы можете сохранить, чтобы позже снова открыть ту же раскладку — например, чтобы приложить план к заказу.

Добавление в вашу корзину

Ваш колбэк добавляет строки через собственный API вашего магазина:

onAddToCart(payload) {
  payload.lines.forEach((line) => {
    yourStore.addToCart({
      sku: line.sku,
      quantity: line.qty,
      unit: line.unit,
    });
  });
}

Для WooCommerce это вызов cart/add-item на каждую строку; для Shopify — мутация корзины; для кастомного магазина — ваш собственный сервис корзины. Виджет никогда не обращается к вашему магазину напрямую — это делаете вы, с теми SKU и количествами, которые он распознал.

Цена остаётся в вашем магазине

Виджет никогда не отправляет цену. Он может показывать прайс-лист из вашего каталога в смете для контекста, но финальную цену, налог, акции и скидки лояльности применяет ваше оформление заказа при добавлении строк. Это сохраняет один движок цен и исключает расхождение между виджетом и корзиной.

Остатки остаются в вашем магазине

Виджет добавляет то, что требует раскладка. Ваш магазин проверяет остатки по этим SKU ровно так же, как при любом другом добавлении в корзину. Если SKU заканчивается или недоступен, ваш существующий поток предзаказа и уведомлений работает без изменений.

Эндпоинт намерения корзины

Для headless и серверных интеграций есть эндпоинт cart-intent, который возвращает те же распознанные строки. Ваш сервер вызывает его с раскладкой и добавляет результат в корзину сессии:

curl -X POST "https://embed.scalarcut.com/v1/tiling/cart-intent" \
  -H "Authorization: Bearer $WIDGET_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "catalog": "YOUR_CATALOG_SLUG",
    "sku": "TILE-600-300",
    "layoutFingerprint": "…",
    "quantities": { "boxes": 5 }
  }'

Ответ:

{
  "lines": [
    { "sku": "TILE-600-300", "qty": 5, "unit": "box" }
  ],
  "layoutFingerprint": "…",
  "layoutToken": "…"
}

Когда для магазина включены расходники, запрос может также нести adhesiveKg, groutKg и primerL, и в ответ добавляются соответствующие строки.

Полный контракт эндпоинта см. в справочнике API.