Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

« Предыдущий Версия 3 Следующий »

Интеграция с сервисом «Яндекс.Еда».

В сервер обмена данными добавлен новый формат обмена данных «Яндекс.Еда». Новый формат обмена применим только для адресата типа «Доверительная база». Адресат с таким форматом обмена может быть только один в базе данных. Предполагается, что «Яндекс.Еда» обслуживает заказы всех магазинов базы данных по одному каналу обмена.

Бизнес-процесс, который обслуживает новый протокол обмена, подразумевает, что «Яндекс.Еда» получает от торговой организации перечень мест хранения, для которых покупатели смогут создавать заказы, получает список товаров с их атрибутами, ценами, остатками, изображениями и передает заказы от клиентов.

При работе по протоколу «Яндекс.Еда» сервер обмена данными выступает только в качестве службы. «Яндекс.Еда» выступает в роли клиента и получает или сохраняет информацию по собственной инициативе. В частности, запрос артикулов «Яндекс.Еда» предполагает производить по собственному расписанию.

Для включения формата обмена в работу в базе данных должна быть лицензия на функциональную роль «Сервер обмена данными (API): Яндекс.Еда». Назначать право на работу с функцией какой-либо должности не требуется.

При обмене информацией с клиентом используется протокол авторизации OAuth2. Настройка работы протокола включает задание и передачу клиенту атрибутов «Client ID» и «Client secret». «Client ID» необходимо ввести вручную. Этот атрибут не является секретным. «Client secret» генерируется системой и его необходимо сохранить и передать абоненту конфиденциальным образом. Атрибут показывается один раз в момент генерации и более в интерфейсе не доступен:

Если атрибут потерялся, его необходимо создать заново и передать его значение абоненту.

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

В элементе «Товары» необходимо указать группу классификатора категорий товаров, выбранную для привязки доступных для сервиса товаров. В ответах на запросы сервиса будут задействованы только те товары, у которых есть  привязка к выбранному узлу классификатора категорий.

Флажок «Передавать старую цену» («Не передавать маркетинговую цену») управляет правилом передачи цены. Если флаг не установлен, то передается текущая цена для кассы, какая бы она не была – регулярная или маркетинговая. Если флаг установлен, то в случае, если текущая цена артикула является маркетинговой, будет передана его ближайшая цена из истории цен, превышающая текущую цену.

Опция "Цена для кассы", "Цена для интернет магазина" - Виды цен для кассы и для интернет-магазина настраиваются в разделе «Склады и магазины» на закладке «Цены»:

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


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

Переключатель «Формируется автоматически, используя изображение из карточки товара» означает, что хэш-код будет формироваться в Торговой Системе. Переключатель «указывается вручную в карточке товара на изображение на стороннем ресурсе» означает, что скачивание изображения и его анализ будет проводиться третьей стороной.


При начале работы «Яндекс.Еда» выполняет запрос «Аутентификация в системе» по адресу /security/oauth/token, в котором передается client_id и client_secret.

POST /security/oauth/token

После проверки client_id и client_secret  в теле сообщения ответа возвращается токен доступа

  "access_token": "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

}

или, при ошибке сравнения,

[

  {

    "code": 100,

    "description": "Description of error"

  }

]


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

Далее во всех остальных запросах к сайту сервера обмена данными в заголовке («header») каждого запроса (кроме запроса "Аутентификация в системе") в параметре HTTPS Authorization "Bearer" должен быть передан токен доступа ("ABCDEFGHIJKLMNOPQRSTUVWXYZ"). При отсутствии токена или истечении его срока годности выдается ошибка авторизации 401 «Не пройдена авторизация - истек токен, либо не был передан в запросе»:

"reason": "Access token has been expired. You should request a new one"

}


Поскольку «ЯндексЕда» не поддерживает запрос «refresh token», то при получении от сервера обмена данными ошибки, адресат должен повторно вызвать запрос "Аутентификация в системе".

Перечень команд.

GET /restaurants           - Список мест хранения. Запрос "Выдача списка заведений партнера"

Ответ - список магазинов:

{

  "places": [

    {

      "id": "123",

      "title": "Петровский",

      "address": "City, str. Street, 1"

    }

  ]

}


где id - это код места хранения в Торговой Системе. Все места хранения Торговой Системы должны общаться с «Яндекс.Еда» через один сайт сервера обмена данными.

Другие команды:

GET /nomenclature/{placeId}/composition         - Актуальная номенклатура продуктов

Возвращается структура каталогов с вложенными артикулами. В информации об артикуле вместо картинки передается хэш-код и URL-адрес доступа к ней.

GET /nomenclature/{placeId}/availability            - Список товаров с указанием их остатков


Остатки:

Перечисленным товарам обновляются остатки. В зависимости от значения остатков также обновляется и доступность продукта. Если остаток <= 0, продукт становится недоступным для заказа, если > 0 - доступным для заказа. Отсутствующие в списке продукты будут недоступными для заказа.

При выгрузке информации по запросу «Список продуктов с указанием их остатков» оперативно доступные остатки артикула + «В приемке / в пути» для указанного места хранения берутся либо из таблицы текущих остатков, либо из таблицы статистики остатков. Объект «Статистика по текущим остаткам» содержит данные об остатках мест хранения, обслуживаемых в других базах данных. Эта информация приходит в базу данных по почте. Товар, который принят, но не прошел полный цикл оформления приходных документов, не будет исключаться из количества, доступного для заказа товара.

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


Команды Яндекс ЕдаОписание
POST /order Создание заказа
GET /order/{orderId}   Выдача актуальной информации о заказе
DELETE /order/{orderId}Отмена заказа
PUT /order/{orderId}Обновление заказа
PUT /order/{orderId}/status 

Обновление статуса заказа в системе партнера по инициативе Яндекс Еды. 

При получении такой команды со значением статуса  «CANCELLED» соответствующий заказ от клиента блокируется с указанием причины завершения «Отменен».

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

GET /order/{orderId}/statusВыдача актуального статуса заказа


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


  • Нет меток