Порядок интеграции службы доставки через API
Скопировать ссылку на статью
Скопировано

История изменений

25.12.2020

В систему был добавлен callback-метод получения списка тарифов интеграционной доставки, в ходе которого система инициирует GET-запрос метода, указанного в integrationModule["integrations"]["delivery"]["actions"]["tariffList"]. Для выбора тарифа по умолчанию в типе доставки, интегрированном с generic-доставкой, необходимо, чтобы интеграция поддерживала реализацию этого метода.

28.04.2019

В методы GET /api/v5/integration-modules/{code}, POST /api/v5/integration-modules/{code}/edit добавлено поле integrationModule[integrations][delivery][settings]. Оно позволяет получить или обновить настройки интеграционной доставки.

04.03.2019

В методе Callback POST {integrationModule["baseUrl"]}/{configuration["actions"]["calculate"]} (ссылка на метод) в объект RequestCalculate добавлена передача содержимого упаковки calculate[packages][][items][].

В объект PackageItem добавлены поля: externalId - идентификатор торгового предложения в магазине, xmlId - идентификатор торгового предложения в складской системе. Объект PackageItem используется в методах: Callback POST {integrationModule["baseUrl"]}/{configuration["actions"]["calculate"]} (ссылка на метод) и Callback POST {integrationModule["baseUrl"]}/{configuration["actions"]["save"]} (ссылка на метод)

14.11.2017

В методе POST /api/v5/integration-modules/{code}/edit добавлен массив integrationModule[integrations][delivery][shipmentDataFieldList][] - список дополнительных полей, использующихся для создания заявки на отгрузку.

Добавлены callback-методы для работы с отгрузкой заказов в службу доставки:

  • POST {integrationModule["baseUrl"]}/{configuration["actions"]["shipmentSave"]} (ссылка на метод) создание/редактирование заявки на отгрузку
  • POST {integrationModule["baseUrl"]}/{configuration["actions"]["shipmentDelete"]} (ссылка на метод) удаление заявки на отгрузку

Для возможности работы с этими методами необходимо в методе POST /api/v5/integration-modules/{code}/edit в параметре integrationModule[integrations][delivery][actions][] передать пути для методов shipmentSave и shipmentDelete.

27.09.2017

В объекте Configuration в списке обязательных полей requiredFields есть возможно указать обязательным поле "Терминал отгрузки", для этого надо в список добавить значение integrationDeliveryData.shipmentpointName.

09.06.2017

В объект RequestSave запроса на оформление доставки добавлена передача ставок НДС: save[packages][][items][][vatRate] - ставка НДС для товара в заказе. save[delivery][vatRate] - ставка НДС на услугу доставки. Оба этих поля могут принимать значение none что означает что товар/услуга доставки не облагается НДС.

22.03.2017

В Configuration добавлено необязательное булево поле rateDeliveryCost (по умолчанию true). Значение false нужно для случая, если служба доставки не рассчитывает стоимость доставки и метод calculate возвращает только информацию о доступных тарифах. Также добавлена возможность не указывать путь для метода calculate (путь для метода save также не должен быть указан). В этом случае интеграция позволяет вручную вбивать номер отправления и производить синхронизацию статусов доставки.

В Configuration добавлен необязательный массив availableShipmentCountries - в нём задается список стран из которых доступна отправка. По умолчанию массив пустой, что означает, что ограничений на страны отправки нет.

При оформлении доставки до ПВЗ через метод save теперь, кроме кода ПВЗ, передается адрес доставки.

В ответе на запрос метода calculate добавлено поле extraDataAvailable - массив кодов полей из списка configuration["deliveryDataFieldList"], переданного в запросе конфигурации доставки. При выборе тарифа в карточке заказа, все поля, которых нет в массиве extraDataAvailable, будут скрыты.

01.03.2017

