Протокол интеграции с фулфилмент


 

История изменений

ВерсияДата измененийОписание изменений
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х вариантах (типах):

  1. Заказ  - используется для комплектации и упаковки товара, т.е. складских операций.
  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

ВНИМАНИЕ: 

  1. Указание поля rate обязательно для каждого заказа!
  2. Список служб постоянно обновляется и доступен для загрузки через 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 вида “товаров”:

  1. Непосредственно сами товары. 
  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"

}

или

{

}

Либо информацию о заказе:

{
  "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, Курьерская компания СДЭК