Интеграция API Служба доставки СДЭК (CDEK)
Данный документ описывает реализацию обмена информацией между Falcon Space и службой доставки СДЭК.
Общие входные данные:
- Город отправления (Флаг - от двери);
- Город получения (Флаг - до двери);
- Длина, см;
- Ширина, см;
- Высота, см;
- Вес, г.
Общий алгоритм:
- Формирование текста запроса с параметрами
- Отправка запроса
- Получение ответа на запрос
- Парсинг ответа, получение данных.
Полезные сервисы СДЭК
Сервисы - https://cdek.ru/services
Тарифы для частных лиц - https://cdek.ru/individuals/tariffs
Расчёт стоимости доставки - https://cdek.ru/calculate
Интеграция - https://cdek.ru/integration
Интеграция - Часто задаваемые вопросы - https://cdek.ru/integration#questions
Вариант с авторизацией
Что нужно сделать чтобы интегрироваться?
Шаг 1: Интеграция возможна только при наличии договора (интернет-магазина или договора на оказание курьерских услуг) и если он имеет статус “Подписан” в наших системах.
Вариант без авторизации
Можно ли использовать API-калькулятора тарифов без договора?
Да, параметры учетной записи (Account и Secure) не являются обязательными, но Вы не сможете проводить расчет по тарифам для интернет-магазинов и у Вас не будут учитываться персональные скидки.
Технические параметры
Взаимодействие с сервисом происходит в режиме онлайн с помощью стандартного протокола HTTPS и формата JSON.
Обмен сообщениями должен осуществляться в кодировке UTF-8.
КАЛЬКУЛЯТОР БЕЗ АВТОРИЗАЦИИ - ВЕРСИЯ v1.5 API интеграции
https://confluence.cdek.ru/pages/viewpage.action?pageId=15616129#id-Протоколобменаданными(v1.5)-4.14CalculatorКалькулятор
Процедуры обмена реализованы по пункту - 4.14.1. Расчет стоимости по тарифам с приоритетом
СДЭК - тарифы – PROCEDURE [api_ruCDEKTariff_request]
Для получения стоимости и сроков доставки необходимо отправить json-объект серверу СДЭК.
При передаче json-объекта в заголовке нужно указать соответствующий Content-Type.
- URL: http://api.cdek.ru/calculator/calculate_price_by_json.php
- Content-Type: application/json
- Метод запроса: POST
- Формат на выходе: JSON
Входные данные запроса – параметры процедуры PROCEDURE [api_ruCDEKTariff_request]
№ |
Переменная |
Тип |
Значение по умолчанию |
Описание |
Примечание |
1 |
@dateExecute2 |
nvarchar(10) |
'' |
Планируемая дата отправки заказа в формате “ГГГГ-ММ-ДД |
|
2 |
@senderCityId |
int |
36528 |
Код города отправителя из базы СДЭК |
|
3 |
@receiverCityId |
int |
288 |
Код города получателя из базы СДЭК |
|
4 |
@tariffId |
int |
1 |
Код выбранного тарифа |
|
|
goods Габаритные характеристики упаковки |
||||
5 |
@weight |
int |
300 |
Вес (грамм ) |
ПЕРЕСЧЕТ! Вес упаковки (в килограммах) |
6 |
@length |
int |
5 |
Длина упаковки (в сантиметрах) |
|
7 |
@width |
int |
20 |
Ширина упаковки (в сантиметрах) |
|
|
@height |
int |
10 |
Высота упаковки (в сантиметрах) |
|
Приложение 1. Услуги (тарифы) и режимы доставки СДЭК
Тарифы для обычной доставки
Код |
Название тарифа |
Режим доставки |
Ограничение по весу |
Услуга |
Описание |
1 |
Экспресс лайт дверь-дверь |
дверь-дверь (Д-Д) |
до 30 кг |
Экспресс |
Классическая экспресс-доставка по России документов и грузов до 30 кг. |
3 |
Супер-экспресс до 18 |
дверь-дверь (Д-Д) |
до 30 кг |
Срочная доставка |
Срочная доставка документов и грузов «из рук в руки» по России к определенному часу. |
5 |
Экономичный экспресс склад-склад |
склад-склад (С-С) |
|
Экономичная доставка |
Недорогая доставка грузов по России ЖД и автотранспортом (доставка грузов с увеличением сроков). |
города получателя из базы СДЭК
- Id - Идентификатор города по базе СДЭК (CityCode)
- FullName - Полное название города/населенного пункта включая региональную принадлежность
- CityName - Название города не включает региональную принадлежность
ID |
FullName |
CityName |
OblName |
36528 |
5663234234, Москва |
Москва |
|
438 |
Ростов-на-Дону |
Ростов-на-Дону |
Ростовская обл. |
402 |
Архангельск |
Архангельск |
Архангельская обл. |
288 |
Владивосток |
Владивосток |
Приморский край |
Пример текста запроса - request.
URL: http://api.cdek.ru/calculator/calculate_price_by_json.php
JSON - BODY
{
"version":"1.0",
"dateExecute":"2020-06-03",
"senderCityId":"36528",
"receiverCityId":"288",
"tariffId":"1",
"goods":
[
{
"weight":"0.300",
"length":"5",
"width":"20",
"height":"10"
}
]
}
Пример текста ответа - response.
{
"result": {
"price": "1370",
"deliveryPeriodMin": 7,
"deliveryPeriodMax": 10,
"deliveryDateMin": "2020-06-10",
"deliveryDateMax": "2020-06-13",
"tariffId": "1",
"priceByCurrency": 1370,
"currency": "RUB"
}
}
CREATE PROCEDURE [dbo].[api_ruCDEKTariff_request]
@parameters ExtendedDictionaryParameter READONLY, -- входящие параметры для внутренней обработки (используйте Key, Value2)
@username nvarchar(32) -- текущий пользователь.
--
-- ВХ.ПАРАМ
, @dateExecute2 nvarchar(10) = '' --'2020-07-19' -- Планируемая дата отправки заказа в формате “ГГГГ-ММ-ДД”
, @senderCityId int = 36528 -- Код города отправителя из базы СДЭК integer
, @receiverCityId int = 288 -- Код города получателя из базы СДЭК integer
, @tariffId int = 1 -- Код выбранного тарифа
-- goods Габаритные характеристики упаковки
, @weight int = 300 -- Вес (грамм ) – ПЕРЕСЧЕТ! Вес упаковки (в килограммах) numeric(20,3)
, @length int = 5 -- Длина упаковки (в сантиметрах) integer
, @width int = 20 -- Ширина упаковки (в сантиметрах) integer
, @height int = 10 -- Высота упаковки (в сантиметрах) integer
AS
BEGIN
-- Вес (грамм ) – ПЕРЕСЧЕТ! Вес упаковки (в килограммах) numeric(20,3) -
-- 1 Грамм (гр) = 0.001 Килограмма (кг)
DECLARE @weightKG numeric(20,3)
SET @weightKG = @weight * 0.001
-- Планируемая дата отправки заказа в формате “ГГГГ-ММ-ДД”
-- 23 ISO8601 гггг-мм-дд
IF LEN( ISNULL ( @dateExecute2 , '' ) )=0
SET @dateExecute2 = CONVERT ( nvarchar(10) , GETDATE() , 23 )
-- exec as_print @str = @dateExecute2
DECLARE @apiUrl nvarchar(max) = '' -- Финальная строка для отправки -- @apiStr -- ФАКТИЧЕСКИ ЭТО Url
DECLARE @apiCommomStr nvarchar(max) = '' -- Общая часть для всех запросов
DECLARE @jsonRequest nvarchar(max) = '' -- текст json-объекта
-- необходимо отправить json-объект серверу СДЭК.
-- При передаче json-объекта в заголовке нужно указать соответствующий Content-Type.
-- URL : http://api.cdek.ru/calculator/calculate_price_by_json.php
-- Type: Content-Type: application/json -- указать ЭТО ДОЛЖНО БЫТЬ В HEADER
SET @apiCommomStr = N'http://api.cdek.ru/calculator/calculate_price_by_json.php' --
SET @jsonRequest = N'{' + CHAR(10)
+ N'"version":"1.0",' + CHAR(10)
+ N'"dateExecute":"' + @dateExecute2 +'",'+ CHAR(10)
+ N'"senderCityId":"' + TRY_CAST ( @senderCityId AS nvarchar ) +'",'+ CHAR(10)
+ N'"receiverCityId":"'+ TRY_CAST ( @receiverCityId AS nvarchar ) +'",'+ CHAR(10)
+ N'"tariffId":"' + TRY_CAST ( @tariffId AS nvarchar ) +'",'+ CHAR(10)
+ N'"goods":' + CHAR(10)
+ N'[' + CHAR(10)
+ CHAR(9)+ N'{' + CHAR(10) -- табуляции CHAR(9)
+ CHAR(9)+ N'"weight":"' + TRY_CAST ( @weightKG AS nvarchar ) +'",'+ CHAR(10)
+ CHAR(9)+ N'"length":"' + TRY_CAST ( @length AS nvarchar ) +'",'+ CHAR(10)
+ CHAR(9)+ N'"width":"' + TRY_CAST ( @width AS nvarchar ) +'",'+ CHAR(10)
+ CHAR(9)+ N'"height":"' + TRY_CAST ( @height AS nvarchar ) +'" '+ CHAR(10) -- Последняя строка без запятой
+ CHAR(9)+ N'}' + CHAR(10)
+ N']' + CHAR(10)
+ N'}'
-- PRINT @jsonRequest
SET @apiUrl = @apiCommomStr -- + @jsonRequest
-- ОТЛАДКА
-- exec as_print @str='api_ruCDEKTariff_request'
insert into as_trace ( header, text, username, code , created ) values( '@apiUrl Url', @apiUrl , @username, 'api_ruCDEKTariff_request' , GETDATE() )
insert into as_trace ( header, text, username, code , created ) values( '@jsonRequest', @jsonRequest , @username, 'api_ruCDEKTariff_request' , GETDATE() )
-- SELECT 1 Msg, Result, Url (адрес, куда будет идти запрос)
select '' Msg, 1 Result
, @apiUrl Url
, 'application/json' ContentType -- явное указание для HEADER
-- SELECT 2 PARAMETERS - параметры, которые будут передаваться во внешний источник
select 'id' name
, @jsonRequest value -- это body
, 'json' [type] -- form (в форме передается), header (в http headers), get запросы передавайте прямо в URL
-- Как отправить исходящий запрос POST с JSON телом?
-- Для этого указываем тип запроса POST и передаем только 1 параметр с type=json в формате строки с JSON.
END
СДЭК - тарифы - PROCEDURE [api_ruCDEKTariff_response]
Результат запроса может быть как сообщение с информацией, так и сообщение с ошибкой.
Список возможных сообщений об ошибках.
- 'Ошибка! Строка @response не является JSON!' (Проверка ответа оператором ISJSON() )
- 'Ошибка! Запрос @response вернул ошибку! '… @errorText.
Если ошибок в ответе не обнаружено, из ответа выбираются такие данные:
- deliveryPeriodMin Минимальное время доставки в днях integer
- deliveryPeriodMax Максимальное время доставки в днях
- deliveryDateMin Минимальная дата доставки, в формате 'ГГГГ-ММ-ДД'
- deliveryDateMax Максимальная дата доставки, в формате 'ГГГГ-ММ-ДД'
- tariffId Код тарифа, по которому рассчитана сумма доставки
- priceByCurrency Цена в валюте взаиморасчетов.
- currency Валюта интернет-магазина
Пример текста – результат: "Срок доставки: от 7 до 10 дней. Даты: с 2020-06-10 по 2020-06-13. Сумма: 1370 RUB."
PROCEDURE [dbo].[api_ruCDEKTariff_response]
CREATE PROCEDURE [dbo].[api_ruCDEKTariff_response]
@response nvarchar(max),
@parameters ExtendedDictionaryParameter READONLY, -- входящие параметры для внутренней обработки (используйте Key, Value2 - те же что и на request)
@username nvarchar(32)
AS
BEGIN
-- ОТЛАДКА
-- exec as_print @str='api_ruPostDelivery_response'
insert into as_trace (text, username, code , created ) values( @response, @username, 'api_ruCDEKTariff_response' , GETDATE() )
DECLARE @json1 NVARCHAR(MAX) = N''
SET @json1 = @response
-- Для проверки правильности JSON формата существует функция ISJSON, которая возвращает 1, если это JSON, 0 — если нет и NULL, если был передан NULL
DECLARE @presentJSON bit = 0
SELECT @presentJSON = ISNULL( ISJSON( @json1 ) , 0 )
IF @presentJSON <> 1
BEGIN
SELECT 'Ошибка! Строка @response не является JSON!' Msg, 0 Result, @response Response
RETURN
END
-- Обработка ошибки в ответе
DECLARE @presentError bit = 0, @errorText NVARCHAR(MAX), @errorCode NVARCHAR(MAX), @errorMsg NVARCHAR(MAX)
DECLARE @deliveryDateMin NVARCHAR(MAX)
, @deliveryDateMax NVARCHAR(MAX)
, @tariffId NVARCHAR(MAX)
, @priceByCurrency NVARCHAR(MAX)
, @currency NVARCHAR(MAX)
--
DECLARE @deliveryDaysMin NVARCHAR(MAX)
, @deliveryDaysMax NVARCHAR(MAX)
SELECT @presentError = IIF( JSON_QUERY( @json1, '$.error[0]') IS NULL , 0 , 1 ) -- Проверка массива JSON_QUERY '$.error[0]'
, @errorCode = JSON_VALUE( @json1, '$.error[0].code')
, @errorMsg = JSON_VALUE( @json1, '$.error[0].text')
-- Данные
, @deliveryDaysMin = JSON_VALUE( @json1, '$.result.deliveryPeriodMin')
, @deliveryDaysMax = JSON_VALUE( @json1, '$.result.deliveryPeriodMax')
, @deliveryDateMin = JSON_VALUE( @json1, '$.result.deliveryDateMin')
, @deliveryDateMax = JSON_VALUE( @json1, '$.result.deliveryDateMax')
, @tariffId = JSON_VALUE( @json1, '$.result.tariffId')
, @priceByCurrency = JSON_VALUE( @json1, '$.result.priceByCurrency')
, @currency = JSON_VALUE( @json1, '$.result.currency')
IF @presentError = 1
BEGIN
SET @errorText = 'code:'+ ISNULL( @errorCode, '' ) +' text:'+ ISNULL( @errorMsg, '' )
SELECT 'Ошибка! Запрос @response вернул ошибку! '+ ISNULL( @errorText, '' ) Msg, 0 Result, @response Response
RETURN
END
DECLARE @deliveryText NVARCHAR(MAX)
-- Срок доставки: от 2 до 4 дней.
SET @deliveryText = 'Срок доставки: от ' + ISNULL( @deliveryDaysMin, '' )+' до '+ISNULL( @deliveryDaysMax, '' )+' дней. '
+'Даты: с ' + ISNULL( @deliveryDateMin, '' )+' по '+ISNULL( @deliveryDateMax, '' )+'. '
+'Сумма: ' + ISNULL( @priceByCurrency, '' )+' ' +ISNULL( @currency, '' )+'.'
-- SELECT 1
select @deliveryText as Msg, 1 Result, @response Response
-- SELECT 2 Внешние действия
END
Google поиск по нашей документации
- Руководства
- Основа Falcon Space
- Основные компоненты
- Возможности
- Коммуникация с пользователем
- Дизайн, стилизация
- Лендинги
- Универсальный API
- Примеры интеграций Прием платежей через Яндекс.Кассу Онлайн-платежи. Интеграция с Робокассой (платежный шлюз) Zapier интеграция на платформе Falcon Space Интеграция коллтрекинга МАНГО ОФИС (режим Площадка) Интеграция API DaData.ru подсказки по адресам Интеграция API Курсы валют Центрального Банка РФ в веб-платформе Falcon Space Интеграция API Почта РФ Интеграция API Служба доставки СДЭК (CDEK) Интеграция API Служба доставки Деловые линии Интеграция импорт и парсинг файла CSV Интеграция API IpGeoBase Город по IP-адресу Интеграция API DaData.ru Город по IP-адресу Как вычислить расстояние между 2 точками с координатами через Google Maps Сканирование штрихкодов и QR кодов через камеру и с картинок Получение данных контрагента по ИНН Прием платежей на сайте через CloudPayments Как сделать интеграцию с Мой Склад Внедрение подсказок dadata на сайт Вывод точек на карте Яндекс. Интеграция с Яндекс Карты Интеграция с телефонией Zadarma.com Получение данных о контрагенте - интеграция с сервисом ЗаЧестныйБизнес Интеграция с AMO CRM Как импортировать данные в базу CRM из Google Контакты Вход/регистрация через ВКонтакте(vk.com) Интеграция CRM с онлайн чатом на сайте (Replain) Как связать yandex metrika clientID с пользователем на сайте и посмотреть полный путь его по сайту? Телеграм. Работа с файлами Как сделать обработку входящей почты (создание клиента в CRM из Email) Интеграция сайта с ChatGPT (openAI) Интеграция с Яндекс Метрика Интернет-эквайринг Тинькоф Банк Интеграция с платежным шлюзом LifePay Как сделать вебхук для передачи данных с Тильды на Falcon Space
- Каталоги
- Навигация
- Документы
- Дополнительные компоненты
- Продвижение, SEO
- Системные моменты
- Системное администрирование
- HOWTO
- Таблицы
- Формы
- Загрузка файлов, картинок
- Работа с SQL
- HOWTO JS
- HOWTO Верстка
- Решение проблем
Falcon Space
Это снижение стоимости владения
за счет меньшего количества людей для поддержки и узкого стека разработки. Про снижение стоимости владения продуктом
Это быстрое внесение изменений
по ходу эксплуатации программы. Как создается функционал на платформе
Это простой удобный интерфейс
адаптация под мобильные устройства. Про юзабилити платформы