6. Покупательские возвраты


Заказ — покупка, которую совершил покупатель в Мегамаркете.

Лот — товарная единица, которая входит в заказ.

Сумма возврата — сумма, которую вернули продавцу за лот при возврате.


О полученных возвратах продавец должен оповещать Мегамаркет самостоятельно. Это зафиксировано в Приложении 3, пункте 1.5.15. к Единой оферте. Без уведомления мы не сможем корректно рассчитать выплаты по бонусным программам.

Оповещать нужно не позднее чем до конца следующего дня после получения товара продавцом. Оповещать Мегамаркет о возвратах вы можете с помощью API-метода order/return.  

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

Как авторизоваться и начать работу в сервисе Мегамаркета

Для обращения к сервису Мегамаркета нужен авторизационный токен. Его можно получить в личном кабинете, в разделе Настройки Интеграция API Авторизационный токен.


Для тестовой и продуктовой среды нужно использовать разные токены.


Ограничение на отправку запросов — до 5 запросов в секунду для одного продавца.

Заголовок (header) запросов для работы с партнёрским API: 

-header 'Content-Type: application/json'

Запросы с User-agent типа 'User-Agent': 'python-requests/2.26.0' система воспринимает как автоматические, поэтому блокирует.

Описание метода order/return


Запрос выполняется от продавца к Мегамаркету.


Тип средыАдрес метода для продуктовой и тестовой среды
order/return
(тестовая среда)
https://api-test.megamarket.tech/api/market/v1/orderService/order/return
order/return
(продуктовая среда)
https://api.megamarket.tech/api/market/v1/orderService/order/return


Запрос order/return
{
  "meta": {},
  "data": {
     "token": "********-****-****-****-************",
     "shipments": [
      {
        "shipmentId": "8866897345678",
        "returnReason": "string",
        "items": [
          {
            "itemIndex": "1",
            "refundedAmount": 690
          },
          {
            "itemIndex": "2",
            "refundedAmount": 830
          }
        ],
        "outletId": "09ST"
      }
    ]
  }
}


Структура данных в теле запросаОписаниеОбязательностьТип данных

1. meta

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

Да

Object

2. data

Общий блок с данными

Да

Object

2.1. token

Уникальный ключ для аутентификации продавца

Да

String

2.2. shipments

Данные об отправлениях

Да

Array

2.2.1. shipmentId

Идентификатор отправления Мегамаркета

Да

String

2.2.2. returnReason

Причина возврата:

1. «incompleted» — неполная комплектация товаров в заказе; 

2. «incorrected» — товар не соответствует заказанному;

3. «defected» — неисправный товар (брак);

4. «damaged» — товар повреждён;

5. «expired» — у товара истёк срок годности;

6. «used» — есть признаки, что товар был использован; 

7. «not_suitable» — товар не подошёл или покупатель передумал

Да

String

2.2.3. items 

Данные о лотах

Да

Array

2.2.3.1. itemindex 

Порядковый номер лота. Приходит в order/new при создании заказа

Да

String 

2.2.3.2. refundedAmount

Это объём денежных средств, который продавец вернул покупателю.  Значение refundedAmount должно быть равно окончательной цене лота (finalPrice) из ответа метода order/get или order/new

Да

Float (два знака после точки, если есть копейки)

2.2.4. outletId

Место, куда вернули товар 

Нет

String


Пример успешного ответа
{
  "data": {},
  "meta": {},
  "success": 1
}


Метод возвращает ошибку, если:

  • вызов метода повторяется с теми же данными;
  • идентификатор отправления (shipmentId) не существует или не принадлежит указанному идентификатору продавца (merchantId); 
  • у лота, указанного в запросе, нет статуса «Доставлен» (DELIVERED). Чтобы проверить статус заказа, воспользуйтесь методом order/get;
  • сумма возврата не совпадает с суммой лота после применения скидок (finalPrice).


Некорректная причина в returnReason
{
"meta": {},
"success": 0,
"error": {
"message": "внутренняя ошибка: [Невалидное значение в поле 'returnReason', возможно одно из следующих значений: incompleted incorrected defected damaged expired used not_suitable]",
"code": 2
}
}

Передаётся shipmentId, который принадлежит другому продавцу
{
"meta": {},
"success": 0,
"error": {
"message": "внутренняя ошибка: [Отправление 886689734 принадлежит другому продавцу]",
"code": 2
}
}

Передаётся shipmentId, которого не существует
{
"meta": {},
"success": 0,
"error": {
"message": "внутренняя ошибка: [Не удалось найти указанные отправления: [12345]]",
"code": 2
}
}

У лота нет статуса «Доставлен» (DELIVERED)
{
"meta": {},
"success": 0,
"error": {
"message": "внутренняя ошибка: [Статус лота с индексом 1 из отправления 8150497020034 не соответствует ожидаемому]",
"code": 2
}
}

Передаётся несуществующий лот (itemindex)
{
"meta": {},
"success": 0,
"error": {
"message": "внутренняя ошибка: [Для отправления 8150497020034 не найден лот с индексом 3]",
"code": 2
}
}

Дублирование заявки
{
"meta": {},
"success": 0,
"error": {
"message": "внутренняя ошибка: [Найдены уже существующие заявки на возврат для отправления 8516212828467 лот с индексом 46466662241]",
"code": 2
}
}

Передаётся некорректная сумма в refundedAmount
{
"meta": {},
"success": 0,
"error": {
"message": "внутренняя ошибка: [Для лота с индексом 1 из отправления 8150706857590 указана цена возврата 690, но ожидалась цена 299.00]",
"code": 2
}
}

Ответы на вопросы

Взимается ли комиссия за возврат

Нет, дополнительных комиссий за возврат Мегамаркет не берёт. 

Что будет, если передать не то значение в refundedAmount 

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

Зачем передавать refundedAmount, если Мегамаркет знает, какое значение продавец должен передать 

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

Для чего нужно сообщать место, куда вернули товар 

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

После отправки запроса возвращается ошибка

Проверьте, что: 

  • у лота заказа есть статус «Доставлен» (DELIVERED),
  • введён корректный номер отправления (shipmentId),
  • не сообщали ли вы раньше о заказе и лоте,
  • указана верная стоимость лота (refundedAmount).

Если всё верно, обратитесь в Службу поддержки.

Как понять, какую сумму указать в refundedAmount

Точная сумма указана в чеке. Также вы можете вызвать API-метод order/get или получить данные из запроса метода order/new — в поле finalPrice будет указана цена лота.