Виджет расчета доставки для разработчиков (корзинный)

Предназначен для использования в штатных корзинах CMS или самописных интернет-магазинах. На его основе создаются модули для CMS Для разработчиков


Основные возможности

  • Показывает сразу все варианты доставки нужными вам транспортными компаниями:
    Яндекс Доставка, СДЭК, Почта России, DPD, Деловые Линии, ПЭК, Dostavista, КИТ, Байкал Сервис, Желдорэкспедиция, Возовоз, Энергия, 5POST, Магнит Пост, Постаматы «Халва Экспресс», Grastin, Logsis

  • Пункты самовывоза (ПВЗ) всех служб доставки на одной карте

    Можно вывести ПВЗ конкретной службы, или отобразить их все с возможностью поиска ближайших по адресу. Адрес вашего ПВЗ/склада добавляется через настройку своей службы доставки. Он так же будет на общей карте, на этой странице для примера добавлен склад самовывоза для Москвы.

  • Учет веса, габаритов и цены товаров при расчете доставки

    Источником данных весо-габаритных характеристик может быть ваш сайт или настройки в нашем кабинете.

  • Возможность через правила настроить коррекцию стоимости и срока

    На этой странице для примера при выборе DPD с оплатой Наличными при получении добавляется 100% наценка к стоимости доставки. Так же через правила можно сделать коррекцию в зависимости от любых других параметров заказа.

  • Выбор тарифа

    Если у транспортной компании есть разные тарифы, то в настройках виджета вы можете разрешить выбор тарифа для пользователей. На этой странице включен выбор тарифа для Сдэк и Почты России.

  • Выбор дополнительных услуг

    Если у транспортной компании есть дополнительные услуги, такие как обрешетка, страховка, подъем на этаж и т.п., в настройках виджета вы можете разрешить выбор дополнительных услуг, изменить их названия и вывести ваш комментарий, а также включить нужные вам по умолчанию. На этой странице выбор дополнительных услуг разрешен для Сдэк и Деловых Линий

  • Кастомизация под стиль сайта через css

    Настроить внешний вид можно с помощью css под дизайн конкретного сайта (цвета, шрифт, форма и расположение блоков)

  • Функции обратного вызова для гибкой встройки в сайт

    Доступные события смотрите ниже в блоке Подключение и настройка.

Демонстрация работы

Ниже представлен макет корзины со встроенным виджетом. Выбор населенного пункта и способа оплаты реализованы на стороне сайта.

Состав корзины

Наименование Цена Количество Сумма
Кроссовки
Вес: 2.5кг
6 400 р 6 400 р
Мягкая игрушка
Вес: 0.5кг
820 р 1 640 р
Набор для путешествий
Вес: 1кг
1 652 р 1 652 р

Выберите тип доставки (настраиваемый заголовок виджета)

Корзина

Стоимость товаров: 9 692 р.

Выберите вариант доставки

Итого: 9 692р.


Лог событий
Во время работы виджет генерирует события, которые вы можете использовать. Описание событий в документации ниже.

Очистить лог

Подключение и настройка

1. Создайте и настройте аккаунт в сервисе eShopLogistic. Порядок действий описан здесь.

2. Выполните подключение виджета к сайту по документации ниже.

Если что-то не получается - напишите нам через Telegram или в раздел «Поддержка» в нашем кабинете, мы обязательно поможем!

Помимо параметров настройки виджета в личном кабинете, некоторые настройки можно применять прямо при установки виджета.
Это позволяет переопределять указанные в личном кабинете базовые настройки (например, в зависимости от каких-то условий на сайте).

Обязательным параметром, который должен быть указан и не может быть изменён, является ключ виджета - data-key.

Параметр Описание
data-key Ключ виджета. Указан в настройках виджета на вкладке «Подключение на сайте».
data-lazy-load

Установите значение data-lazy-load="true" для того, чтобы вместо автоматического запуска, виджет загружается по событию.

Пример:

<script>
const widget = document.getElementById('eShopLogisticWidgetCart'),
        button = document.getElementById('runWidget')
button.addEventListener('click', event => {
	widget.dispatchEvent(new CustomEvent('eShopLogisticWidgetCart:loadApp'))
})
</script>
data-door-delivery-default

Код службы курьерской доставки по умолчанию

После запуска виджета автоматически будет определён вариант указанной службы (если он доступен)

