Разработчикам


Расчет стоимости

Расчитать стоимость услуг перевозки при заказе их через сервис ship2go можно используя метод price.

https://api.ship2go.ru/price?{параметры}
Входные параметры для метода price:
Параметр Режим Описание
city_from * обязательный Почтовый индекс города отправления
city_to * обязательный Почтовый индекс города назначения
box * обязательный, необходима хотя бы одна коробка Коробка в формате {вес},{ширина},{высота},{длина}. Также возможен формат {вес},{объем} - в этом случае при передаче параметров в ТК в качестве груза будет выступать куб данного объема (с ребром = корню третьей степени из объема). Каждое из этих измерений должно быть представлено либо в виде целого числа, либо в виде десятичной дроби с точкой (например, 1.5). В запросе может присутствовать несколько таких параметров, по числу отправляемых коробок. В запросе должна быть хотя бы одна коробка.
filter необязательный, множественный По умолчанию результат состоит из всех возможных вариантов транспортировки. Фильтры позволяют получить, например, только варианты с забором груза и доставкой до адреса.
company_id необязательный, по умолчанию все компании Если указан этот параметр, то расчет стоимости будет производиться только для этой компании. В запросе может присутствовать несколько таких параметров, тогда мы будем искать несколько компаний.
polling необязательный, по умолчанию off Включить режим полинга: on - включить, off - выключить.
data_id только для получения данных в режиме полинга Идентификатор для получения данных в режиме полинга. Для получения данных достаточно передать только этот параметр.

Запрос действует по принципу отсечения, т.е. мы с помощью фильтров отсекаем, то что не нужно. Возможные значения фильтров:

  • WITHOUT_TERMINAL_DELIVERY - исключаем из ответа доставку в терминал
  • WITHOUT_ADDRESS_DELIVERY - исключаем из ответа доставку в адрес
  • WITHOUT_TERMINAL_PICKUP - исключаем из ответа забор груза в терминале (т.е. исключаем ситуацию, когда отправитель сам везет на терминал посылку и оформляет её там)
  • WITHOUT_ADDRESS_PICKUP - исключаем из ответа забор из адреса
  • EXACT_MATCH_DELIVERY_CITY - город доставки точно совпадает с тем, что мы ищем (как будет видно ниже, в случае терминальной доставки, человеку может быть предложено забрать груз из терминала в ближайшем крупном городе)
  • EXACT_MATCH_PICKUP_CITY - город забора должен совпадать с тем, что мы ищем (аналогично, для терминального забора)

Для примера, ответ на запрос (Москва—Дивногорск, заметьте, что в результате терминал доставки — это терминал в Красноярске (!) для ПЭК и Деловых линий — алгоритм ищет ближайщий терминал доставки, если в городе доставки его нет):

https://api.ship2go.ru/price?city_from=101000&city_to=663090&box=12,1,1,1&filter=WITHOUT_TERMINAL_PICKUP
будет иметь следующий вид:

{
    "status": {
        "message": "OK",
        "code": 200
    },
    "result": [
        {
            "subdivision": null,
            "price": 4980,
            "delivery": false,
            "pickup": true,
            "from_terminals": [],
            "to_terminals": [
                {
                    "city": {
                        "region": "RU-KYA",
                        "id": 17906,
                        "district": "",
                        "name": "Красноярск"
                    },
                    "code": "47",
                    "id": 823,
                    "address": "Красноярск г, Северное ш, дом № 17",
                    "name": "Красноярск"
                }
            ],
            "min_delivery_days": null,
            "max_delivery_days": null,
            "company": {
                "name": "Деловые линии",
                "id": 1
            }
        },
        {
            "subdivision": null,
            "price": 6850,
            "delivery": true,
            "pickup": true,
            "from_terminals": [],
            "to_terminals": [],
            "min_delivery_days": null,
            "max_delivery_days": null,
            "company": {
                "name": "Деловые линии",
                "id": 1
            }
        },
        {
            "subdivision": "DPD ECONOMY",
            "price": 16997.9,
            "delivery": true,
            "pickup": true,
            "from_terminals": [],
            "to_terminals": [],
            "min_delivery_days": 7,
            "max_delivery_days": 7,
            "company": {
                "name": "DPD",
                "id": 9
            }
        },
        {
            "subdivision": "Автоперевозка",
            "price": 5122.5,
            "delivery": true,
            "pickup": true,
            "from_terminals": [],
            "to_terminals": [],
            "min_delivery_days": 8,
            "max_delivery_days": 8,
            "company": {
                "name": "ПЭК",
                "id": 2
            }
        },
        {
            "subdivision": "Авиаперевозка",
            "price": 18910,
            "delivery": true,
            "pickup": true,
            "from_terminals": [],
            "to_terminals": [],
            "min_delivery_days": null,
            "max_delivery_days": null,
            "company": {
                "name": "ПЭК",
                "id": 2
            }
        },
        {
            "subdivision": "Автоперевозка",
            "price": 4072.5,
            "delivery": false,
            "pickup": true,
            "from_terminals": [],
            "to_terminals": [
                {
                    "city": {
                        "region": "RU-KYA",
                        "id": 17906,
                        "district": "",
                        "name": "Красноярск"
                    },
                    "code": "Красноярск",
                    "id": 24,
                    "address": "Красноярский край, г. Красноярск, Северное шоссе, д. 5Г",
                    "name": "Красноярск"
                }
            ],
            "min_delivery_days": 8,
            "max_delivery_days": 8,
            "company": {
                "name": "ПЭК",
                "id": 2
            }
        },
        {
            "subdivision": "Авиаперевозка",
            "price": 17860,
            "delivery": false,
            "pickup": true,
            "from_terminals": [],
            "to_terminals": [
                {
                    "city": {
                        "region": "RU-KYA",
                        "id": 17906,
                        "district": "",
                        "name": "Красноярск"
                    },
                    "code": "Красноярск",
                    "id": 24,
                    "address": "Красноярский край, г. Красноярск, Северное шоссе, д. 5Г",
                    "name": "Красноярск"
                }
            ],
            "min_delivery_days": null,
            "max_delivery_days": null,
            "company": {
                "name": "ПЭК",
                "id": 2
            }
        }
    ]
}

Разберем одну запись из результата.

  • subdivision - сервис транспортной компании, которым она будет доставлять груз
  • price - полная стоимость доставки
  • delivery - требуется ли доставка по городу
  • pickup - требуется ли забор груза со склада отправителя
  • from_terminals - список терминалов для отправки груза (выдается, только если pickup = false)
    • city - город, в котором располагается терминал забора груза
      • region - регион
      • id - идентификатор города в системе ship2go
      • district - район
      • name - название города
    • code - код терминала в системе транспортной компании
    • id - идентификатор терминала в системе ship2go
    • address - адрес терминала
    • name - название терминала
  • to_terminals - список терминалов, в которых можно забрать груз; структура аналогична from_terminals; выдается, если delivery = false
  • min_delivery_days(null или число) - минимальное кол-во дней на доставку груза
  • max_delivery_days(null или число) - максимальное кол-во дней на доставку груза
  • company - транспортная компания, которой будем доставлять груз.
    • id - идентивикатор ТК
    • name - название ТК

Если режим полинга включен, то ответ будет следующего вида:

{
    "status": {
        "message": "OK",
        "code": 200
    },
    "data_id": "15731cef8be3cc47f7941351b8115c6d"
}
Для того чтобы получить данные мы должны отправить запрос (заметьте, необходимо использовать идентификатор полученный нами при первом запросе.):
https://api.ship2go.ru/price?data_id=35e628ea2bf29a44d50edfaf307f15d8
В итоге мы получим ответ близкий к тому, что мы рассмотрели выше:
{
    "status": {
        "message": "OK",
        "code": 200
    },
    "polling_status": "finish",
    "result": [
        {
            "subdivision": null,
            "price": 4980,
            "delivery": false,
            "pickup": true,
            "from_terminals": [],
            "to_terminals": [
                {
                    "city": {
                        "region": "RU-KYA",
                        "id": 17906,
                        "district": "",
                        "name": "Красноярск"
                    },
                    "code": "47",
                    "id": 823,
                    "name": "Красноярск",
                    "address": "Красноярск г, Северное ш, дом № 17"
                }
            ],
            "max_delivery_days": null,
            "company": {
                "name": "Деловые линии",
                "id": 1
            },
            "min_delivery_days": null
        },
        // ... еще результат
    ]
}
Флаг polling_status может принимать два значения: processing - данные еще не закончились, и, чтобы получить их, необходимо сделать еще запрос; finish - данные закончились.
Протестировать данный метод можно на вкладке Демонстрация расчета стоимости.