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
Requires
- php: >=8.0
- ext-json: *
- jms/serializer: 3.*
- nyholm/psr7: 1.*
- psr/http-client: 1.*
Requires (Dev)
- guzzlehttp/guzzle: 7.*
- phpunit/phpunit: *
- vlucas/phpdotenv: ^5.5
This package is auto-updated.
Last update: 2024-10-27 11:56:13 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...