В Configuration добавлено необязательное текстовое поле description - может использоваться для передачи описания интеграции, в том числе для определения к какому аккаунту в службе доставки относится интеграция. Переданное значение выводится в настройках интеграции и в списке доступных интеграций в карточке типа доставки;

В Configuration добавлено необязательное поле deliveryConfigurationUrl - содержит url по которому пользователь может перейти на страницу настроек интеграции на стороне службы доставки;

В запросе на создание/редактирование конфигурации интеграции в объекте DeliveryDataField добавлено необязательное текстовое поле hint - в нем можно передать пояснение для пользователя как и когда использовать данное поле. Выводится в карточке заказа под соответствующем полем;

В объектах RequestCalculate и RequestSave добавлено поле currency содержащее код валюты;

В объекте RequestSave добавлено поле siteName (наименование магазина) и необязательное поле legalEntity (Наименование юридического лица продавца);

В запросе на оформление доставки в объекте PackageItem добавлено поле offerId - идентификатор оффера в системе

В ответ на запрос получения печатных форм службы доставки теперь можно отдавать zip архив, для этого заголовок ответа ContentType должен принимать значение application/zip.

Возможности интеграции

API системы позволяет:

  1. Производить расчет стоимости доставки по данным заказа по запросу пользователя системы
  2. Передавать пользователю системы актуальный для данного заказа набор терминалов
  3. Формировать различные упаковки в рамках одного заказа на доставку
  4. Формировать заказ на доставку, передавая в службу доставки необходимую информацию о заказе
  5. Редактировать и удалять заказ на доставку в определенных статусах по запросу пользователя системы
  6. Массово обновлять статусы для незавершенных заказов
  7. Передавать для печати документы по заказам из служб доставки по запросу пользователя
  8. Создавать, редактировать и удалять заявки на забор товара службой доставки

Работа с API производится в соответствии с правилами работы с API. Для интеграции используются API-методы секции Доставки и Интеграция.

Для интеграции необходимо:

  1. USER Запросить у пользователя API-ключ для доступа к системе
  2. API Зарегистрировать новый интеграционный модуль доставки
  3. USER Произвести необходимые настройки на странице настройки интеграции в системе
  4. USER Создать тип доставки связанный с новой интеграционной доставкой
  5. SYSTEM Запросы связанные с созданием и изменением заказов на доставку будет инициировать система в процессе работы пользователя
  6. API Отправлять актуальные данные по статусам доставок

Этапы с пометкой USER — это этапы, где данные предоставляются или заполняются пользователем. Этапы с пометкой API выполняются посредством API-запросов от службы доставки через API системы. Этап с пометкой SYSTEM подразумевает запросы осуществляемые системой к службе доставке с учетом настроек заданных при регистрации.

При возникновении ошибки при API-запросе к службе доставки, необходимо вернуть ответ (HTTP статус 200) в формате:

{
    "success": false,
    "errorMsg": "Текст ошибки" // Сообщение об ошибке. Будет отображаться пользователю в карточке заказа
}

Если в ответ на запрос расчета стоимости доставки или в ответ на запрос данных по заказу от сервера службы доставки был возвращен не валидный ответ, информация об этом запишется в Журнал действий, тип записи "Интеграционные доставки".

Для идентификации регионов, городов и улиц, помимо текстовых названий, передаются идентификаторы из сервиса Geohelper.

Регистрация и конфигурация службы доставки

Регистрация новой доставки, а также изменение настроек существующей производится с помощью метода POST /api/v5/integration-modules/{code}/edit. Если интеграционный модуль с кодом code уже существует, метод меняет его параметры, в противном случае создается новый модуль. При регистрации доставки передается уникальный код integrationModule[clientId], который будет позволять модулю идентифицировать аккаунт системы.

Параметры:

  • apiKey - API-ключ системы
  • integrationModule - json, содержащий описание интеграционного модуля
  • integrationModule[integrations][delivery] - настройки конфигурации интеграции со службой доставки

