ashirchkov/yandex-logistics

PHP SDK for Yandex logistics (same day and another day) delivery api services

1.0.1 2023-11-27 09:39 UTC

This package is auto-updated.

Last update: 2024-11-27 12:12:11 UTC


README

Полная реализация SDK для интеграции с API Yandex Logistics

Описание

Документация API

API Яндекс Доставки в другой день

API Яндекс «Экспресс-доставки»/«Доставки в течение дня»

Возможности:

API Яндекс Доставки в другой день

  • [x] Подготовка заявки
    • [x] Предварительная оценка стоимости доставки
    • [x] Получение интервалов доставки
  • [x] Точки самопривоза и ПВЗ
    • [x] Получение идентификатора населённого пункта
    • [x] Получение списка точек самопривоза и ПВЗ
  • [x] Основные запросы
    • [x] Создание заявки
    • [x] Подтверждение заявки
    • [x] Получение информации о заявке
    • [x] Получение информации о заявках во временном интервале
    • [x] Редактирование заказа
    • [x] Получение интервалов доставки для нового места получения заказа
    • [x] История статусов заявки
    • [x] Отмена заявки
  • [x] Ярлыки и акты приема-передачи
    • [x] Получение ярлыков
    • [x] Получение актов приёма-передачи для отгрузки

API Яндекс Доставки в другой день

  • [ ] Методы «Доставки в течение дня»
    • [ ] Интервалы «Доставки в течение дня»
  • [ ] Предварительная оценка
    • [ ] Первичная оценка стоимости без создания заявки
    • [ ] Получение тарифов, доступных в точке
  • [ ] Базовые методы
    • [ ] Создание заявки
    • [ ] Подтверждение заявки
    • [ ] Поиск заявок
    • [ ] Получение информации по заявке
  • [ ] Отмена заявки и пропуск точек
    • [ ] Получение признака отмены
    • [ ] Отмена заявки
    • [ ] Пропуск точки в заказе с мультиточками
  • [ ] Информация о курьере
    • [ ] Получение номера телефона курьера
    • [ ] Получение местоположения курьера
    • [ ] Получение ссылок для отслеживания курьера
  • [ ] Коды подтверждения и акты приёма-передачи
    • [ ] Получение кода подтверждения
    • [ ] Получение акта приёма-передачи
  • [ ] Информация по заявкам
    • [ ] Получение информации по нескольким заявкам
    • [ ] Журнал изменений заказов
    • [ ] Получение прогноза по времени прибытия на точки
  • [ ] Редактирование заявки
    • [ ] Редактирование заявки до её подтверждения
    • [ ] Частичное редактирование заявки после ее подтверждения
    • [ ] Получить результат применения изменений
  • [ ] Ровер
    • [ ] Запрос на проверку возможности доставки ровером
    • [ ] Запрос на открытие крышки ровера
  • [ ] Подтверждение доставки
    • [ ] Получение фотографий по точке
    • [ ] Получение информации по заявке

Установка

$ composer require ashirchkov/yandex-logistics

Документация SDK

Инициализация API клиента

В примере использован GuzzleHttp клиент, вы можете использовать любой PSR-18 клиент.

<?php 

require_once 'vendor/autoload.php';

$psr18Client = new GuzzleHttp\Client();
$apiKey = '<your API-key>';
$testMode = true; // Если установлен true, запросы будут отправляться к тестовому API сервису Yandex

$apiClient = new AlexeyShirchkov\Yandex\Logistics\Client($psr18Client, $apiKey, $testMode); 

Далее в примерах подразумевается, что вы уже инициализировали $apiClient

API Яндекс Доставки в другой день:

Предварительная оценка стоимости доставки

Список параметров

$params = [
    'tariff' => 'self_pickup',
    'source' => [
        'platform_station_id' => '4eb18cc4-329d-424d-a8a8-abfd8926463d',
    ],
    'destination' => [
        'platform_station_id' => '0530d1b2-58be-4dba-8d69-3fb86fd61c9c',
    ],
    'total_assessed_price' => 100000,
    'total_weight' => 1000,
]

$response = $apiClient->anotherDay()->calculate()->calculatePrice($params);

if ($response->isSuccess()) {
    var_dump($response->getResult());
} else {
    var_dump($response->getErrors());
}

Получение интервалов доставки

Список параметров

$stationId = '4eb18cc4-329d-424d-a8a8-abfd8926463d';

$params = [
    'self_pickup_id' => '0530d1b2-58be-4dba-8d69-3fb86fd61c9c',
    'send_unix' => true,
];

$response = $apiClient->anotherDay()->calculate()->calculateIntervals($stationId, $params);

if ($response->isSuccess()) {
    var_dump($response->getResult());
} else {
    var_dump($response->getErrors());
}

Получение идентификатора населённого пункта

Список параметров

$response = $apiClient->anotherDay()->location()->getGeoIdByAddress('Москва');

if ($response->isSuccess()) {
    var_dump($response->getResult());
} else {
    var_dump($response->getErrors());
}

Получение списка точек самопривоза и ПВЗ

Список параметров

$params = [
    'type' => 'terminal',
];

$response = $apiClient->anotherDay()->location()->getPointList($params);

