Интеграция по API с ТК СДЭК
Всем привет!
Начинаем писать серию статей по интеграции с разными ТК (транспортными кампаниями) через API.
Такая интеграция может пригодиться например интернет-магазинам, маркет плейсам и т.д.
У вас может возникнуть вопрос - почему бы нам не зайти на сайт документации и не посмотреть там? Мы вам ответим, что документации бывают сложные и объемные для понимания. Здесь же вы найдете конкретные, простые шаги для интеграции с ТК СДЭК.
Мы не будем здесь дублировать API документацию, а лишь структурируем информацию в ней для более простого восприятия.
Сегодня поговорим об интеграции ТК СДЭК, а именно:
- получение списка ПВЗ
- расчет стоимости перевозки
- создание заказа на перевозку
- получение информации о заказе
- удаление заказа
Ссылка на API документацию СДЭК тут
Подготовка
API интеграция с ТК СДЭК работает в 2х режимах:
- Боевой - подпишите договор и получите client_id и client_secret для доступа к интеграции. Используйте хост
https://api.cdek.ru
- Тестовый - для доступа используйте:
- хост -
https://api.edu.cdek.ru
- client_id - wqGwiQx0gg8mLtiEKsUinjVSICCjtTEP
- client_secret - RmAmgvSgSl1yirlz9QupbzOJVqhCxcP5
- хост -
Авторизация
Любая интеграция начинается с авторизации.
В API ТК СДЭК авторизация реализована с применением OAuth 2.0 протокола.
На адрес /v2/oauth/token
необходимо отправить POST
запрос с query параметрами:
grant_type - Тип аутентификации. Доступное значение: client_credentials
client_id - Идентификатор клиента
client_secret - Секретный ключ клиента
JSON ответ:
{
"access_token": "string", // JWT-токен
"token_type": "string", // Тип токена. Всегда принимает значение bearer
"expires_in": 0, // Срок действия токена (по умолчанию 3600 секунд)
"scope": "string", // Область действия токена
"jti": "string" // Уникальный идентификатор токена
}
Берем JWT токен и вставляем его в header всех запросов:
Authorization: Bearer <Токен>
Получение списка ПВЗ
Для получения списка всех ПВЗ ТК СДЭК необходимо отправить GET
запрос на адрес /v2/deliverypoints
с необязательными query параметрами. С помощью параметров можно отфильтровать ПВЗ по типу, городу и другим критериям.
В ответе вы получите массив объектов ПВЗ с указанием кода, города, страны, режима работы и других параметров (см документацию).
Расчет стоимости перевозки
Данный этап является важным в интеграции так как предоставляет расчет стоимости по доступным тарифам и срокам доставки.
Для того что бы рассчитать стоимость доставки необходимо отправить POST
запрос на адрес /v2/calculator/tarifflist
c JSON параметрами.
Пройдемся по важным параметрам расчета стоимости подробнее:
- type - тип заказа. 1 - интернет-магазин с особыми тарифами по договору с ИМ. 2 - доставка со стандартными тарифами и договором. По-умолчанию 1.
- from_location - населенный пункт откуда будет отправление. Обязательный параметр. Это объект в котором достаточно указать code.
- to_location - населенный пункт куда будет отправление. Обязательный параметр. Это объект в котором достаточно указать code.
- packages - места / упаковки в заказе. Обязательный параметр. Это массив упаковок с весом и габаритами. Достаточно указать weight.
Все параметры можно найти в документации
В ответе вы получите массив тарифов с ценами и продолжительностью доставки.
Сделаем запрос на расчет стоимости доставки:
curl --location 'https://api.edu.cdek.ru/v2/calculator/tarifflist' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzY29wZSI6WyJsb2NhdGlvbjphbGwiLCJvcmRlcjphbGwiLCJwYXltZW50OmFsbCJdLCJleHAiOjE3NDI3NDI0MjUsImF1dGhvcml0aWVzIjpbInNoYXJkLWlkOnJ1LTAxIiwiY2xpZW50LWNpdHk60J3QvtCy0L7RgdC40LHQuNGA0YHQuiwg0J3QvtCy0L7RgdC40LHQuNGA0YHQutCw0Y8g0L7QsdC70LDRgdGC0YwiLCJhY2NvdW50LWxhbmc6cnVzIiwiY29udHJhY3Q60JjQnC3QoNCkLdCT0JvQky0yMiIsImFwaS12ZXJzaW9uOjEuMSIsImFjY291bnQtdXVpZDplOTI1YmQwZi0wNWE2LTRjNTYtYjczNy00Yjk5YzE0ZjY2OWEiLCJjbGllbnQtaWQtZWM1OmVkNzVlY2Y0LTMwZWQtNDE1My1hZmU5LWViODBiYjUxMmYyMiIsImNvbnRyYWN0LWlkOmRlNDJjYjcxLTZjOGMtNGNmNS04MjIyLWNmYjY2MDQ0ZThkZiIsImNsaWVudC1pZC1lYzQ6MTQzNDgyMzEiLCJzb2xpZC1hZGRyZXNzOmZhbHNlIiwiY29udHJhZ2VudC11dWlkOmVkNzVlY2Y0LTMwZWQtNDE1My1hZmU5LWViODBiYjUxMmYyMiIsImZ1bGwtbmFtZTrQotC10YHRgtC40YDQvtCy0LDQvdC40LUg0JjQvdGC0LXQs9GA0LDRhtC40Lgg0JjQnCJdLCJqdGkiOiJvQUVJMS1xLWlMQ3RZZzgxNk9fdHNOWkNNdUkiLCJjbGllbnRfaWQiOiJ3cUd3aVF4MGdnOG1MdGlFS3NVaW5qVlNJQ0NqdFRFUCJ9.hyp3aF2Z7HSqUHQDhPWaZ0l7wbAy5vMOZ4Xm0nmUmgU0T8_oKWy2C92OeWlb0j8dJfeMcycGpxohOTFAoqTfADY5QWEa5QSInp0kklLcZlX5PehIV0RQRbRpa3brYmv9ZGeerefmCPm5qiPrK7cQwU0ujGxLStfU5HvwVUq0KBcrr1vLU283riZ1Kf_U2tAPUK3Y7WIerGcaiVGKpJEfD5ij3cvDW4m0drU9Glb0_5P4FZfbHOSUO0cZfVsLaqoanjegHZGuU3X1RXJP32zgatm8uaodcoTg6dtDnetJXSzz6ikTEIpJEEwloDcF-1KZHmO77fUSzjUEZGPnl26ybA' \
--data '{
"type": 2,
"from_location": {
"code": 44
},
"to_location" : {
"code": 278
},
"packages": [
{
"weight" : 1000
}
]
}'
И получим ответ:
{
"tariff_codes": [
{
"tariff_code": 751,
"tariff_name": "Сборный груз склад-склад",
"tariff_description": "Наземная доставка сборных горузов",
"delivery_mode": 4,
"delivery_sum": 6600.0, // Стоимость доставки
"period_min": 8, // Минимальное время доставки (в рабочих днях)
"period_max": 12, // Максимальное время доставки (в рабочих днях)
"calendar_min": 8, // Минимальное время доставки (в календарных дня)
"calendar_max": 12 // Максимальное время доставки (в календарных дня)
},
{
"tariff_code": 139,
"tariff_name": "Посылка дверь-дверь",
"tariff_description": "",
"delivery_mode": 1,
"delivery_sum": 870.0,
"period_min": 8,
"period_max": 12,
"calendar_min": 8,
"calendar_max": 12
},
{
"tariff_code": 138,
"tariff_name": "Посылка дверь-склад",
"tariff_description": "",
"delivery_mode": 2,
"delivery_sum": 730.0,
"period_min": 8,
"period_max": 12,
"calendar_min": 8,
"calendar_max": 12
}
]
}
Как видите в ТК СДЭК для расчета стоимости не нужно указывать ПВЗ или адрес квартиры, а достаточно указать населенный пункт и в ответе получить цены на разные тарифы такие как "склад - склад", "склад - дверь" и т.д.
Создание заказа на перевозку
После успешного расчета стоимости доставки можем переходить к созданию заказа на доставку.
Для создания заказа необходимо отправить POST
запрос на адрес /v2/orders
c JSON параметрами.
Пройдемся по важным параметрам создания заказа подробнее:
- type - тип заказа. 1 - интернет-магазин с особыми тарифами по договору с ИМ. 2 - доставка со стандартными тарифами и договором. По-умолчанию 1.
- tariff_code - код тарифа. Обязательное поле (получается из расчета стоимости)
- from location - адрес отправления. Обязательное поле, если заказ с тарифом "от двери". Это объект в котором достаточно указать address.
- to_location - адрес получения. Обязательное поле, если заказ с тарифом "до двери". Это объект в котором достаточно указать address.
- shipment_point - код ПВЗ СДЭК, на который будет производиться самостоятельный привоз клиентом. Обязательное поле, если заказ с тарифом "от склада".
- delivery_point - код ПВЗ СДЭК, на который будет доставлена посылка. Обязательное поле, если заказ с тарифом "до склада" или "до постамата".
- sender - отправитель. Обязательное поле, если заказ типа "доставка", не обязательное. если тип заказ "интернет-заказ". Это объект, в котором достаточно указать name, phones (поле number в массиве номеров телефона) и company.
- recipient - получатель. Обязательное поле. Это объект, в котором достаточно указать name и phones (поле number в массиве номеров телефона).
- packages - места / упаковки в заказе. Обязательный параметр. Это массив упаковок с весом и габаритами. Достаточно указать number (порядковый номер упаковки), weight и comment.
Все параметры для создания заказа можно найти в документации
В ответе вы получите uuid, по которому можно получить информацию и удалить заказ.
Сделаем запрос на создание заказа "дверь-склад":
curl --location 'https://api.edu.cdek.ru/v2/orders' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzY29wZSI6WyJsb2NhdGlvbjphbGwiLCJvcmRlcjphbGwiLCJwYXltZW50OmFsbCJdLCJleHAiOjE3NDI3NDI0MjUsImF1dGhvcml0aWVzIjpbInNoYXJkLWlkOnJ1LTAxIiwiY2xpZW50LWNpdHk60J3QvtCy0L7RgdC40LHQuNGA0YHQuiwg0J3QvtCy0L7RgdC40LHQuNGA0YHQutCw0Y8g0L7QsdC70LDRgdGC0YwiLCJhY2NvdW50LWxhbmc6cnVzIiwiY29udHJhY3Q60JjQnC3QoNCkLdCT0JvQky0yMiIsImFwaS12ZXJzaW9uOjEuMSIsImFjY291bnQtdXVpZDplOTI1YmQwZi0wNWE2LTRjNTYtYjczNy00Yjk5YzE0ZjY2OWEiLCJjbGllbnQtaWQtZWM1OmVkNzVlY2Y0LTMwZWQtNDE1My1hZmU5LWViODBiYjUxMmYyMiIsImNvbnRyYWN0LWlkOmRlNDJjYjcxLTZjOGMtNGNmNS04MjIyLWNmYjY2MDQ0ZThkZiIsImNsaWVudC1pZC1lYzQ6MTQzNDgyMzEiLCJzb2xpZC1hZGRyZXNzOmZhbHNlIiwiY29udHJhZ2VudC11dWlkOmVkNzVlY2Y0LTMwZWQtNDE1My1hZmU5LWViODBiYjUxMmYyMiIsImZ1bGwtbmFtZTrQotC10YHRgtC40YDQvtCy0LDQvdC40LUg0JjQvdGC0LXQs9GA0LDRhtC40Lgg0JjQnCJdLCJqdGkiOiJvQUVJMS1xLWlMQ3RZZzgxNk9fdHNOWkNNdUkiLCJjbGllbnRfaWQiOiJ3cUd3aVF4MGdnOG1MdGlFS3NVaW5qVlNJQ0NqdFRFUCJ9.hyp3aF2Z7HSqUHQDhPWaZ0l7wbAy5vMOZ4Xm0nmUmgU0T8_oKWy2C92OeWlb0j8dJfeMcycGpxohOTFAoqTfADY5QWEa5QSInp0kklLcZlX5PehIV0RQRbRpa3brYmv9ZGeerefmCPm5qiPrK7cQwU0ujGxLStfU5HvwVUq0KBcrr1vLU283riZ1Kf_U2tAPUK3Y7WIerGcaiVGKpJEfD5ij3cvDW4m0drU9Glb0_5P4FZfbHOSUO0cZfVsLaqoanjegHZGuU3X1RXJP32zgatm8uaodcoTg6dtDnetJXSzz6ikTEIpJEEwloDcF-1KZHmO77fUSzjUEZGPnl26ybA' \
--data '{
"tariff_code" : 123,
"type": 2,
"from_location": {
"address": "г. Москва, ул. Тверская, 10"
},
"delivery_point" : "KSK1",
"packages": [
{
"number":1,
"weight" : 1000,
"comment": "Комментарий к упаковке"
}
],
"sender": {
"company": "ООО Рога и копыта",
"name": "Петров Петр Петрович",
"phones": [
{
"number": "89992345667"
}
]
},
"recipient" : {
"name": "Иванов Иван Иванович",
"phones": [
{
"number": "89992345667"
}
]
}
}'
И получим ответ:
{
"entity": {
"uuid": "c708db98-7520-4566-ba44-f15e9e2f7c2b"
},
"requests": [
{
"request_uuid": "be49da4e-86ec-4b71-a990-6652f2f15024",
"type": "CREATE",
"date_time": "2025-03-23T14:22:19+0000",
"state": "ACCEPTED"
}
],
"related_entities": []
}
Получение информации о заказе
Итак, мы рассчитали стоимость и создали заказ. В дальнейшем может понадобиться посмотреть детали заказа.
Для получения информации по заказу необходимо отправить GET
запрос на адрес /v2/orders/{uuid}
, где {uuid}
- это идентификатор созданного заказа.
В ответе вы получите информацию по заказу такую как статусы, отправителя и т.д. Подробное описание информации о заказе можно найти в документации
Отправим запрос на получение информации по нашему заказу:
curl --location 'https://api.edu.cdek.ru/v2/orders/c708db98-7520-4566-ba44-f15e9e2f7c2b' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzY29wZSI6WyJsb2NhdGlvbjphbGwiLCJvcmRlcjphbGwiLCJwYXltZW50OmFsbCJdLCJleHAiOjE3NDI3NDI0MjUsImF1dGhvcml0aWVzIjpbInNoYXJkLWlkOnJ1LTAxIiwiY2xpZW50LWNpdHk60J3QvtCy0L7RgdC40LHQuNGA0YHQuiwg0J3QvtCy0L7RgdC40LHQuNGA0YHQutCw0Y8g0L7QsdC70LDRgdGC0YwiLCJhY2NvdW50LWxhbmc6cnVzIiwiY29udHJhY3Q60JjQnC3QoNCkLdCT0JvQky0yMiIsImFwaS12ZXJzaW9uOjEuMSIsImFjY291bnQtdXVpZDplOTI1YmQwZi0wNWE2LTRjNTYtYjczNy00Yjk5YzE0ZjY2OWEiLCJjbGllbnQtaWQtZWM1OmVkNzVlY2Y0LTMwZWQtNDE1My1hZmU5LWViODBiYjUxMmYyMiIsImNvbnRyYWN0LWlkOmRlNDJjYjcxLTZjOGMtNGNmNS04MjIyLWNmYjY2MDQ0ZThkZiIsImNsaWVudC1pZC1lYzQ6MTQzNDgyMzEiLCJzb2xpZC1hZGRyZXNzOmZhbHNlIiwiY29udHJhZ2VudC11dWlkOmVkNzVlY2Y0LTMwZWQtNDE1My1hZmU5LWViODBiYjUxMmYyMiIsImZ1bGwtbmFtZTrQotC10YHRgtC40YDQvtCy0LDQvdC40LUg0JjQvdGC0LXQs9GA0LDRhtC40Lgg0JjQnCJdLCJqdGkiOiJvQUVJMS1xLWlMQ3RZZzgxNk9fdHNOWkNNdUkiLCJjbGllbnRfaWQiOiJ3cUd3aVF4MGdnOG1MdGlFS3NVaW5qVlNJQ0NqdFRFUCJ9.hyp3aF2Z7HSqUHQDhPWaZ0l7wbAy5vMOZ4Xm0nmUmgU0T8_oKWy2C92OeWlb0j8dJfeMcycGpxohOTFAoqTfADY5QWEa5QSInp0kklLcZlX5PehIV0RQRbRpa3brYmv9ZGeerefmCPm5qiPrK7cQwU0ujGxLStfU5HvwVUq0KBcrr1vLU283riZ1Kf_U2tAPUK3Y7WIerGcaiVGKpJEfD5ij3cvDW4m0drU9Glb0_5P4FZfbHOSUO0cZfVsLaqoanjegHZGuU3X1RXJP32zgatm8uaodcoTg6dtDnetJXSzz6ikTEIpJEEwloDcF-1KZHmO77fUSzjUEZGPnl26ybA'
И вот наш ответ:
{
"entity": {
"uuid": "c708db98-7520-4566-ba44-f15e9e2f7c2b",
"type": 2,
"tariff_code": 123,
"delivery_point": "KSK1",
"sender": {
"company": "ООО Рога и копыта",
"name": "Петров Петр Петрович",
"phones": [
{
"number": "89992345667"
}
]
},
"recipient": {
"name": "Иванов Иван Иванович",
"phones": [
{
"number": "89992345667"
}
]
},
"from_location": {
"address": "г. Москва, ул. Тверская, 10"
},
"packages": [
{
"number": "1",
"weight": 1000,
"comment": "Комментарий к упаковке"
}
],
"statuses": [
{
"code": "ACCEPTED",
"name": "Принят",
"date_time": "2025-03-23T14:55:47+0000",
"city": "Офис СДЭК",
"deleted": false
}
]
},
"requests": [
{
"request_uuid": "0bb4c892-e9b2-4521-8ab4-2b355daaf225",
"type": "CREATE",
"date_time": "2025-03-23T14:55:47+0000",
"state": "ACCEPTED"
}
],
"related_entities": []
}
Удаление заказа
В ваших бизнес-процессах может появиться необходимость удалить заказ.
В ТК СДЭК удаление заказа возможно только в статусе "Создан".
Для удаления заказа необходимо отправить DELETE
запрос на адрес /v2/orders/{uuid}
, где {uuid}
- это идентификатор заказа.
При успешном удалении вы получите uuid удаленного заказа.
Например удалим наш заказ:
curl --location --request DELETE 'https://api.edu.cdek.ru/v2/orders/c708db98-7520-4566-ba44-f15e9e2f7c2b' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzY29wZSI6WyJsb2NhdGlvbjphbGwiLCJvcmRlcjphbGwiLCJwYXltZW50OmFsbCJdLCJleHAiOjE3NDI3NDI0MjUsImF1dGhvcml0aWVzIjpbInNoYXJkLWlkOnJ1LTAxIiwiY2xpZW50LWNpdHk60J3QvtCy0L7RgdC40LHQuNGA0YHQuiwg0J3QvtCy0L7RgdC40LHQuNGA0YHQutCw0Y8g0L7QsdC70LDRgdGC0YwiLCJhY2NvdW50LWxhbmc6cnVzIiwiY29udHJhY3Q60JjQnC3QoNCkLdCT0JvQky0yMiIsImFwaS12ZXJzaW9uOjEuMSIsImFjY291bnQtdXVpZDplOTI1YmQwZi0wNWE2LTRjNTYtYjczNy00Yjk5YzE0ZjY2OWEiLCJjbGllbnQtaWQtZWM1OmVkNzVlY2Y0LTMwZWQtNDE1My1hZmU5LWViODBiYjUxMmYyMiIsImNvbnRyYWN0LWlkOmRlNDJjYjcxLTZjOGMtNGNmNS04MjIyLWNmYjY2MDQ0ZThkZiIsImNsaWVudC1pZC1lYzQ6MTQzNDgyMzEiLCJzb2xpZC1hZGRyZXNzOmZhbHNlIiwiY29udHJhZ2VudC11dWlkOmVkNzVlY2Y0LTMwZWQtNDE1My1hZmU5LWViODBiYjUxMmYyMiIsImZ1bGwtbmFtZTrQotC10YHRgtC40YDQvtCy0LDQvdC40LUg0JjQvdGC0LXQs9GA0LDRhtC40Lgg0JjQnCJdLCJqdGkiOiJvQUVJMS1xLWlMQ3RZZzgxNk9fdHNOWkNNdUkiLCJjbGllbnRfaWQiOiJ3cUd3aVF4MGdnOG1MdGlFS3NVaW5qVlNJQ0NqdFRFUCJ9.hyp3aF2Z7HSqUHQDhPWaZ0l7wbAy5vMOZ4Xm0nmUmgU0T8_oKWy2C92OeWlb0j8dJfeMcycGpxohOTFAoqTfADY5QWEa5QSInp0kklLcZlX5PehIV0RQRbRpa3brYmv9ZGeerefmCPm5qiPrK7cQwU0ujGxLStfU5HvwVUq0KBcrr1vLU283riZ1Kf_U2tAPUK3Y7WIerGcaiVGKpJEfD5ij3cvDW4m0drU9Glb0_5P4FZfbHOSUO0cZfVsLaqoanjegHZGuU3X1RXJP32zgatm8uaodcoTg6dtDnetJXSzz6ikTEIpJEEwloDcF-1KZHmO77fUSzjUEZGPnl26ybA'
Заказ ушел на удаление:
{
"entity": {
"uuid": "c708db98-7520-4566-ba44-f15e9e2f7c2b"
},
"requests": [
{
"request_uuid": "76384073-42d0-45b0-ba30-508b01af48ce",
"type": "DELETE",
"date_time": "2025-03-23T14:57:32+0000",
"state": "ACCEPTED"
}
],
"related_entities": []
}
Обратите внимание что после успешного выполнения, заказ удаляется не сразу, а создается задача на его удаление.
В этой статье мы рассмотрели базовые методы интеграции вашего сервиса с ТК СДЭК. Мы не стали углубляться в более сложные методы, поскольку уверены, что после настройки базовой интеграции с ТК СДЭК, вам будет легко разобраться с более сложными вариантами. В каждой транспортной компании существуют похожие методы интеграции, однако их реализация может существенно отличаться.
В следующих статьях мы подробнее расскажем о нюансах интеграции с ТК ПЭК, Яндекс.Доставка, Деловые Линии, Байкал Сервис и другими.