В поле integrationModule[integrations][delivery][actions] в виде ассоциативного массива ("Код метода": "Путь") задаются пути до конкретных методов. Список методов:

  • calculate - Метод расчета стоимости доставки
  • save - Метод создания/редактирования доставки
  • get - Метод получения данных доставки.
  • delete - Метод удаления/отмены доставки. Вызывается если был отменен заказ, или если был изменен тип доставки у заказа.
  • print - Метод печати документов.
  • shipmentPointList - Метод получения списка терминалов отгрузки.
  • shipmentSave - Метод создания/редактирования заявки на отгрузку.
  • shipmentDelete - Метод удаления заявки на отгрузку.

Некоторые методы не обязательны для реализации. Если они не требуются для интеграции их можно не передавать в массиве actions. Методы save, get, print, shipmentSave, shipmentDelete не обязательны к реализации. Если не передан метод save, то запросы на оформления доставки не отправляются. Если не передан метод shipmentDelete, то возможности редактирования и удаления заявки на отгрузку не будет. Метод delete не обязателен, если не используется метод save. Метод calculate не обязателен, если не используется метод save. В случае если не реализован метод calculate интеграция позволяет только вручную указывать номер отправления в карточке заказа и производить трекинг. Метод shipmentPointList не обязателен, если "selfShipmentAvailable": false. Не допускается передавать одинаковые значения для разных методов.

Следующие поля всегда являются обязательными для работы с доставкой:

  • shipmentStore - Склад отгрузки
  • weight - Вес
  • deliveryAddress.city - Город
  • deliveryAddress.building - Дом
  • payments - массив оплат

