Протокол интеграции с фулфилмент
История изменений
Версия | Дата изменений | Описание изменений |
---|---|---|
1.0 |
| Создание документации |
1. Введение
1.1 Общее описание
В документе представлен порядок и формат обмена данными между Компанией «СДЭК» и клиентом Интернет-Магазином (далее ИМ) или партнером, представляющим интернет-магазины по услуге "Фулфилмент".
Запросы на генерацию учетной записи СДЭК, вопросы и пожелания клиентов принимаем на e-mail: https://ff.cdek.ru/support
Альтернативный способ создания учетной записи: https://www.cdek.ru/zapolnit-anketu
Инструкция по подключению и ответы на часто задаваемые вопросы: https://ff.cdek.ru/support
1.2 Термины и определения
ИМ - интернет-магазин
Панель OrderAdmin - панель управления сервисом фулфилмент
1.3 Что нужно, чтобы осуществить интеграцию
1 шаг: Интеграция возможна только при наличии согласованного договора со СДЭК.
2 шаг: Принять условия пользовательского соглашение в личном кабинете СДЭК и зарегистрироваться в системе фулфилмент.
3 шаг: воспользоваться указанной ниже инструкцией.
1.4 Авторизация
Для того чтобы начать работать с системой панелью фулфилмент необходимо авторизоваться.
Для это нужно отправить запрос на http://app.lk.reworker.ru/api/oauth/cdek c полученными ранее ключами CDEK:
$oauth = $api->setRequest( [ 'client_id' => 'reworker', 'domain' => 'cdek', 'grant_type' => 'password', 'username' => $config['user'], 'password' => $config['password'], ] )->request(Api::TYPE_POST, '/oauth', [])->getResult(); $cache->getOptions()->setTtl($oauth['expires_in']); $cache->setItems($oauth); $accessToken = $oauth['access_token']; |
Пример запроса:
<?php namespace App; use App\Lib\Api; use Laminas\Cache\Storage\Adapter\Filesystem; use Laminas\Cache\Storage\Plugin\ExceptionHandler; use PhpOffice\PhpSpreadsheet\Helper\Sample; use PhpOffice\PhpSpreadsheet\Reader\Xls; chdir(dirname(__DIR__)); require_once __DIR__ . '/vendor/autoload.php'; $config = require_once('config.uploader.php'); if (!file_exists($config['cacheDir'])) { mkdir($config['cacheDir'], 0777); } $api = new Api($config); $cache = new Filesystem(); $cache->getOptions()->setTtl(3600); $cache->getOptions()->setCacheDir($config['cacheDir']); $plugin = new ExceptionHandler(); $plugin->getOptions()->setThrowExceptions(false); $cache->addPlugin($plugin); $accessToken = $cache->getItem('access_token'); if (empty($accessToken) && !empty($config['user']) && !empty($config['password']) ) { try { $oauth = $api->setRequest( [ 'client_id' => $config['client'], 'domain' => $config['domain'], 'grant_type' => 'password', 'username' => $config['user'], 'password' => $config['password'], ] )->request(Api::TYPE_POST, '/oauth', [])->getResult(); $cache->getOptions()->setTtl($oauth['expires_in']); $cache->setItems($oauth); $accessToken = $oauth['access_token']; } catch (\Exception $e) { echo '<strong>' . $e->getMessage() . '</strong>'; die(); } } elseif (empty($accessToken)) { echo 'No access token'; die(); } $api->setAccessToken($accessToken); |
2. Общее описание API
Для взаимодействия с API необходимо отправить POST-запрос на URL: <базовый url интерфейса>/method.
Содержимое запроса передается в переменной POST-запроса, либо в теле POST-запроса для некоторых методов.
2.1 Базовый URL интерфейса
Адрес | Тип сервера |
---|---|
https://loginff.cdek.ru | основной |
http://loginff.cdek.ru | основной |
2.2 Методы API
В API есть несколько методов для работы с данными:
GET | Метод позволяет сформировать запрос на получение данных |
POST | Метод позволяет добавить информацию в систему |
PATCH | Метод позволяет изменить информацию в системе |
DELETE | Метод позволяет удалить информацию из системы |
<?php namespace App\Lib; class Api { const TYPE_GET = 'GET'; const TYPE_POST = 'POST'; const TYPE_PATCH = 'PATCH'; protected $user; protected $password; protected $token; protected $json; protected $result; protected $server = 'http://cdek.orderadmin.ru'; protected $timeout = 15; protected $error; public function __construct($config) { $this->server = $config['server']; } public function setAccessToken(string $token) { $this->token = $token; return $this; } public function getResult($format = true) { if ($format) { return json_decode($this->result, true); } else { return $this->result; } } public function getError() { return $this->error; } public function setRequest($array) { $this->json = json_encode($array); return $this; } public function setJsonRequest($json) { $this->json = $json; return $this; } public function getRequest() { return $this->json; } public function request($type, $url, $query = array(), $debug = false) { $ch = curl_init(); $url = $this->server . $url; if (!empty($query)) { $url = $url . '?' . http_build_query($query); } curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $headers = [ 'Content-Type: application/json', 'Accept: application/json', ]; if (!empty($this->token)) { $headers[] = 'Authorization: Bearer ' . $this->token; } curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $type); if (!empty($this->user) && !empty($this->password)) { curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt( $ch, CURLOPT_USERPWD, $this->user . ":" . $this->password ); } if (in_array($type, [self::TYPE_POST, self::TYPE_PATCH])) { $data = $this->getRequest(); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); } if ($debug) { curl_setopt($ch, CURLOPT_VERBOSE, true); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLINFO_HEADER_OUT, true); curl_setopt( $ch, CURLOPT_STDERR, $verbose = fopen('php://temp', 'rw+') ); } $this->result = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($debug) { var_dump( json_decode( $this->getRequest(), JSON_PRETTY_PRINT + JSON_UNESCAPED_UNICODE ) ); echo '<hr />'; echo $this->getRequest(); echo '<hr />'; echo '<pre>'; echo $this->result; print_r(curl_getinfo($ch)); echo '</pre>'; die(); } curl_close($ch); if (in_array($httpCode, array(200, 201))) { return $this; } else { $result = $this->getResult(); $description = $result['detail'] . (!empty($result['validation_messages']) ? var_export( $result['validation_messages'], true ) : ''); throw new \Exception($description, $result['status']); } } } |
3. Заказы и заявки на доставку
Заказ в системе может находиться в 2х вариантах (типах):
- Заказ - используется для комплектации и упаковки товара, т.е. складских операций.
- Заявка на доставку - используется для передачи заказов на доставку.
Оба вида заказов могут существовать в системе отдельно друг от друга (вы можете собрать заказ, но не отправить или отправить заказ без сборки), поэтому выгрузка может быть отдельная на каждый тип заказа.
3.1 Загрузка в базу OrderAdmin заказов
Загрузка заказа в систему OrderAdmin происходит с помощью метода /api/products/order: http://loginff.cdek.ru/apigility/swagger/Orderadmin%5CProducts%5CApi-v1#!/Order
При выгрузке нужно передать данные для отправки заказа (адрес, ID службы доставки, ID тарифа, стоимость и т.д.).
Данные передаются в формате JSON. Полный список данных можно получить в инструкции ниже:
<?php $data['shop'] = $shop_id; // ID магазина в системе OrderAdmin $data['extId'] = $order_id; // ID заказа в системе клиента $data['date'] = date('Y-m-d'); // Дата создания заказа $data['paymentState'] = 'not_paid'; // Статус оплаты заказа (оплачен/не оплачен) $data['orderPrice'] = $order_sum; // Сумма товара $data['totalPrice'] = $order_sum; // Стоимость заказа (включая доставку $data['recipient']['name'] = 'Василий Петров'; // Имя покупателя $data['profile']['name'] = 'Василий Петров'; // Имя покупателя в профиле $data['profile']['phone'] = $phone; // Телефон покупателя $data['profile']['email'] = ''; // E-Mail покупателя $data['address']['country'] = 28; // ID страны $data['address']['city'] = 'Москва'; // Город $data['address']['street'] = $street; // Улица $data['address']['house'] = $house; // Дом $data['address']['apartment'] = $apartment; // Квартира $data['address']['notFormal'] = $adress; // Адрес полностью $data['eav']['delivery-services-delivery-request-rate'] = 29; // Тариф службы доставки $data['eav']['delivery-services-delivery-request-service-point'] = ''; // ID пункта самовывоза $count = 0; // Добавляем товар в заказ $orderProduct = array(); $orderProduct['productOffer']['extId'] = $goods_id; // ID товара $orderProduct['price'] = $goods_price; // Стоимость товара $orderProduct['count'] = $goods_col; // Кол-во товара $orderProduct['tax'] = 0; // Налог на стоимость $data['orderProducts'][] = $orderProduct; $return = $orderadmin->setRequest($data)->request('POST', '/api/products/order')->getResult(); ?> |
3.2 Загрузка в базу OrderAdmin заявки на доставку
Загрузка заказа в систему OrderAdmin происходит с помощью метода /api/delivery-services/requests: http://loginff.cdek.ru/apigility/swagger/Orderadmin%5CDeliveryServices%5CApi-v1#!/DeliveryRequest
При выгрузке нужно передать данные для отправки заказа (адрес, ID службы доставки, ID тарифа, стоимость и т.д.).
Данные передаются в формате JSON. Полный список данных можно получить в инструкции:
СКРИН
extId - внешний ID заказа (клиента), должен быть уникальным в рамках одного отправителя;
outExtId - ID заказа в системе клиента.
deliveryService - ID курьерской службы, доступные курьерские службы можно получить методом: http://loginff.cdek.ru/api/swagger#!/delivery-services/findDeliveryServices
payment - сумма, которую необходимо взять с получателя
estimatedCost - оценочная стоимость
weight - если есть, ориентировочный вес отправления
Секция rate
id - ID тарифа (если конкретный тариф не указан, отправка будет произведена по тарифу по умолчанию для службы или по наиболее выгодному тарифу).
Поле rate задает службу доставки и тариф по которому будет производиться отправка заказа. Неполный список значений rate:
Служба доставки | Тариф | Значение rate |
Почта России | посылка онлайн (если указан этот тариф, но посылка не проходит по параметрам или адресу, то тариф автоматически изменится на 17). | 2 |
Почта России | ценная посылка | 17 |
Почта России | 1-й класс | 141 |
Boxberry | Доставка курьером до двери | 62 |
Boxberry | Доставка в ПВЗ | 61 |
PickPoint | Оптимальный | 65 |
Максипост | Доставка курьером до двери | 63 |
СДЭК | Посылка склад-склад | 48 |
СДЭК | Посылка склад-дверь | 49 |
DPD | DPD CLASSIC Parcel | 12 |
Курьерист | Курьерская доставка Курьерист | 67 |
Курьерист | Курьерская доставка Курьерист (на следующий день) | 68 |
ВНИМАНИЕ:
- Указание поля rate обязательно для каждого заказа!
- Список служб постоянно обновляется и доступен для загрузки через API.
Секция from
sender - идентификатор отправителя, заведенный в личном кабинете в разделе “Отправители”: http://loginff.cdek.ru/delivery-services/requests/senders/
country - страна доставки (для России 28).
senderProfile - профиль отправителя. Именно в настройках в sender и profile хранятся все настройки вашего аккаунта, включая и данные для интеграции со службами доставок.
Посмотреть все свои профили вы можете по ссылке:
http://loginff.cdek.ru/clients/profiles/
Секция to
servicePoint - в данной переменной можно указать идентификатор ПВЗ (в случае доставки до ПВЗ), список ПВЗ можно получить методом:
http://loginff.cdek.ru/api/swagger#!/delivery-services/findDeliveryServicesPoints
recipientName - имя получателя
recipientPhone - телефон получателя
Секция to,
подсекция recipient,
extId - идентификатор в вашей базе данных (если завести с идентификатором, можно не передавать каждый раз остальные параметры)
name - имя получателя
middlename - отчество получателя
surname - фамилия получателя
type - физическое или юридическое лицо
phone - телефон получателя
email - электронная почта получателя
подсекция address
postcode - почтовый индекс
locality -> country -> id - идентификатор страны (28 - для России), страны можно получить методом: http://loginff.cdek.ru/api/swagger#!/locations/findCountries
streetPrefix - префикс улицы
street - название улицы
house - дом
block - корпус
apartment - номер квартиры
notFormal - можно передать неформализованный адрес (если он так хранится в вашей БД)
Загрузка мест и товаров:
Секция places - с помощью данной секции передается количество мест в заказе и список товаров.
extId - номер места (если место одно то параметр можно не указывать)
подсекция items - список товаров
extId - ID товара в системе клиента
name - Название товара
count - количество товара
estimatedCost - оценочная стоимость товара
payment - сумма наложенного платежа товара
weight - вес
В качестве ответа будет получен JSON с информацией о добавленном заказе.
<?php … $res = $orderadmin->setRequest(array( "deliveryService" => array( "id" => 9, // ID службы доставки, которой отправится данный заказ ), "rate" => array( "id" => 2, // ID тарифа (если конкретный тариф не указан, отправка // будет произведена по тарифу по умолчанию для службы или // по наиболее выгодному тарифу). ), "places" => array( "extId" => 1, // Место, в случае если вы передаете несколько мест "items" => array ( "extId" => 1234, // ID товара "name" => "Товар номер 1", // Название товара "count" => 2, // Кол-во товаров "estimatedCost" => 500, // Оценочная стоимость "payment" => 500, // Наложенный платеж "weight" => 230, // Вес (в граммах) ), ), "estimatedCost" => 500, // Оценочная стоимость "payment" => 0, // Наложка "price" => 149, // Стоимость доставки (рассчитана) "pickupDate" => "2015-12-11", // Дата отправки "from" => array( "sender" => 1, // идентификатор отправителя, заведенный в личном // кабинете в разделе "Отправители" "country" => 28, ), "deliveryDate" => "2015-12-11", // Дата доставки "to" => array( "recipient" => array ( "name" => "", // Имя "surname" => "", // Фамилия "type" => "physical", // Физическое / юридическое лицо "phone" => "+7 (999) 000-00-00", // Телефон "email" => "", // e-mail "locality" => array ( "postcode" => "", // индекс ), "address" => array ( "postcode" => '', // индекс "country" => array ( "id" => 28, // ID страны ), "streetPrefix" => "пр.", // Префикс улицы "street" => "Гражданский", // Улица "house" => "", // Дом "block" => "", // строение "apartment" => "", // Квартира "notFormal" => "", // Полный адрес ), ), "comment" => "", // Комментарий к заказу ), "weight" => 0, // Вес "width" => 0, // Ширина "height" => 0, // Глубина "length" => 0, // Длина ))->request('POST', '/api/delivery-services/requests')->getResult(); … ?> |
4. Загрузка в систему товаров
Как и в случае с заказами, в системе имеется 2 вида “товаров”:
- Непосредственно сами товары.
- И товарные предложения, каждый артикул отдельный (цвет, размер и т.д.).
Один товар может включать в себя неограниченное количество товарных предложений. По факту, вся работа всегда ведется именно с товарными предложениями, поэтому, если даже у вас нет деления товара на предложения, то вам придется все-равно создать для каждого товара отдельное предложение.
4.1 Создание в системе товара
Загрузка товара в систему OrderAdmin происходит с помощью метода /api/products: http://loginff.cdek.ru/apigility/swagger/Orderadmin%5CProducts%5CApi-v1#!/Product
При выгрузке нужно передать данные для создания заказа (ID товара, артикул, название товара и т.д.).
Данные передаются в формате JSON. Полный список данных можно получить в инструкции.
<?php $res_goods = array( 'extId' => 835, // ID товара в вашей системе 'type' => 1, 'article' => 'GT-3894', // Артикул товара 'name' => 'Трубопробулькиватель', // Название товара 'shop' => $shop_id, // ID магазина в системе OrderAdmin 'barcodes' => array('4958067548216'), // Штрих-код товара 'image' => 'http://www.toyall.ru/m8b_big_copy2.gif', // Фотография товара ); $resj = $orderadmin->setRequest($res_goods)->request('POST', '/api/products')->getResult(); ?> |
4.1.1 Альтернативный способ:
Товары можно загружать с помощью стандартного YML фида:
https://yandex.ru/support/partnermarket/yml/about-yml.xml
4.2 Создание в системе товарного предложения
Загрузка товарного предложения в систему OrderAdmin происходит с помощью метода /api/products/offer:
http://loginff.cdek.ru/apigility/swagger/Orderadmin%5CProducts%5CApi-v1#!/ProductOffer
ВНИМАНИЕ: чтобы создать товарное предложение, нужно предварительно создать товар и привязать к нему создаваемое товарное предложение.
Данные передаются в формате JSON. Полный список данных можно получить в инструкции.
<?php $res_offer = array( 'product' => 32, // ID товара в системе OrderAdmin 'extId' => 835, // ID товара в вашей системе 'shop' => $shop_id, // ID магазина в системе OrderAdmin 'article' => 'GT-3894-lilac', // Артикул 'sku' => 'GT-3894-lilac', // Артикул 'name' => 'Сиренивенький трубопробулькиватель', // Название товарного предложения 'barcodes' => array('4958067548216'), // Штрик-код товарного предложения 'image' => 'http://www.toyall.ru/m8b_big_copy2.gif', // Фотография ); $resj2 = $orderadmin->setRequest($res_offer)->request('POST', '/api/products/offer')->getResult(); ?> |
5. Отслеживание заказов
5.1 Получение трек-номеров и/или тарифов
Получить данные о заказе (трек-номер, тариф службы доставки и т.д.) можно с помощью метода /delivery-services/request/{id}:
http://loginff.cdek.ru/api/swagger#!/delivery-services/findDeliveryServiceRequests_0
Где {id} - это либо ID заказа в системе OrderAdmin, либо ID заказа в системе клиента.
Запрос
<?php … $res = $orderadmin->setRequest(array())->request('GET', '/delivery-services/request/'.$order_id)->getResult(); $ar_tarif = json_decode($res); if ((@$ar_tarif->status != 404)&&(@$ar_tarif->result->trackingNumber != '')) { echo 'Трек-номер заказа № '.$order_id.': '.$ar_tarif->result->trackingNumber; } … ?> |
Ответ
{ "query":{ "id":"104*498097" }, "result":{ "id":86800, "owner":16, "extId":"104*498097", "sender":9, "trackingNumber":"14088203070000", "state":"complete", "rate":17, "estimatedCost":"2319.00", "payment":"2319.00", "price":"242.76", "deliveryServiceStatus":null, "recipientName":"Максим Вячеславович Васильев", "recipientComment":"", "weight":"0.00", "dimensions":{ "x":0, "y":0, "z":0 }, "volume":0, "volumeWeight":0, "created":{ "date":"2016-09-12 19:29:07.000000", "timezone_type":3, "timezone":"Europe/Moscow" }, "updated":{ "date":"2016-09-17 19:21:42.000000", "timezone_type":3, "timezone":"Europe/Moscow" }, "recipientPhone":19097, "recipientRawPhone":"+79032070000", "recipientAddress":121553, "createdByDocument":3754, "shippedByDocument":3757 } } |
5.2 Получение подробного трекинга заказа
Получить данные о заказе (трек-номер, тариф службы доставки и т.д.) можно с помощью метода /delivery-services/request/{id}/tracking:
http://loginff.cdek.ru/api/swagger#!/delivery-services/findDeliveryServiceRequestTracking
Где {id} - это либо ID заказа в системе OrderAdmin, либо ID заказа в системе клиента.
Запрос:
<?php … $res = $orderadmin->setRequest(array())->request('GET', '/delivery-services/request/'.$order_id.'/tracking')->getResult(); $ar_tarif = json_decode($res); if ((@$ar_tarif->status != 404)&&(@$ar_tarif->result->trackingNumber != '')) { echo 'Трек-номер заказа № '.$order_id.': '.$ar_tarif->result->trackingNumber; } … ?> |
Ответ:
Либо информацию о заказе: { "query":{ "id":"104*498000" }, "result":{ "deliveryService":{ "id":9, "name":"Russian Post" }, "deliveryRequest":{ "id":86896, "extId":"104*498000", "trackingNumber":"14088203070000", "state":"complete" }, "tracking":[ { "id":1, "date":{ "date":"2016-09-14 11:51:00.000000", "timezone_type":1, "timezone":"+03:00" }, "index":"140961", "place":"Московский АСЦ", "description":"Партионный" }, { "id":2, "date":{ "date":"2016-09-14 15:31:00.000000", "timezone_type":1, "timezone":"+03:00" }, "index":"140983", "place":"Московский АСЦ Цех Посылок", "description":"Сортировка" }, { "id":3, "date":{ "date":"2016-09-15 03:01:00.000000", "timezone_type":1, "timezone":"+03:00" }, "index":"140980", "place":"Московский АСЦ Цех Логистики", "description":"Покинуло сортировочный центр" }, { "id":4, "date":{ "date":"2016-09-15 23:53:52.000000", "timezone_type":1, "timezone":"+03:00" }, "index":"141027", "place":"Мытищи Сц", "description":"Покинуло сортировочный центр" }, { "id":5, "date":{ "date":"2016-09-16 05:32:21.000000", "timezone_type":1, "timezone":"+03:00" }, "index":"141816", "place":"Дмитров УООП", "description":"Покинуло сортировочный центр" }, { "id":6, "date":{ "date":"2016-09-16 17:42:01.000000", "timezone_type":1, "timezone":"+03:00" }, "index":"141980", "place":"Дубна", "description":"Прибыло в место вручения" }, { "id":7, "date":{ "date":"2016-09-16 17:48:27.000000", "timezone_type":1, "timezone":"+03:00" }, "index":"141980", "place":"Дубна", "description":"Временное отсутствие адресата" }, { "id":8, "date":{ "date":"2016-09-17 12:14:26.000000", "timezone_type":1, "timezone":"+03:00" }, "index":"141980", "place":"Дубна", "description":"Вручение адресату" } ] } } |
6. Получение всех начислений по заказу
(включая информацию о получении наложенного платежа).
Получить данные о заказе (трек-номер, тариф службы доставки и т.д.) можно с помощью метода /accounts/transactions?entityType=delivery_request&entity={ID}:
http://loginff.cdek.ru/api/swagger#!/accounts/findAccountTransactions
Где {id} - это ID заказа в системе OrderAdmin.
Выглядит запрос следующим образом:
$res = $orderadmin->setRequest(array())->request('GET', '/accounts//transactions?entityType=Orderadmin\DeliveryServices\Entity\DeliveryRequest&entity='.$order_id)->getResult();
В качестве результата получаем, либо ошибку:
{
"type": "http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html",
"title": "Forbidden",
"status": 403,
"detail": "Authorization header missing"
}
или
{
- "type":"http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html",
- "title":"Not Found",
- "status":404,
- "detail":null
}
Либо информацию о заказе:
{ "query": { "account": null, "rateModifier": null, "entityType": "delivery_request", "entity": "78329", "offset": 0, "limit": 10 }, "result": [ { "id": 264487, "state": "confirmed", "rateModifier": { "id": 2, "code": null }, "entityType": "delivery_request", "entity": "78329", "value": "-18.00", "tax": null, "comment": "Приемка заявки 78329.", "created": { "date": "2016-08-31 18:46:40.000000", "timezone_type": 3, "timezone": "Europe/Moscow" }, "updated": { "date": "2016-08-31 18:46:40.000000", "timezone_type": 3, "timezone": "Europe/Moscow" } }, { "id": 291901, "state": "confirmed", "rateModifier": { "id": 23, "code": "payment" }, "entityType": "delivery_request", "entity": "78329", "value": "3150.00", "tax": null, "comment": "Обработка наложенного платежа.", "created": { "date": "2016-09-13 09:58:48.000000", "timezone_type": 3, "timezone": "Europe/Moscow" }, "updated": { "date": "2016-09-13 09:58:48.000000", "timezone_type": 3, "timezone": "Europe/Moscow" } }, { "id": 268057, "state": "confirmed", "rateModifier": { "id": 7, "code": "rate" }, "entityType": "delivery_request", "entity": "78329", "value": "-288.51", "tax": null, "comment": "Russian Post, тариф \"Бандероль\".", "created": { "date": "2016-09-01 22:30:36.000000", "timezone_type": 3, "timezone": "Europe/Moscow" }, "updated": { "date": "2016-09-01 22:30:36.000000", "timezone_type": 3, "timezone": "Europe/Moscow" } }, { "id": 291902, "state": "confirmed", "rateModifier": { "id": 24, "code": "fee" }, "entityType": "delivery_request", "entity": "78329", "value": "-31.50", "tax": null, "comment": "Комиссия за наложенный платеж.", "created": { "date": "2016-09-13 09:58:48.000000", "timezone_type": 3, "timezone": "Europe/Moscow" }, "updated": { "date": "2016-09-13 09:58:48.000000", "timezone_type": 3, "timezone": "Europe/Moscow" } }, { "id": 291903, "state": "confirmed", "rateModifier": { "id": 25, "code": "russianPostFee" }, "entityType": "delivery_request", "entity": "78329", "value": "-53.55", "tax": null, "comment": "Комиссия за наложенный платеж.", "created": { "date": "2016-09-13 09:58:48.000000", "timezone_type": 3, "timezone": "Europe/Moscow" }, "updated": { "date": "2016-09-13 09:58:48.000000", "timezone_type": 3, "timezone": "Europe/Moscow" } } ] } |
7. Калькулятор расчета тарифов
7.1 Получение списка городов
Получение списка городов, по которым осуществляется доставка:
http://loginff.cdek.ru/api/locations/localities (все города)
Города по фильтру:
http://loginff.cdek.ru/api/locations/localities?name=Новокуз%&page=1
В ответ, будет получен JSON вида:
{ "_links":{ "self":{ "href":"http://panel.orderadmin.ru/api/locations/localities?name=%D0%9D%D0%BE%D0%B2%D0%BE%D0%BA%D1%83%D0%B7%D0%BD%D0%B5%D1%86%D0%BA&page=1" }, "first":{ "href":"http://panel.orderadmin.ru/api/locations/localities?name=%D0%9D%D0%BE%D0%B2%D0%BE%D0%BA%D1%83%D0%B7%D0%BD%D0%B5%D1%86%D0%BA" }, "last":{ "href":"http://panel.orderadmin.ru/api/locations/localities?name=%D0%9D%D0%BE%D0%B2%D0%BE%D0%BA%D1%83%D0%B7%D0%BD%D0%B5%D1%86%D0%BA&page=1" } }, "_embedded":{ "localities":[ { "id":112812, "state":"inactive", "name":"Новокузнецк", "type":"Город", "extId":"b28b6f6f-1435-444e-95a6-68c499b0d27a", "postcode":"654000", "settings":{ "geo":{ "lat":"53.757547", "lng":"87.136044" }, "timezone":{ "offset":7, "timezone":"Asia/Novokuznetsk" } }, "translations":{ }, "_embedded":{ "country":{ "id":28, "state":"active", "code":"RU", "name":"Россия", "nativeLocale":"ru_RU", "type":"fias", "updated":{ "date":"2015-08-08 10:44:39.000000", "timezone_type":3, "timezone":"Europe/Moscow" }, "_links":{ "self":{ "href":"http://panel.orderadmin.ru/api/locations/countries/28" } } }, "area":{ "id":2302, "state":"active", "name":"Кемеровская Область", "lft":3494, "rgt":3557, "root":2111, "level":1, "updated":{ "date":"2016-02-28 22:26:12.000000", "timezone_type":3, "timezone":"Europe/Moscow" }, "nativeLocale":"ru_ru", "extId":"393aeccb-89ef-4a7e-ae42-08d5cebc2e30", "postcode":null, "localities":{ }, "_embedded":{ "country":{ "id":28, "state":"active", "code":"RU", "name":"Россия", "nativeLocale":"ru_RU", "type":"fias", "updated":{ "date":"2015-08-08 10:44:39.000000", "timezone_type":3, "timezone":"Europe/Moscow" }, "_links":{ "self":{ "href":"http://panel.orderadmin.ru/api/locations/countries/28" } } }, "parent":{ "id":2111, "state":"active", "name":"Россия", "lft":1, "rgt":5112, "root":2111, "level":0, "updated":{ "date":"2015-08-11 22:58:17.000000", "timezone_type":3, "timezone":"Europe/Moscow" }, "nativeLocale":"ru_ru", "extId":"0", "postcode":null, "country":null, "localities":{ }, "parent":null, "_links":{ "self":{ "href":"http://panel.orderadmin.ru/area/2111" } } } }, "_links":{ "self":{ "href":"http://panel.orderadmin.ru/area/2302" } } } }, "_links":{ "self":{ "href":"http://panel.orderadmin.ru/api/locations/localities/112812" } } } ] }, "page_count":1, "page_size":25, "total_items":1, "page":1 } |
Ответ будет содержать список всех городов. Их индексы, координаты, уникальный ID в в системе и остальную информацию.
7.2 Получение вариантов доставок
Для того, чтобы получить список вариантов доставок в заданный город, нужно отправить запрос по адресу:
http://loginff.cdek.ru/api/delivery-services/calculator
Методом POST, следующие данные:
- sender - номер отправителя (уточнить у вашего менеджера).
- id - ID города (получается предыдущим запросом).
- postcode - почтовый индекс города. Может использоваться вместо ID города.
- estimatedCost - оценочная стоимость.
- payment - сумма наложенного платежа.
- weight - вес заказа в граммах.
- width - ширина.
- height - глубина.
- length - длина.
7.3 Размещение калькулятора в виде JS
Размещение JavaScritp’а:
<link rel="stylesheet" href="//panel.orderadmin.ru/frontend/node_modules/bootstrap/dist/css/bootstrap.css">
<link rel="stylesheet" href="//panel.orderadmin.ru/frontend/node_modules/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="//panel.orderadmin.ru/frontend/node_modules/leaflet/dist/leaflet.css">
<link rel="stylesheet" href="//panel.orderadmin.ru/frontend/node_modules/leaflet.markercluster/dist/MarkerCluster.css">
<link rel="stylesheet" href="//panel.orderadmin.ru/frontend/node_modules/leaflet.markercluster/dist/MarkerCluster.Default.css">
<link rel="stylesheet" href="//panel.orderadmin.ru/frontend/dev/jquery-calculator/styles.css">
<script type="text/javascript" src="//panel.orderadmin.ru/frontend/node_modules/jquery/dist/jquery.min.js"></script>
<script type="text/javascript" src="//panel.orderadmin.ru/frontend/node_modules/bootstrap/dist/js/bootstrap.min.js"></script>
<script type="text/javascript" src="//panel.orderadmin.ru/frontend/node_modules/handlebars/dist/handlebars.js"></script>
<script type="text/javascript" src="//panel.orderadmin.ru/frontend/node_modules/handlebars/dist/handlebars.js"></script>
<script type="text/javascript" src="//panel.orderadmin.ru/frontend/node_modules/leaflet/dist/leaflet.js"></script>
<script type="text/javascript" src="//panel.orderadmin.ru/frontend/node_modules/leaflet.markercluster/dist/leaflet.markercluster.js"></script>
<script type="text/javascript" src="//panel.orderadmin.ru/frontend/dev/jquery-calculator/jquery.calculator.js"></script>
<div id="oaDeliveryCalc">
<i class="fa fa-spinner fa-3x fa-spin" aria-hidden="true"></i>
</div>
<script type="text/javascript">
$("#oaDeliveryCalc").oaDeliveryCalc({"settings":{"sender":139}, "server": {"api": "//panel.orderadmin.ru", "static": "//panel.orderadmin.ru"}});
</script>
8. Прочие методы методы API
Полное описание всех методов работы с API OrderAdmin можно найти по адресу:
http://loginff.cdek.ru/apigility/swagger
или через личный кабинет фулфилмент
Там же можно сделать тестовые запросы и посмотреть ответы системы.
© 2000—2024, Курьерская компания СДЭК