Доступные коды служб:

  • yandex Яндекс Доставка
  • sdek СДЭК
  • postrf Почта России
  • dpd DPD
  • delline Деловые Линии
  • pecom ПЭК
  • kit КИТ
  • baikal Байкал Сервис
  • integral Интеграл
  • zde Желдорэкспедиция
  • vozovoz Возовоз
  • energija Энергия
  • fivepost 5POST
  • magnit Магнит Пост
  • halva Постаматы «Халва Экспресс»
  • grastin Grastin
  • logsis Logsis
data-terminal-delivery-default

Код службы доставки до пункта самовывоза по умолчанию

После запуска виджета автоматически будет определён вариант указанной службы (если он доступен)

data-controller

URL контроллера

Если необходимо как-то обрабатывать запросы (например, логгировать), укажите URL своего контроллера.
Контроллер должен принимать запрос от виджета, передавать его на наш сервер через API, получать и возвращать виджету ответ.

Например: data-controller="/assets/delivery/action.php"

Параметры, отмеченные , - обязательны.

Доступно 10 функций обратного вызова для каждого ключевого события или ошибки:

  • onLoadApp - после инициализации виджета;
  • onAllServicesLoaded - получение всех доступных вариантов доставки;
  • onSelectTypeDelivery - выбор типа доставки;
  • onChangeAdditionalService - выбор дополнительных услуг;
  • onSelectedService - выбор варианта доставки или пункта самовывоза на карте;
  • onSelectedPickPoint - выбор пункта самовывоза на карте;
  • onBalloonOpen - открытие балуна метки на карте (можно использовать аналогично onSelectedService)
  • onInvalidSettlementCode - ошибка определения населённого пункта по его коду;
  • onInvalidName - ошибка определения населённого пункта по его названию;
  • onInvalidServices - нет ни одного варианта доставки в данный населённый пункт;
  • onNotAvailableServices - не получено ни одного варианта доставки;
  • onInvalidPayment - не передан вариант оплаты;
  • onInvalidOffers - не переданы данные товаров.

Пример использования:

<script>
document.addEventListener('DOMContentLoaded', () => {
    const root = document.getElementById('eShopLogisticWidgetCart');

    root.addEventListener('eShopLogisticWidgetCart:onLoadApp', (event) => {
        console.log('Событие onLoadApp', event.detail)
    });

    root.addEventListener('eShopLogisticWidgetCart:onSelectedService', (event) => {
        console.log('Событие onSelectedService', event.detail)
    })

    root.addEventListener('eShopLogisticWidgetCart:onAllServicesLoaded', (event) => {
        console.log('Событие onAllServicesLoaded', event.detail)
    })

    root.addEventListener('eShopLogisticWidgetCart:onSelectTypeDelivery', (event) => {
        console.log('Событие onSelectTypeDelivery', event.detail)
    })

    root.addEventListener('eShopLogisticWidgetCart:onInvalidSettlementCode', () => {
        console.log('Неверный код населенного пункта')
    })

    root.addEventListener('eShopLogisticWidgetCart:onInvalidName', () => {
        console.log('Неверный name города')
    })

    root.addEventListener('eShopLogisticWidgetCart:onInvalidServices', () => {
        console.log('Неверный массив служб')
    })

    root.addEventListener('eShopLogisticWidgetCart:onInvalidPayment', () => {
        console.log('Не передана оплата')
    })

    root.addEventListener('eShopLogisticWidgetCart:onInvalidOffers', () => {
        console.log('Не передан offers')
    })
</script>
1

После регистрации на нашей платформе добавьте ключ доступа и нужные вам службы доставки.

Добавление ключа доступа

2

Добавьте к ключу виджет типа Расчет доставки для корзины (Специальный для модулей CMS и разработчиков).

Выбор виджета

3

Настройте параметры и функционал виджета по документации.

Настройка виджета

4

Для подключения на сайт в параметре data-key используйте ключ виджета.

Ключ виджета

5

Общий порядок действий для подключения сервиса eShopLogistic на ваш сайт или в МойСклад описан здесь. Подключайтесь по документации и используйте все возможности интеграции со службами доставки для вашего бизнеса.

Установка на сайт

Для установки виджета на сайт необходимо вставить в код страницы контейнер для виджета и подключить js-скрипт для расширенной или компактной версии:

<div id="eShopLogisticWidgetCart" data-lazy-load="false" data-key="000000-0-0"></div>
<script src="https://api.esplc.ru/widgets/cart/app.js">
/*
   для компактной версии виджета:
   https://api.esplc.ru/widgets/cartCompact/app.js
*/
</script>
Параметр data-key должен содержать ключ виджета, указанный в настройках виджета в личном кабинете.

Как использовать виджет на странице оформления заказа

Для включения виджета в работы в состав страницы оформления заказа сайта необходимо передать виджету:

  • Населённый пункт (далее НП) для доставки.

    Определить НП при загрузке страницы оформления заказа:
    если на сайте установлена система определения города посетителя и у вас есть название города, а лучше ФИАС-код, то можно воспользоваться методом /locality/search. В противном случае, можно использовать метод /locality/geo.
    Выбор НП посетителем сайта: используйте метод /locality/search.

  • Состав корзины.

    JSON-представление массива товаров в корзине.

  • Метод оплаты.

    Обратите внимание: необходимо связать варианты оплаты, настроенные на сайте с зарезервированными кодами в нашейм сервисе:
    card (карта)
    cash (наличные)
    cashless (безналичный расчёт)
    prepay (специальный тип: предоплата)
    upon_receipt (специальный тип: оплата при получении).

При обновлении любого из указанных выше параметра необходимо обновлять виджет, перезапуская событие eShopLogisticWidgetCart:updateParamsRequest с новыми данными.

JS-код запуска:

<script>
document.addEventListener('DOMContentLoaded', () => {
    const root = document.getElementById('eShopLogisticWidgetCart'),
    // объект settlement должен содержать массив services, а также один из элементов code или fias
    // данные получаются посредством методов /locality/search или /locality/geo
    settlement = {
        "code": 120935,
        "name": "Тверь",
        "fias": "c52ea942-555e-45c6-9751-58897717b02f",
        "services": [
            "sdek",
            "yandex",
            "boxberry",
            "energija"
        ]
    },
    // массив товаров корзины
    cart = [{
        "article":"001",
        "name":"Товар 1",
        "count":1,
        "price":6400,
        "weight":2.5,
        "dimensions":"15*10*5"
    }, {
        "article":"002",
        "name":"Товар 2",
        "count":2,
        "price":1500,
        "weight":0.5,
        "dimensions":"10*5*5"
    }]

    // собыите onLoadApp запускается только один раз - при первом запуске виджета
    // для того, чтобы передать в виджет новые параметры, используйте только updateParamsRequest
    root.addEventListener('eShopLogisticWidgetCart:onLoadApp', (event) => {
        const params = {
            offers: JSON.stringify(cart),
            payment: 'card',
            // При необходимости можно задать ПВЗ отправления груза
            // Актуально, если ПВЗ используются разные и на них есть доплаты, например у ПЭК и DPD)
            fromTerminal: {
                dpd: 'BBK'
            },
            // Указанием здесь ФИАС-кода можно изменить город-отправитель, заданный по умолчанию в настройках ключа доступа (в личном кабинете)
            from: '8dea00e3-9aab-4d8e-887c-ef2aaa546456'
        }

        root.dispatchEvent(new CustomEvent('eShopLogisticWidgetCart:updateParamsRequest', {
            detail: {
                settlement: settlement,
                requestParams: params
            }
        }))
    })

})
</script>

В результате работы виджета доступны следующие данные, которые необходимо передать в объект заказа:

  • Выбранная служба доставки, стоимость и срок доставки, комментарий (если указан).

    Используйте функцию обратного вызова eShopLogisticWidgetCart:onSelectedService.
    В event.detail также могут содержаться другие необходимые данные, в зависимости от конкретной службы доставки. Например, «код тарифа» для СДЭКа, который необходим для выгрузки заказа на доставку в кабинет сдека.

  • Метод доставки

    Используйте функцию обратного вызова eShopLogisticWidgetCart:onSelectTypeDelivery.

  • Выбранный пункт самовывоза

    Используйте функцию обратного вызова eShopLogisticWidgetCart:onSelectedPvz.

Пример:

<script>
document.addEventListener('DOMContentLoaded', () => {
    const root = document.getElementById('eShopLogisticWidgetCart')

    // Событие «Выбор варианта доставки»
    root.addEventListener('eShopLogisticWidgetCart:onSelectedService', (event) => {
        console.log('Событие onSelectedService', event.detail)
    })
})
</script>

В случае, если не найдено ни одного варианта доставки, вызывается eShopLogisticWidgetCart:onNotAvailableServices.