В поле integrationModule[integrations][delivery][requiredFields] передается массив полей, которые должны быть обязательными для заполнения для данной доставки. Возможные значения:

  • lastName - Фамилия покупателя
  • patronymic - Отчество покупателя
  • phone - Телефон покупателя
  • email - E-mail покупателя
  • length - Длина
  • width - Ширина
  • height - Высота
  • shipmentDate - Дата отгрузки
  • deliveryDate - Дата доставки
  • deliveryTime.from - Начало интервала времени доставки
  • deliveryTime.to - Окончание интервала времени доставки
  • manager - Менеджер заказа
  • deliveryAddress.regionId - При выборе региона обязать выбирать регион из выпадающего списка. В этом поле будет находиться идентификатор региона в сервисе geohelper (http://geohelper.info/ru/doc/api#get--api-v1-regions)
  • deliveryAddress.cityId - При выборе города обязать выбирать город из выпадающего списка. В этом поле будет находиться идентификатор города в сервисе geohelper (http://geohelper.info/ru/doc/api#get--api-v1-cities)
  • deliveryAddress.street - Наименование улицы доставки
  • deliveryAddress.streetId - При выборе улицы обязать выбирать улицу из выпадающего списка. В этом поле будет находиться идентификатор улицы в сервисе geohelper (http://geohelper.info/ru/doc/api#get--api-v1-streets)
  • deliveryAddress.flat - Квартира
  • deliveryAddress.index - Почтовый индекс
  • integrationDeliveryData.shipmentpointName - Терминал отгрузки

В поле integrationModule[integrations][delivery][payerType] можно указать массив возможных типов плательщиков за доставку. В случае доставки наложенным платежом в зависимости от типа плательщика возможны 2 варианта оплаты за доставку:

  1. Плательщик отправитель sender - в наложенный платеж входит стоимость доставки и стоимость товаров. Услуги доставки оплачиваются магазином.
  2. Плательщик получатель receiver - в наложенный платеж включается только стоимость товаров заказа. Стоимость доставки всегда равна 0. Подразумевается, что служба доставки должна будет взять с покупателя переданную сумму наложенного платежа в пользу магазина и отдельно стоимость доставки в свою пользу.

Параметр integrationModule[integrations][delivery][selfShipmentAvailable] позволяет активировать работу с терминалами отгрузки. Если передано значение true, в карточке заказа появится поле, где можно будет выбрать терминал отгрузки из списка, получаемого методом shipmentPointList. Также в настройках интеграции пользователь сможет задать терминалы отгрузки по умолчанию для каждого из своих складов. При расчете стоимости и оформлении доставки в качестве адреса отправки обычно отправляется адрес склада отгрузки, указанного в карточке заказа. В случае, когда для заказа выбран терминал отгрузки - в данных адреса отправки отправляется только код выбранного терминала отгрузки.

В случае успешной регистрации в ответе будет содержаться id (info[deliveryType][id]) и символьный код (info[deliveryType][code]) типа доставки, созданного при регистрации интеграционного модуля. При обновлении конфигурации модуля данные о типе доставки не возвращаются.

Пример ответа для версии API v5:

{
    "success": true,
    "info": {
        "deliveryType": {
            "id": 42,
            "code": "integration_delivery_type_code" 
        }
    }
}

Пример ответа для устаревших версий API (v4 и CRM версии v7):

{
    "code": "generic.delivery-service-code",
    "success": true
} 

Поддержка множества аккаунтов

Служба доставки должна предусмотреть возможность подключения нескольких аккаунтов клиента. Для этого необходимо перед отправкой запроса на регистрацию интеграционного модуля доставки использовать метод получения информации об интеграционном модуле. В случае, если интеграция уже зарегистрирована и clientId не совпадает с текущим, то нужно в параметр integrationModule[code] передать код службы доставки с постфиксом, обеспечивающим уникальность кода (integrationModule[integrationCode] при этом должен оставаться без изменений). В таком случае создается новый интеграционный модуль и у клиента будет возможность работать с любым количеством аккаунтов в службе доставки, которые будут представлены как различные типы доставки. Также рекомендуется в поле integrationModule[integrations][delivery][description] передавать описание, которое поможет различить пользователю несколько одинаковых интеграций с разными аккаунтами (например можно передавать несколько последних цифр номера договора или номера аккаунта пользователя "Номер договора - ***42").

Формирование дополнительных полей

Интеграция позволяет передавать в конфигурации произвольный набор полей. В поле integrationModule[integrations][delivery][deliveryDataFieldList] перечисляются поля, которые будут выводится в карточке заказа. Если editable=true - данные редактируемых полей будут передаваться при формировании доставки. Если параметр affectsCost=true, данные поля будут передаваться при расчете стоимости доставки. В поле integrationModule[integrations][delivery][shipmentDataFieldList] указан набор полей, использующихся при работе с отгрузкой. Формат элементов списка shipmentDataFieldList полностью идентичен формату элементов deliveryDataFieldList.

Не обязательное редактируемое текстовое поле:

{
    ...
    "deliveryDataFieldList": [
        {
            "code": "textField",
            "label": "Текстовое поле",
            "type": "text",
            "required": false,
            "affectsCost": false,
            "editable": true
        }
    ]
}

Информационное текстовое поле:

{
    ...
    "deliveryDataFieldList": [
        {
            "code": "textField",
            "label": "Размер страховки",
            "hint": "Использовать только при международной доставке",
            "type": "text",
            "required": false,
            "affectsCost": false,
            "editable": false
        }
    ]
}

Поле выводится в карточке заказа. Может быть заполнено при получении ответа на запрос формирования доставки или при обновлении статуса доставки.

Обязательное редактируемое числовое поле. Т.к. affectsCost=true - считается что поле влияет на стоимость доставки и значение поля отправляется в запросе на расчет стоимости доставки:

{
    ...
    "deliveryDataFieldList": [
        {
            "code": "integerField",
            "label": "Число мест",
            "type": "integer",
            "required": true,
            "affectsCost": true
        }
    ]
}

Чекбокс:

{
    ...
    "deliveryDataFieldList": [
        {
            "code": "checkboxField",
            "label": "Переключатель",
            "type": "checkbox",
            "required": false,
            "affectsCost": true
        }
    ]
}

Поле множественного выбора:

{
    ...
    "deliveryDataFieldList": [
        {
            "code": "services",
            "label": "Сервисы доставки",
            "type": "choice",
            "multiple": true,
            "choices": [
                {
                    "value": "ER3",
                    "label": "Осмотр"
                }
                {
                    "value": "RQW",
                    "label": "Доставка на выходных"
                }
            ],
            "affectsCost": true
        }
    ]
}

Поле с автокомплитом. Для его использования необходимо реализовать метод получения подсказок и передать url метода:

{
    ...
    "deliveryDataFieldList": [
        {
            "code": "types",
            "label": "Тип груза",
            "type": "autocomplete",
            "autocompleteUrl": "http://selivery.service.com/api/autocomplete/types"
        }
    ]
}

Поле с датой:

{
    ...
    "deliveryDataFieldList": [
        {
            "code": "dateSimple",
            "label": "Дата доставки",
            "type": "date"
        }
    ]
}

Настройки сконфигурированные модулем

Интеграция позволяет передавать в конфигурации набор настроек. В поле integrationModule[integrations][delivery][settings] перечисляются поля, которые сконфигурированы модулем. Рекомендуется давать возможность настраивать все параметры на стороне модуля и передавать в систему через это поле. Переданные настройки будут скрыты в настройках интеграции модуля в системе.

Настройки:

  • defaultPayerType - Плательщик за доставку по умолчанию
  • costCalculateBy - Стоимость доставки по умолчанию (Возможные значения auto|manual)
  • nullDeclaredValue - Нулевая объявленная стоимость по умолчанию
  • lockedByDefault - По умолчанию не синхронизировать со службой доставки
  • paymentTypes - Способы оплаты (Справочник объектов)
  • shipmentPoints - Склады (Справочник объектов)
  • statuses - Соответствие статусов (Справочник объектов)
  • deliveryExtraData - Дополнительные значения полей доставки по умолчанию
  • shipmentExtraData - Дополнительные значения полей отгрузки по умолчанию

Для autocomplete поля значение по умолчанию задается в виде объекта, содержащего поля label (значение, которое будет отображаться в интерфейсе системы) и value (значение, которое будет передаваться в модуль доставки).

Пример задания настроек:

{
    "defaultPayerType": "sender",
    "costCalculateBy": "auto",
    "nullDeclaredValue": true,
    "lockedByDefault": true,
    "paymentTypes": [
        {
            "code": "cash",
            "active": true,
            "cod": true
    }
    ],
    "shipmentPoints": [
        {
            "code": "online",
            "shipmentPointId": "1234",
            "shipmentPointLabel": "Test"
    }
    ],
    "statuses": [
        {   
            "code": "new",
            "trackingStatusCode": "new"
    }
    ],
    "deliveryExtraData": {
    "passport": "0000 000000",
    "types": {
        "label": "Мелкогабаритный груз",
        "value": "0x80d"
     }
 },
    "shipmentExtraData": {
        "count": "5"
    }
}

Получение конфигурации интеграции

Метод позволяет получить данные интеграционного модуля службы доставки GET /api/v5/integration-modules/{code}.

Расчет стоимости доставки

Для расчета стоимости доставки система инициирует POST вызов метода указанного в integrationModule[integrations][delivery][actions]["calculate"] конфигурации.

Для расчета тарифа задействованы следующие поля: Склад отгрузки, Вес, Город, Тип оплаты, а также пользовательские поля доставки, у которых передается параметр affectsCost=true.

Расчёт стоимости происходит при открытии попапа со списком способов доставки.

Если для каких-либо тарифов не хватает переданных данных, служба доставки может для тарифа не передавать параметр cost, а в параметре description передавать сообщение для пользователя. В этом случае тариф будет не доступен для выбора, но будет отображаться в списке тарифов. Если у службы доставки нет возможности рассчитывать стоимость доставки, при конфигурации интеграции можно передать параметр integrationModule[integrations][delivery][rateDeliveryCost] со значением false, в этом случае стоимость доставки cost передавать не нужно и стоимость определяется по правилам, заданным в типе доставке на стороне системы.

Создание и редактирование доставки

Для создания новой доставки система инициирует POST вызов метода указанного в integrationModule[integrations][delivery][actions]["save"]. Подробнее здесь. Запрос на редактирование доставки аналогичен запросу на создание, необходимо дополнительно передавать идентификатор заказа в службе доставки save["deliveryId"].

Создание новой доставки происходит в момент сохранения заказа, в котором выбран тип доставки, интегрированный с данной службой доставки. Редактирование доставки происходит при сохранении заказа, для которого уже была оформлена доставка и были произведены какие-либо изменения в заказе.

Если при регистрации интеграционного модуля был передан параметр integrationModule[integrations][delivery][codAvailable]=true то, в зависимости от выбранного в заказе типа оплаты, могут быть переданы данные о наложенном платеже. Флаг save[delivery][withCod] указывает нужно ли взимать наложенный платеж. Общая сумма наложенного платежа определяется как сумма по всем товарам в заказе save[packages][][items][][cod] (нужно учитывать что значение в этом поле - размер наложенного платежа за единицу товара), плюс величина платеж за услугу доставки save[delivery][cod].

Получение данных доставки

Для получения данных для доставки система инициирует GET запрос метода указанного в integrationModule[integrations][delivery][actions]["get"]. Подробнее здесь.

Метод срабатывает в момент, когда через API системы создается новый заказ, либо редактируется заказ и передан идентификатор оформленной доставки order[delivery][data][externalId].

Удаление заявки на доставку

Для удаления доставки система инициирует POST вызов метода указанного в integrationModule[integrations][delivery][actions]["delete"]. Подробнее здесь.

Удаление доставки происходит при нажатии на кнопку «Отменить доставку» в заказе или при изменении типа доставки по API или триггером.

Обновление статусов доставки

Для обновления статусов доставки служба доставки должна использовать метод POST /api/v5/delivery/generic/{subcode}/tracking (subcode - символьный код экземпляра модуля, указанный в методе POST /api/v5/integration-modules/{code}/edit в поле integrationModule[code]). Метод позволяет передавать статусы отдельно для каждого заказа в момент смены статуса или передавать историю изменений по группе заказов через определенные промежутки на усмотрение службы доставки.

Важно!

За один запрос можно обновить статусы не более чем для 100 заказов. При передаче большего числа заказов метод вернет сообщение об ошибке.

Печатные формы службы доставки

Для печати форм указанных при конфигурации в integrationModule[integrations][delivery][plateList] система инициирует POST запрос метода указанного в integrationModule[integrations][delivery][actions]["print"]. Подробнее здесь.

Запрос отправляется при печати документов службы доставки из карточки заказа, либо из списка заказов.

Служба доставки должна сформировать pdf-файл печатной формы и вернуть его в виде байтового массива. Также можно вернуть zip-архив документов, для этого content-type ответа должен принимать значение application/zip.

Если требует показать пользователю сообщение об ошибке, то нужно вернуть ответ с кодом 400. Содержимое ответа должно быть стандартным ответом с сообщением об ошибке.

Список терминалов приема посылок

Для работы с терминалами система инициирует GET запрос метода указанного в integrationModule[integrations][delivery][actions]["shipmentPointList"]. Подробнее здесь.

Запрос инициируется при выборе терминала отгрузки в карточке заказа.

Получение тарифа по умолчанию

Для указания тарифа по умолчанию в типе доставки система инициирует GET-запрос метода, указанного в integrationModule["integrations"]["delivery"]["actions"]["tariffList"]. Подробнее здесь.

В случае возникновения ошибки во внешнем ресурсе, к которому обращается callback-метод, данные по ошибке будут внесены в журнал действий (Администрирование → Настройки → Журнал действий).

Создание и редактирование заявки на забор товара

Для создания заявки на забор товара система инициирует POST запрос метода указанного в integrationModule[integrations][delivery][actions]["shipmentSave"]. Подробнее здесь.

Запрос отправляется при сохранении новой отгрузки, либо при сохранении уже созданной отгрузки. Если при регистрации модуля не бы передан путь до метода integrationModule[integrations][delivery][actions]["shipmentDelete"], то возможности редактирования и удаления заявки на отгрузку не будет.

Удаление заявки на забор товара

Для удаления заявки на забор товара система инициирует POST запрос метода указанного в integrationModule[integrations][delivery][actions]["shipmentDelete"]. Подробнее здесь.

Запрос отправляется при изменении статуса отгрузки на Отменена.

Запрос на получение данных для автокомплит поля

При работе с autocomplete полями задаными в конфигурации integrationModule[integrations][delivery][deliveryDataFieldList] система будет инициализировать запрос к службе доставки используя GET запрос метода указанного в autocompleteUrl конфигурации соответствующего поля.

Проверка работы интеграции

Перед отправкой модуля на публикацию необходимо проверить работоспособность модуля на своем аккаунте RetailCRM. Перед любой проверкой в карточке заказа нужно выбрать тип доставки, интегрированный с вашим модулем. Необходимо проверять как будет работать интеграция при введении корректных и при введении заведомо неверных данных (прошедшие даты даты отгрузки/доставки, нулевой вес и т.д.). При неверных данных модуль должен возвращаться ошибку, оформленную по правилам работы с API, содержащую сообщение с описанием проблемы, понятным пользователю (пример: дата доставки указана в прошлом, в таком случае модуль должен вернуть сообщение, которые бы указывало что именно "Дата доставки" указана не верно).

Проверка списка терминалов приема посылок

Необходима при условии integrationModule[integrations][delivery][selfShipmentAvailable] = true.

В карточке заказа выберите склад отгрузки, и проверьте что список терминалов приёма загружается без ошибок.

Проверка получения данных для автокомплит поля

Необходима, если в списке дополнительных полей integrationModule[integrations][delivery][deliveryDataFieldList] есть поля, у которых type="autocomplete".

В карточке заказа найдите это поле в блоке "Доставка", и проверьте что список значений подгружается в него без ошибок.

Проверка расчета стоимости доставки

Необходима, если был передан путь для метода calculate в integrationModule[integrations][delivery][actions][].

Проверять работу расчета стоимости нужно для следующих случаев:

  • минимально возможное заполнение заказа данными;
  • доставка наложенным платежом/без наложенного платежа (если integrationModule[integrations][delivery][codAvailable]=true);
  • упаковки не заданы/указано несколько упаковок с различными значениями габаритов (если integrationModule[integrations][delivery][allowPackages]=true);
  • объявленная стоимость по умолчанию/объявленная стоимость товаров была изменена;
  • для всех возможных типов плательщиков (integrationModule[integrations][delivery][payerType]).

Результатом работы для каждого случая должно быть либо понятное пользователю сообщение об ошибке в данных, либо список тарифов. При расчёте стоимости доставки все переданные параметры должны правильно учитываться, насколько это позволяет сервис доставки.

Проверка создания/редактирования заявки на доставку

Необходима, если был передан путь для метода save в integrationModule[integrations][delivery][actions][].

Для создания заявки на доставку - зайдите в карточку заказа, выберите интеграционный тип доставки, заполните данные заказа и сохраните. Для редактирования - зайдите в карточку заказа, для которого была оформлена заявка на доставку, сделайте изменения в данных заказа и сохраните.

При проверке создания/редактирования заявки на доставку нужно проверить следующие случаи:

  • минимально возможное заполнение заказа данными/заполнение всех полей заказа данными;
  • заполнение всех полей заказа и проверка что все данные получены без ошибок на стороне сервиса;
  • создание заявки с отгрузкой от склада отгрузки/от терминала отгрузки (если integrationModule[integrations][delivery][selfShipmentAvailable]=true);
  • доставка наложенным платежом/без наложенного платежа (если integrationModule[integrations][delivery][codAvailable]=true);
  • доставка "до двери"/до ПВЗ/терминала/отделения;
  • упаковки не заданы/указано несколько упаковок с различными значениями габаритов (если integrationModule[integrations][delivery][allowPackages]=true);
  • объявленная стоимость по умолчанию/объявленная стоимость товаров была изменена;
  • если есть возможность международной доставки - необходимо проверить оформление заявки на международную доставку.

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

Проверка печатных форм

Необходима, если был передан путь для метода print в integrationModule[integrations][delivery][actions][] и список доступных печатных форм integrationModule[integrations][delivery][plateList] не пуст.

Печать документов следует проверить из карточки заказа и из списка заказов для нескольких заказов (если integrationModule[integrations][delivery][platePrintLimit] > 1) для всех типов документов.

Проверка удаления заявки на доставку

Необходима, если был передан путь для метода delete в integrationModule[integrations][delivery][actions][].

Проверять удаление лучше всего через изменение статуса заказа, для которого была оформлена доставка, на статус из группы Отменен.

Проверка получения данных доставки

Необходима, если был передан путь для метода get в integrationModule[integrations][delivery][actions][].

Для этой проверки в вашем сервисе должна быть созданная заявка на доставку с известным номером. Отправьте запрос на создание заказа в системе через API и в запросе передайте номер отправления (order[delivery][data][externalId]). В результате в системе должен быть создан заказ с оформленной заявкой на доставку, в который подгружены все необходимые данные по доставке из вашего сервиса.

Пример самого простого запроса на создание заказа:

{
    "lastName": "test",
    "delivery": {
        "code": "<delivery_type_code>",
        "data": {
            "externalId": "<delivery_external_id>"
        }
    }
}

Проверка создания/редактирования заявки на забор товара

Необходима, если был передан путь для метода shipmentSave в integrationModule[integrations][delivery][actions][].

Нужно проверить следующие случаи:

  • минимально возможное заполнение данными/заполнение всех полей заявки данными;
  • заполнение полей заведомо неверными данными;
  • редактирование созданной заявки (если такая возможность есть).

Проверка удаления заявки на забор товара

Необходима, если был передан путь для метода shipmentDelete в integrationModule[integrations][delivery][actions][].

Для удаление заявки на отгрузку - поменяйте статус заявки на Отменена.

Начало работы

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

После создания появится уведомление, в котором говорится об успешном создании типа доставки:
Создан тип «%название доставки%» в разделе Типы доставок

При создании, в поле «Название», подставится название подключаемого модуля. В символьный код подставится транслит названия.

Созданный автоматически справочник типа доставки используется в заказе для взаимодействия с службой доставки. В случае, если необходимости в типе доставки более нет - его достаточно деактивировать по пути Настройки > Справочники > Типы доставок.

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

Благодарим за отзыв.
Была ли статья полезна?
Нет
  • Рекомендации не помогли
  • Нет ответа на мой вопрос
  • Текст трудно понять
  • Не нравится описанный функционал
Да
Предыдущая статья
Данные о доставке в API
Расскажем о структуре данных доставки в API, а также подробнее рассмотрим работу методов взаимодействия с интеграционными доставками.
Следующая статья
Работа с API-методами истории
В данной статье разобраны общие принципы работы с API-методами истории и представлены описания полей, которые могут быть получены в результате.