if ($response->isSuccess()) {
    var_dump($response->getResult());
} else {
    var_dump($response->getErrors());
}

Создание заявки

Список параметров

$params = [
    'info' => [
        'operator_request_id' => '1234',
    ],
    'recipient_info' => [
        'first_name' => 'Иван',
        'phone' => '+79999999999',
    ],
    'billing_info' => [
        'payment_method' => 'already_paid',
    ],
    'source' => [
        'platform_station' => [
            'platform_id' => '4eb18cc4-329d-424d-a8a8-abfd8926463d',
        ],
    ],
    'destination' => [
        'type' => 'platform_station',
        'platform_station' => [
            'platform_id' => '0530d1b2-58be-4dba-8d69-3fb86fd61c9c',
        ],
    ],
    'places' => [
        [
            'barcode' => '1234567890',
            'physical_dims' => [
                'predefined_volume' => 100,
                'weight_gross' => 1000,
            ],
        ],
    ],
    'items' => [
        [
            'name' => 'Ручка шариковая (цвет синий)',
            'count' => 5,
            'article' => 'a123456',
            'billing_details' => [
                'assessed_unit_price' => 10000,
                'unit_price' => 10000,
            ],
            'place_barcode' => '1234567890',
        ],
        [
            'name' => 'Ручка шариковая (цвет красный)',
            'count' => 5,
            'article' => 'a654321',
            'billing_details' => [
                'assessed_unit_price' => 20000,
                'unit_price' => 20000,
            ],
            'place_barcode' => '1234567890',
        ],
    ],
    'last_mile_policy' => 'self_pickup',
];

$response = $apiClient->anotherDay()->order()->createOrder($params);

if ($response->isSuccess()) {
    var_dump($response->getResult());
} else {
    var_dump($response->getErrors());
}

Подтверждение заявки

Список параметров

$offerId = '<your offer_id>'; // offer_id, полученный после выполнения createOrder

$response = $apiClient->anotherDay()->order()->confirmOrder($offerId);

if ($response->isSuccess()) {
    var_dump($response->getResult());
} else {
    var_dump($response->getErrors());
}

Получение информации о заявке

Список параметров

$requestId = '<your request_id>'; // request_id, полученный после выполнения confirmOrder

$response = $apiClient->anotherDay()->order()->getOrder($requestId);

if ($response->isSuccess()) {
    var_dump($response->getResult());
} else {
    var_dump($response->getErrors());
}

Получение информации о заявках во временном интервале

Список параметров

$params = [
    'from' => (new DateTime('today'))->getTimestamp(),
    'to' => (new DateTime('tomorrow'))->getTimestamp(),
];

$response = $apiClient->anotherDay()->order()->getOrders($params);

if ($response->isSuccess()) {
    var_dump($response->getResult());
} else {
    var_dump($response->getErrors());
}

Редактирование заказа

Список параметров

$requestId = '<your request_id>'; // request_id, полученный после выполнения confirmOrder

$params = [
    'recipient_info' => [
        'name' => 'Пётр'
    ]
];

$response = $apiClient->anotherDay()->order()->editOrder($requestId, $params);

if ($response->isSuccess()) {
    var_dump($response->getResult());
} else {
    var_dump($response->getErrors());
}

Получение интервалов доставки для нового места получения заказа

Список параметров

$requestId = '<your request_id>'; // request_id, полученный после выполнения confirmOrder

$params = [
    'destination' => [
        'type' => 'platform_station'
    ],
];

$response = $apiClient->anotherDay()->order()->redeliveryOrder($requestId, $params);

if ($response->isSuccess()) {
    var_dump($response->getResult());
} else {
    var_dump($response->getErrors());
}

История статусов заявки

Список параметров

$requestId = '<your request_id>'; // request_id, полученный после выполнения confirmOrder

$response = $apiClient->anotherDay()->order()->orderStatusHistory($requestId);

if ($response->isSuccess()) {
    var_dump($response->getResult());
} else {
    var_dump($response->getErrors());
}

Отмена заявки

Список параметров

$requestId = '<your request_id>'; // request_id, полученный после выполнения confirmOrder

$response = $apiClient->anotherDay()->order()->cancelOrder($requestId);

if ($response->isSuccess()) {
    var_dump($response->getResult());
} else {
    var_dump($response->getErrors());
}

Получение ярлыков

Список параметров

$requestIds = [
    '<your request_id>' // список request_id, полученных после выполнения confirmOrder
];

$response = $apiClient->anotherDay()->label()->generateLabels($requestIds);

if ($response->isSuccess()) {
    file_put_contents(__DIR__ . '/labels.pdf', $response->getResult());
} else {
    var_dump($response->getErrors());
}

Получение актов приёма-передачи для отгрузки

Список параметров

$params = [
    'request_ids' => [
        '<your request_id>' // список request_id, полученных после выполнения confirmOrder
    ]
]

$response = $apiClient->anotherDay()->label()->getHandoverAct($params);

if ($response->isSuccess()) {
    var_dump($response->getResult());
} else {
    var_dump($response->getErrors());
}

API Яндекс «Экспресс-доставки»/«Доставки в течение дня»:

Coming soon...