Посмотреть все проекты или подарить автору кофе можно тут.
Документация к API V2 MetaShip.
- Changelog
- Конфигурация
- Отладка
- Расчет офферов (тарифы)
- Список точек выдачи
- Склады
- Магазины
- Заказы
- Партии
- Документы
- 0.5.1 - Добавляет параметр options в метод getPvzList;
- 0.5.0 - Добавляет параметр shop_id в метод getPvzList;
- 0.4.6 - Добавлены зависимости guzzle ^7.0 и psr/log ^2.0|^3.0;
- 0.4.5 - В OrderStatusHelper добавлен справочник наименований статусов MetaShip;
- 0.4.4 - Исправлена ошибка возврата пустого массива от API;
- 0.4.3 - Добавлено преобразование типов у объектов Order и Item;
- 0.4.2 - В JwtSaveFileHelper добавлена возможность задать свой путь к файлу при инициализации;
- 0.4.1 - Добавлено новое исключение MetaShipValidationException для обработки 400-х ошибок API;
- 0.4.0 - Добавлена методы для работа с партиями и документами;
- 0.3.0 - Подробное описание тут;
- 0.2.1 - Добавлен метод получения статусов заказа, добавлен OrderStatusHelper;
- 0.2.0 - Первая Alfa-версия SDK.
Для установки можно использовать менеджер пакетов Composer
composer require lapaygroup/metaship-sdk
Для работы с API необходимо получить токен и секретный ключ. Найти их можно в личном кабинете в разделе "Интеграция". С этими данными необходимо получить токен доступа в формате JWT и сохранить его. Токен живет 1 час с момента издания.
SDK позволяет сохранять JWT, для этого необходимо использовать Helper, который должен реализовывать JwtSaveInterface.
В SDK встроен Helper для сохранения токена в временный файл JwtSaveFileHelper.
Если Helper не передан в конструктор клиента, будет использоваться JwtSaveFileHelper.
try {
// Инициализация API клиента с таймаутом ожидания ответа 60 секунд
$Client = new \LapayGroup\MetaShipSdk\Client('9e687410-62d5-5139-b712-37e7766922c6', '2091dcf8c89e12a9b8815b9e2d48d212fc9b4082d2e54a0ea4e5da260f5244ba20541d6b2e829133', 60, \LapayGroup\MetaShipSdk\Client::API_URI_TEST);
$Client->getJwt();
$jwt = $Client->getJwt(); // $jwt = eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJPcGVuQVBJIiwiYXVkIjoiQTEyMjAxOSEiLCJhcGlrZXkiOiJBSlMxU0lTRHJrNmRyMFpYazVsZVQxdFBGZDRvcXNIYSIsImlzcyI6InVybjovL0FwaWdlZSIsInBhcnRuZXJJZCI6ImIyNzNlYzQ0LThiMDAtNDliMS04OWVlLWQ4Njc5NjMwZDk0OCIsImV4cCI6MTU5NzA4OTk1OCwiaWF0IjoxNTk3MDg2MzU4LCJqdGkiOiI4YTIyZmUzNy1mMzc0LTQ0NDctOGMzMC05N2ZiYjJjOGQ3MTkifQ.G_XQ6vdk7bXfIeMJer7z5WUFqnwlp0qUt6RxaCINZt3b97ZUwPMI1-1FNKQhFwmCHJGpTYyBJKHgtY3uJZOWDAszjPMIHrQrcnJLSzJisNiy6z3cMbpf-UgD-RgebuaYyEgZ81rekL5aUN6r5rqWHbxcxEGY22lTy9uEWwxF_-UdVLEW9O9Z9M9IMlL5_7ACVu-ID2n6zFk_QJnEumJcBSqb6JFh2TWvUPnjnUt5AOiD7gNRXKsBvoC6InSfGoMA461cxu-rAazhNq5fkqFSdrIUyz0kvAb3UI4hs_6xJy9tXPpXIQY7LQUZqQGp5BT8pasfhAJ_4CCATbqxIHmY9w
$result = \LapayGroup\MetaShipSdk\Jwt::decode($jwt); // Получения информации из токена (payload)
// Ранее полученный токен можно добавить в клиент
$Client->setJwt($jwt);
// Токен можно сохранять в файл используя Helper
$jwtHelper = new \LapayGroup\MetaShipSdk\Helpers\JwtSaveFileHelper();
// Можно задать путь до временного файла отличный от заданного по умолчанию
$jwtHelper->setTmpFile('/tmp/saved_jwt.txt');
$Client = new LapayGroup\MetaShipSdk\Client('9e687410-62d5-5139-b712-37e7766922c6', '2091dcf8c89e12a9b8815b9e2d48d212fc9b4082d2e54a0ea4e5da260f5244ba20541d6b2e829133', 60, \LapayGroup\MetaShipSdk\Client::API_URI_TEST, $jwtHelper);
$jwt = $Client->getJwt(); // $jwt = eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJPcGVuQVBJIiwiYXVkIjoiQTEyMjAxOSEiLCJhcGlrZXkiOiJBSlMxU0lTRHJrNmRyMFpYazVsZVQxdFBGZDRvcXNIYSIsImlzcyI6InVybjovL0FwaWdlZSIsInBhcnRuZXJJZCI6ImIyNzNlYzQ0LThiMDAtNDliMS04OWVlLWQ4Njc5NjMwZDk0OCIsImV4cCI6MTU5NzA4OTk1OCwiaWF0IjoxNTk3MDg2MzU4LCJqdGkiOiI4YTIyZmUzNy1mMzc0LTQ0NDctOGMzMC05N2ZiYjJjOGQ3MTkifQ.G_XQ6vdk7bXfIeMJer7z5WUFqnwlp0qUt6RxaCINZt3b97ZUwPMI1-1FNKQhFwmCHJGpTYyBJKHgtY3uJZOWDAszjPMIHrQrcnJLSzJisNiy6z3cMbpf-UgD-RgebuaYyEgZ81rekL5aUN6r5rqWHbxcxEGY22lTy9uEWwxF_-UdVLEW9O9Z9M9IMlL5_7ACVu-ID2n6zFk_QJnEumJcBSqb6JFh2TWvUPnjnUt5AOiD7gNRXKsBvoC6InSfGoMA461cxu-rAazhNq5fkqFSdrIUyz0kvAb3UI4hs_6xJy9tXPpXIQY7LQUZqQGp5BT8pasfhAJ_4CCATbqxIHmY9w
}
catch (\LapayGroup\MetaShipSdk\Exceptions\MetaShipException $e) {
// Обработка ошибки вызова API MetaShip
// $e->getMessage(); текст ошибки
// $e->getCode(); http код ответа сервиса MetaShip
// $e->getRawResponse(); // ответ сервера MetaShip как есть (http request body)
}
catch (\Exception $e) {
// Обработка исключения
}
<?php
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
$log = new Logger('name');
$log->pushHandler(new StreamHandler('log.txt', Logger::INFO));
$Client = new LapayGroup\MetaShipSdk\Client('9e687410-62d5-5139-b712-37e7766922c6', '2091dcf8c89e12a9b8815b9e2d48d212fc9b4082d2e54a0ea4e5da260f5244ba20541d6b2e829133', 60, \LapayGroup\MetaShipSdk\Client::API_URI_TEST);
$Client->setLogger($log);
$jwt = $Client->getJwt(); // $jwt = eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJPcGVuQVBJIiwiYXVkIjoiQTEyMjAxOSEiLCJhcGlrZXkiOiJBSlMxU0lTRHJrNmRyMFpYazVsZVQxdFBGZDRvcXNIYSIsImlzcyI6InVybjovL0FwaWdlZSIsInBhcnRuZXJJZCI6ImIyNzNlYzQ0LThiMDAtNDliMS04OWVlLWQ4Njc5NjMwZDk0OCIsImV4cCI6MTU5NzA4OTk1OCwiaWF0IjoxNTk3MDg2MzU4LCJqdGkiOiI4YTIyZmUzNy1mMzc0LTQ0NDctOGMzMC05N2ZiYjJjOGQ3MTkifQ.G_XQ6vdk7bXfIeMJer7z5WUFqnwlp0qUt6RxaCINZt3b97ZUwPMI1-1FNKQhFwmCHJGpTYyBJKHgtY3uJZOWDAszjPMIHrQrcnJLSzJisNiy6z3cMbpf-UgD-RgebuaYyEgZ81rekL5aUN6r5rqWHbxcxEGY22lTy9uEWwxF_-UdVLEW9O9Z9M9IMlL5_7ACVu-ID2n6zFk_QJnEumJcBSqb6JFh2TWvUPnjnUt5AOiD7gNRXKsBvoC6InSfGoMA461cxu-rAazhNq5fkqFSdrIUyz0kvAb3UI4hs_6xJy9tXPpXIQY7LQUZqQGp5BT8pasfhAJ_4CCATbqxIHmY9w
$result = \LapayGroup\MetaShipSdk\Jwt::decode($jwt);
В log.txt будут логи в виде:
[2021-05-12T09:13:46.915568+00:00] metaship-api.INFO: MetaShip API POST request /v2/orders: {"warehouse":{"id":"cb4b1999-063f-4824-91d1-90301bc6971a"},"shop":{"id":"6d583c5d-0407-446a-ba69-741907f8171b","number":"ORD-123456"},"payment":{"type":"PayOnDelivery","declaredValue":999.99,"deliverySum":0},"dimension":{"length":10,"width":10,"height":10},"weight":1,"delivery":{"type":"Courier","service":"Boxberry"},"recipient":{"familyName":"\u0418\u0432\u0430\u043d\u043e\u0432","firstName":"\u0418\u0432\u0430\u043d","phoneNumber":"+79771234567","address":{"raw":"115551 \u041a\u0430\u0448\u0438\u0440\u0441\u043a\u043e\u0435 \u0448\u043e\u0441\u0441\u0435 94\u043a2, \u043a\u0432. 1"}},"places":[{"items":[{"article":"123456","name":"\u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0442\u043e\u0432\u0430\u0440","price":999.99,"count":1,"weight":1,"vat":"20"}]}]} [] []
[2021-05-12T09:13:47.521115+00:00] metaship-api.INFO: MetaShip API response /v2/orders: {"type":"https:\/\/wiki.metaship.ru\/api\/errors\/access-denied","title":"Delivery service \u0027Boxberry\u0027 aggregation credential data are not found","details":"Access to the requested resource is denied","status":403} {"Server":["nginx/1.15.10"],"Date":["Wed, 12 May 2021 09:13:47 GMT"],"Content-Type":["application/problem+json"],"Transfer-Encoding":["chunked"],"Connection":["keep-alive"],"X-Powered-By":["PHP/8.0.3"],"Cache-Control":["no-cache, private"],"Access-Control-Allow-Origin":["*"],"Access-Control-Allow-Credentials":["true"],"Access-Control-Allow-Methods":["GET, PUT, POST, DELETE, PATCH, OPTIONS"],"Access-Control-Allow-Headers":["DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Origin,Range,Authorization,Accept"],"Strict-Transport-Security":["max-age=15724800; includeSubDomains"],"http_status":403}
Для расчета стоимости доставки используйте метод getOffers. Он возвращает по заданным параметрам
Входные параметры:
- $offerParams - Параметры для расчета, объект LapayGroup\MetaShipSdk\Entity\OfferParams;
Выходные параметры:
- array - доступные тарифы по подключенным СД;
Примеры вызова:
<?php
try {
$offerParams = new \LapayGroup\MetaShipSdk\Entity\OfferParams();
$offerParams->setShopId('6d583c5d-0407-446a-ba69-741907f8171b');
$offerParams->setWarehouseId('cb4b1999-063f-4824-91d1-90301bc6971a');
$offerParams->setAddress('115551 Каширское шоссе 94к2');
$offerParams->setDeclaredValue(1000);
$offerParams->setLength(10);
$offerParams->setWidth(20);
$offerParams->setHeight(5);
$offerParams->setWeight(0.5);
$offerParams->setTypes([
\LapayGroup\MetaShipSdk\Enum\DeliveryType::COURIER,
\LapayGroup\MetaShipSdk\Enum\DeliveryType::DELIVERY_POINT,
\LapayGroup\MetaShipSdk\Enum\DeliveryType::POST_OFFICE
]);
$Client = new LapayGroup\MetaShipSdk\Client('9e687410-62d5-5139-b712-37e7766922c6', '2091dcf8c89e12a9b8815b9e2d48d212fc9b4082d2e54a0ea4e5da260f5244ba20541d6b2e829133', 60, \LapayGroup\MetaShipSdk\Client::API_URI_TEST);
$Client->getJwt();
$result = $Client->getOffers($offerParams);
/**
* Array
(
[Courier] => Array
(
[0] => Array
(
[delivery] => Array
(
[code] => RussianPost
[name] => Почта России
)
[service] => Array
(
[base] => 209.20
[service] => 0
[total] => 251.04
)
[tariff] => Array
(
[id] => 24
[name] => «Курьер Онлайн»
)
[type] => Courier
[daysMin] => 1
[daysMax] => 1
)
)
[PostOffice] => Array
(
[0] => Array
(
[delivery] => Array
(
[code] => RussianPost
[name] => Почта России
)
[service] => Array
(
[base] => 119.20
[service] => 0
[total] => 143.04
)
[tariff] => Array
(
[id] => 23
[name] => «Посылка Онлайн»
)
[type] => PostOffice
[daysMin] => 1
[daysMax] => 1
)
[1] => Array
(
[delivery] => Array
(
[code] => RussianPost
[name] => Почта России
)
[service] => Array
(
[base] => 180.20
[service] => 0
[total] => 216.24
)
[tariff] => Array
(
[id] => 47
[name] => «Посылка 1 Класса»
)
[type] => PostOffice
[daysMin] => 1
[daysMax] => 1
)
[2] => Array
(
[delivery] => Array
(
[code] => RussianPost
[name] => Почта России
)
[service] => Array
(
[base] => 160.87
[service] => 0
[total] => 193.04
)
[tariff] => Array
(
[id] => 4
[name] => «Посылка Нестандартная»
)
[type] => PostOffice
[daysMin] => 1
[daysMax] => 1
)
[3] => Array
(
[delivery] => Array
(
[code] => RussianPost
[name] => Почта России
)
[service] => Array
(
[base] => 315.00
[service] => 0
[total] => 378.00
)
[tariff] => Array
(
[id] => 16
[name] => «Бандероль 1 Класса»
)
[type] => PostOffice
[daysMin] => 1
[daysMax] => 1
)
[4] => Array
(
[delivery] => Array
(
[code] => RussianPost
[name] => Почта России
)
[service] => Array
(
[base] => 148.00
[service] => 0
[total] => 177.60
)
[tariff] => Array
(
[id] => 3
[name] => «Бандероль»
)
[type] => PostOffice
[daysMin] => 2
[daysMax] => 2
)
)
)
*/
}
catch (\LapayGroup\MetaShipSdk\Exceptions\MetaShipException $e) {
// Обработка ошибки вызова API MetaShip
// $e->getMessage(); текст ошибки
// $e->getCode(); http код ответа сервиса MetaShip
// $e->getRawResponse(); // ответ сервера MetaShip как есть (http request body)
}
catch (\Exception $e) {
// Обработка исключения
}
Входные параметры: = , = null
- string|null $delivery_code - Код СД;
- string|null $city_name - Название города.
Выходные параметры:
- array - Список точек выдачи по заданному фильтру.
Примеры вызова:
<?php
try {
$Client = new LapayGroup\MetaShipSdk\Client('9e687410-62d5-5139-b712-37e7766922c6', '2091dcf8c89e12a9b8815b9e2d48d212fc9b4082d2e54a0ea4e5da260f5244ba20541d6b2e829133', 60, \LapayGroup\MetaShipSdk\Client::API_URI_TEST);
$Client->getJwt();
$result = $Client->getPvzList(\LapayGroup\MetaShipSdk\Enum\DeliveryServiceCode::CDEK);
/**
Успешный ответ
Array
(
[0] => Array
(
[deliveryServiceCode] => Boxberry
[deliveryServiceNumber] => 00557
[type] => pickup
[workTime] => Array
(
[raw] =>
)
[isOnlyPrepaid] =>
[isCashAllowed] =>
[isAcquiringAvailable] => 1
[name] => Москва Теплый Стан_00557_С
[comment] =>
[phone] =>
[address] => Array
(
[city] => Москва
[region] => Москва
[street] => Тёплый Стан ул
[house] => д.27
[building] =>
[apartment] =>
[raw] => 101000, Москва, Москва, Тёплый Стан ул, д.27, строение 1
[latitude] => 55.630614
[longitude] => 37.482026
)
)
[1] => Array
(
[deliveryServiceCode] => Boxberry
[deliveryServiceNumber] => 77400
[type] => pickup
[workTime] => Array
(
[raw] =>
)
[isOnlyPrepaid] =>
[isCashAllowed] =>
[isAcquiringAvailable] => 1
[name] => Москва Новокузнецкая_7708
[comment] =>
[phone] =>
[address] => Array
(
[city] => Москва
[region] => Москва
[street] => Новокузнецкая ул
[house] => д.42
[building] =>
[apartment] =>
[raw] => 101000, Москва, Москва, Новокузнецкая ул, д.42, строение 5
[latitude] => 55.73148
[longitude] => 37.634668
)
)
[2] => Array
(
[deliveryServiceCode] => Boxberry
[deliveryServiceNumber] => 77661
[type] => pickup
[workTime] => Array
(
[raw] =>
)
[isOnlyPrepaid] =>
[isCashAllowed] =>
[isAcquiringAvailable] => 1
[name] => Москва Люблинская_7766_С
[comment] =>
[phone] =>
[address] => Array
(
[city] => Москва
[region] => Москва
[street] => Люблинская ул
[house] => д.27/2
[building] =>
[apartment] =>
[raw] => 101000, Москва, Москва, Люблинская ул, д.27/2
[latitude] => 55.700694
[longitude] => 37.733419
)
)
[3] => Array
(
[deliveryServiceCode] => Cdek
[deliveryServiceNumber] => NKHD1
[type] => pickup
[workTime] => Array
(
[raw] => Пн-Пт 10:00-19:00, Сб 10:00-16:00
)
[isOnlyPrepaid] =>
[isCashAllowed] =>
[isAcquiringAvailable] => 1
[name] => В Южном
[comment] => Маршрут автобуса № 2 до остановки «1ый Южный Микрорайон».
[phone] => 74236606445
[address] => Array
(
[city] => Находка
[region] => Приморский
[street] => ул. Ленинградская
[house] => 17а
[building] =>
[apartment] =>
[raw] => 692924, Приморский, Находка, ул. Ленинградская, 17а
[latitude] => 42.77716
[longitude] => 132.846807
)
)
Ответ с ошибкой
Array
(
[type] => https://wiki.metaship.ru/api/errors/constraint-violations
[title] => Constraint violations
[details] => Parameters of the request violate restrictions
[status] => 400
[invalid-parameters] => Array
(
[0] => Array
(
[parameter] => deliveryServiceCode
[value] => Dostavista
[message] => The value you selected is not a valid choice.
)
)
)
**/
}
catch (\LapayGroup\MetaShipSdk\Exceptions\MetaShipException $e) {
// Обработка ошибки вызова API MetaShip
// $e->getMessage(); текст ошибки
// $e->getCode(); http код ответа сервиса MetaShip
// $e->getRawResponse(); // ответ сервера MetaShip как есть (http request body)
}
catch (\Exception $e) {
// Обработка исключения
}
Входные параметры:
- Warehouse - Параметры склада, объект LapayGroup\MetaShipSdk\Entity\Warehouse.
Выходные параметры:
- array - Результат создания склада
Примеры вызова:
<?php
try {
$Client = new LapayGroup\MetaShipSdk\Client('9e687410-62d5-5139-b712-37e7766922c6', '2091dcf8c89e12a9b8815b9e2d48d212fc9b4082d2e54a0ea4e5da260f5244ba20541d6b2e829133', 60, \LapayGroup\MetaShipSdk\Client::API_URI_TEST);
$Client->getJwt();
$warehouse = new \LapayGroup\MetaShipSdk\Entity\Warehouse();
$warehouse->setName('Тестовый склад 3');
$warehouse->setAddress('Москва, каширское шоссе 94к2');
$result = $Client->createWarehouse($warehouse);
/*
Успешный ответ
Array
(
[id] => 864aca33-e57b-498f-b96f-6ff873b4d771
[type] => Warehouse
[url] => /v2/customer/warehouses/864aca33-e57b-498f-b96f-6ff873b4d771
[status] => 201
)
Ответ с ошибкой
Array
(
[type] => https://wiki.metaship.ru/api/errors/constraint-violations
[title] => Constraint violations
[details] => Parameters of the request violate restrictions
[status] => 400
[invalid-parameters] => Array
(
[0] => Array
(
[parameter] => name
[value] =>
[message] => This value should not be blank.
)
)
)
*/
}
catch (\LapayGroup\MetaShipSdk\Exceptions\MetaShipException $e) {
// Обработка ошибки вызова API MetaShip
// $e->getMessage(); текст ошибки
// $e->getCode(); http код ответа сервиса MetaShip
// $e->getRawResponse(); // ответ сервера MetaShip как есть (http request body)
}
catch (\Exception $e) {
// Обработка исключения
}
Выходные параметры:
- array - список складов
Примеры вызова:
<?php
try {
$Client = new LapayGroup\MetaShipSdk\Client('9e687410-62d5-5139-b712-37e7766922c6', '2091dcf8c89e12a9b8815b9e2d48d212fc9b4082d2e54a0ea4e5da260f5244ba20541d6b2e829133', 60, \LapayGroup\MetaShipSdk\Client::API_URI_TEST);
$Client->getJwt();
$result = $Client->getWarehouses();
/*
* Array
(
[0] => Array
(
[id] => cb4b1999-063f-4824-91d1-90301bc6971a
[number] => WH-45368
[name] => Тестовый склад
[address] => Array
(
[raw] => 109012, г Москва, Тверской р-н, Красная пл, д 1
)
)
[1] => Array
(
[id] => dcc42cb3-ad82-4868-b17f-4663eda34775
[number] => WH-42634
[name] => Тестовый склад 2
[address] => Array
(
[raw] => 115551, г Москва, Орехово-Борисово Северное р-н, Каширское шоссе, д 94 к 2
)
)
[2] => Array
(
[id] => 864aca33-e57b-498f-b96f-6ff873b4d771
[number] => WH-47924
[name] => Тестовый склад 3
[address] => Array
(
[raw] => 115551, г Москва, Орехово-Борисово Северное р-н, Каширское шоссе, д 94 к 2
)
)
)
*/
}
catch (\LapayGroup\MetaShipSdk\Exceptions\MetaShipException $e) {
// Обработка ошибки вызова API MetaShip
// $e->getMessage(); текст ошибки
// $e->getCode(); http код ответа сервиса MetaShip
// $e->getRawResponse(); // ответ сервера MetaShip как есть (http request body)
}
catch (\Exception $e) {
// Обработка исключения
}
Входные параметры:
- string warehouse_id - uuid склада в системе MetaShip.
Выходные параметры:
- array - данные склада
Примеры вызова:
<?php
try {
$Client = new LapayGroup\MetaShipSdk\Client('9e687410-62d5-5139-b712-37e7766922c6', '2091dcf8c89e12a9b8815b9e2d48d212fc9b4082d2e54a0ea4e5da260f5244ba20541d6b2e829133', 60, \LapayGroup\MetaShipSdk\Client::API_URI_TEST);
$Client->getJwt();
$result = $Client->getWarehouse('13472d9c-fc88-4a1f-ab03-335bd5052dee');
/*
* Успешный ответ
* Array
(
[id] => 13472d9c-fc88-4a1f-ab03-335bd5052dee
[number] => WH-32959
[name] => Тестовый склад 1
[visibility] => 1
[address] => Array
(
[raw] => 115569, г Москва, Орехово-Борисово Северное р-н, Каширское шоссе, д 86А
)
[contact] =>
[workingTime] =>
[pickup] =>
[dpdPickupNum] =>
)
*/
}
catch (\LapayGroup\MetaShipSdk\Exceptions\MetaShipException $e) {
// Обработка ошибки вызова API MetaShip
// $e->getMessage(); текст ошибки
// $e->getCode(); http код ответа сервиса MetaShip
// $e->getRawResponse(); // ответ сервера MetaShip как есть (http request body)
}
catch (\Exception $e) {
// Обработка исключения
}
Входные параметры:
- string warehouse_id - uuid склада в системе MetaShip.
Выходные параметры:
- boolean - при успешном удалении true
Примеры вызова:
<?php
try {
$Client = new LapayGroup\MetaShipSdk\Client('9e687410-62d5-5139-b712-37e7766922c6', '2091dcf8c89e12a9b8815b9e2d48d212fc9b4082d2e54a0ea4e5da260f5244ba20541d6b2e829133', 60, \LapayGroup\MetaShipSdk\Client::API_URI_TEST);
$Client->getJwt();
$result = $Client->deleteWarehouse('13472d9c-fc88-4a1f-ab03-335bd5052dee');
}
catch (\LapayGroup\MetaShipSdk\Exceptions\MetaShipException $e) {
// Обработка ошибки вызова API MetaShip
// $e->getMessage(); текст ошибки
// $e->getCode(); http код ответа сервиса MetaShip
// $e->getRawResponse(); // ответ сервера MetaShip как есть (http request body)
}
catch (\Exception $e) {
// Обработка исключения
}
Входные параметры:
- string $shop_name - название магазина;
- string $shop_uri - uri-адрес магазина;
Выходные параметры:
- array - данные созданного магазина
Примеры вызова:
<?php
try {
$Client = new LapayGroup\MetaShipSdk\Client('9e687410-62d5-5139-b712-37e7766922c6', '2091dcf8c89e12a9b8815b9e2d48d212fc9b4082d2e54a0ea4e5da260f5244ba20541d6b2e829133', 60, \LapayGroup\MetaShipSdk\Client::API_URI_TEST);
$Client->getJwt();
$result = $Client->createShop('LapayGroupShop', 'https://lapay.group');
/*
Array
(
[id] => 2db8d753-8adb-4dbb-b8ca-e5d2e2daf17c
[type] => Shop
[url] => /v2/customer/shops/2db8d753-8adb-4dbb-b8ca-e5d2e2daf17c
[status] => 201
)
*/
}
catch (\LapayGroup\MetaShipSdk\Exceptions\MetaShipException $e) {
// Обработка ошибки вызова API MetaShip
// $e->getMessage(); текст ошибки
// $e->getCode(); http код ответа сервиса MetaShip
// $e->getRawResponse(); // ответ сервера MetaShip как есть (http request body)
}
catch (\Exception $e) {
// Обработка исключения
}
Выходные параметры:
- array - данные созданного магазина
Примеры вызова:
<?php
try {
$Client = new LapayGroup\MetaShipSdk\Client('9e687410-62d5-5139-b712-37e7766922c6', '2091dcf8c89e12a9b8815b9e2d48d212fc9b4082d2e54a0ea4e5da260f5244ba20541d6b2e829133', 60, \LapayGroup\MetaShipSdk\Client::API_URI_TEST);
$Client->getJwt();
$result = $Client->getShops();
/*
Array
(
[0] => Array
(
[id] => 6d583c5d-0407-446a-ba69-741907f8171b
[number] => 29430936
[name] => TestShop
[uri] => http://test.ru
[phone] =>
[sender] =>
[trackingTag] =>
)
[1] => Array
(
[id] => 2db8d753-8adb-4dbb-b8ca-e5d2e2daf17c
[number] => SH-55883
[name] => LapayGroupShop
[uri] => https://lapay.group
[phone] =>
[sender] =>
[trackingTag] => jg
)
)
*/
}
catch (\LapayGroup\MetaShipSdk\Exceptions\MetaShipException $e) {
// Обработка ошибки вызова API MetaShip
// $e->getMessage(); текст ошибки
// $e->getCode(); http код ответа сервиса MetaShip
// $e->getRawResponse(); // ответ сервера MetaShip как есть (http request body)
}
catch (\Exception $e) {
// Обработка исключения
}
Входные параметры:
- Order - Параметры заказа, объект LapayGroup\MetaShipSdk\Entity\Order.
Выходные параметры:
- array - данные созданного заказа
Примеры вызова:
<?php
try {
$Client = new LapayGroup\MetaShipSdk\Client('9e687410-62d5-5139-b712-37e7766922c6', '2091dcf8c89e12a9b8815b9e2d48d212fc9b4082d2e54a0ea4e5da260f5244ba20541d6b2e829133', 60, \LapayGroup\MetaShipSdk\Client::API_URI_TEST);
$Client->getJwt();
// Минимальный набор данных в заказе
$order = new \LapayGroup\MetaShipSdk\Entity\Order();
$order->setWarehouseId('cb4b1999-063f-4824-91d1-90301bc6971a');
$order->setShopId('6d583c5d-0407-446a-ba69-741907f8171b');
$order->setNumber('ORD-123456');
$order->setWeight(1);
$order->setDeliveryServiceCode(\LapayGroup\MetaShipSdk\Enum\DeliveryServiceCode::BOXBERRY);
$order->setLastname('Иванов');
$order->setFirstname('Иван');
$order->setPhone('+79771234567');
$order->setPaymentType(\LapayGroup\MetaShipSdk\Enum\PaymentType::PAY_ON_DELIVERY);
$order->setDeclaredValue(999.99);
$order->setDeliverySum(0);
$order->setLength(10);
$order->setWidth(10);
$order->setHeight(10);
// Доставка курьером
$order->setDeliveryType(\LapayGroup\MetaShipSdk\Enum\DeliveryType::COURIER);
$order->setAddress('115551 Каширское шоссе 94к2, кв. 1');
// Доставка до ПВЗ
$order->setDeliveryType(\LapayGroup\MetaShipSdk\Enum\DeliveryType::DELIVERY_POINT);
$order->setPvzCode('12669');
// Доставка в отделение Почты России
$order->setDeliveryType(\LapayGroup\MetaShipSdk\Enum\DeliveryType::POST_OFFICE);
$order->setAddress('115551 Каширское шоссе 94к2, кв. 1');
// Создаем товар для места
$item = new \LapayGroup\MetaShipSdk\Entity\Item();
$item->setArticle('123456');
$item->setWeight(1);
$item->setName('Тестовый товар');
$item->setCount(1);
$item->setPrice(999.99);
$item->setVatRate(\LapayGroup\MetaShipSdk\Enum\Vat::VAT_20);
// Создаем место, добавляем в него товар и добавляем место в заказ
$place = new \LapayGroup\MetaShipSdk\Entity\Place();
$place->setItem($item);
$order->setPlace($place);
$result = $Client->createOrder($order);
/*
Успешный ответ
Array
(
[id] => 27f54969-f423-42e5-9975-b48ced0f6626
[type] => PendingOrder
[url] => /v2/pending_orders/27f54969-f423-42e5-9975-b48ced0f6626
[status] => 202
)
Ответ с ошибкой
Array
(
[type] => https://wiki.metaship.ru/api/errors/access-denied
[title] => Delivery service 'Boxberry' aggregation credential data are not found
[details] => Access to the requested resource is denied
[status] => 403
)
Ответ с ошибкой заполнения параметров
Array
(
[type] => https://wiki.metaship.ru/api/errors/constraint-violations
[title] => Constraint violations
[details] => Parameters of the request violate restrictions
[status] => 400
[invalid-parameters] => Array
(
[0] => Array
(
[parameter] => payment.type
[value] =>
[message] => This value should not be blank.
)
[1] => Array
(
[parameter] => payment.declaredValue
[value] =>
[message] => This value should not be blank.
)
[2] => Array
(
[parameter] => payment.deliverySum
[value] =>
[message] => This value should not be blank.
)
[3] => Array
(
[parameter] => dimension.length
[value] =>
[message] => This value should not be blank.
)
[4] => Array
(
[parameter] => dimension.width
[value] =>
[message] => This value should not be blank.
)
[5] => Array
(
[parameter] => dimension.height
[value] =>
[message] => This value should not be blank.
)
[6] => Array
(
[parameter] => recipient.firstName
[value] =>
[message] => This value should not be blank.
)
)
)
*/
}
catch (\LapayGroup\MetaShipSdk\Exceptions\MetaShipException $e) {
// Обработка ошибки вызова API MetaShip
// $e->getMessage(); текст ошибки
// $e->getCode(); http код ответа сервиса MetaShip
// $e->getRawResponse(); // ответ сервера MetaShip как есть (http request body)
}
catch (\Exception $e) {
// Обработка исключения
}
Входные параметры:
- string order_id - uuid заказа в системе MetaShip.
Выходные параметры:
- array - данные заказа
Примеры вызова:
<?php
try {
$Client = new LapayGroup\MetaShipSdk\Client('9e687410-62d5-5139-b712-37e7766922c6', '2091dcf8c89e12a9b8815b9e2d48d212fc9b4082d2e54a0ea4e5da260f5244ba20541d6b2e829133', 60, \LapayGroup\MetaShipSdk\Client::API_URI_TEST);
$Client->getJwt();
$result = $Client->getOrderInfo('6133fe6b-f8af-43e7-acab-5610d16dc662');
/* Успешный ответ
Array
(
[id] => 6133fe6b-f8af-43e7-acab-5610d16dc662
[number] => MS-9995649703
[addressTo] =>
[data] => Array
(
[request] => Array
(
[warehouse] => Array
(
[id] => cb4b1999-063f-4824-91d1-90301bc6971a
)
[shop] => Array
(
[id] => 6d583c5d-0407-446a-ba69-741907f8171b
[number] => ORD-123
[barcode] =>
)
[payment] => Array
(
[type] => PayOnDelivery
[declaredValue] => 4999.98
[deliverySum] => 0
[attribute] =>
)
[dimension] => Array
(
[length] => 10
[width] => 10
[height] => 10
)
[weight] => 1
[delivery] => Array
(
[type] => PostOffice
[service] => RussianPost
[tariff] => 4
[deliveryPointCode] =>
[date] =>
[time] =>
)
[recipient] => Array
(
[familyName] => Петров
[firstName] => Иван
[secondName] =>
[phoneNumber] => +79774445566
[email] =>
[address] => Array
(
[raw] => 115551 Каширское шоссе 81, кв. 2
)
)
[datePickup] =>
[pickupTimePeriod] =>
[comment] =>
[places] => Array
(
[0] => Array
(
[items] => Array
(
[0] => Array
(
[article] => 123456
[name] => Тестовый товар2
[price] => 2999.99
[count] => 1
[weight] => 1
[vat] => 20
)
[1] => Array
(
[article] => 123453
[name] => Тестовый товар3
[price] => 1999.99
[count] => 1
[weight] => 1
[vat] => 20
)
)
)
)
[services] =>
)
[deliveryService] =>
)
[parcel] =>
[status] => created
[statusReason] =>
[state] => failed
[stateMessage] => Отделение '101000' отсутствует в настройках
[created] => 2022-02-08T14:33:11+03:00
)
*/
}
catch (\LapayGroup\MetaShipSdk\Exceptions\MetaShipException $e) {
// Обработка ошибки вызова API MetaShip
// $e->getMessage(); текст ошибки
// $e->getCode(); http код ответа сервиса MetaShip
// $e->getRawResponse(); // ответ сервера MetaShip как есть (http request body)
}
catch (\Exception $e) {
// Обработка исключения
}
Входные параметры:
- string order_id - uuid заказа в системе MetaShip.
Выходные параметры:
- boolean - при успешном удалении true
Примеры вызова:
<?php
try {
$Client = new LapayGroup\MetaShipSdk\Client('9e687410-62d5-5139-b712-37e7766922c6', '2091dcf8c89e12a9b8815b9e2d48d212fc9b4082d2e54a0ea4e5da260f5244ba20541d6b2e829133', 60, \LapayGroup\MetaShipSdk\Client::API_URI_TEST);
$Client->getJwt();
$result = $Client->deleteOrder('a4975b4e-8e1b-4c1e-bf08-80af8426edeb');
}
catch (\LapayGroup\MetaShipSdk\Exceptions\MetaShipException $e) {
// Обработка ошибки вызова API MetaShip
// $e->getMessage(); текст ошибки
// $e->getCode(); http код ответа сервиса MetaShip
// $e->getRawResponse(); // ответ сервера MetaShip как есть (http request body)
}
catch (\Exception $e) {
// Обработка исключения
}
Входные параметры:
- string order_id - uuid заказа в системе MetaShip.
Выходные параметры:
- array - список статусов
Примеры вызова:
<?php
try {
$Client = new LapayGroup\MetaShipSdk\Client('9e687410-62d5-5139-b712-37e7766922c6', '2091dcf8c89e12a9b8815b9e2d48d212fc9b4082d2e54a0ea4e5da260f5244ba20541d6b2e829133', 60, \LapayGroup\MetaShipSdk\Client::API_URI_TEST);
$Client->getJwt();
$result = $Client->getOrderStatuses('27f54969-f423-42e5-9975-b48ced0f6626');
foreach ($result as $status) {
$status['name'] = \LapayGroup\MetaShipSdk\Helpers\OrderStatusHelper::getStatusByCode($status['status']); // Наименование статуса из API не возвращается
// Проверка статуса на признак "конечный"
if (\LapayGroup\MetaShipSdk\Helpers\OrderStatusHelper::isFinal($status['status'])) {
// Помечаем заказ, что проверка статусов больше не требуется
}
}
/*
Успешный ответ
// TODO
*/
}
catch (\LapayGroup\MetaShipSdk\Exceptions\MetaShipException $e) {
// Обработка ошибки вызова API MetaShip
// $e->getMessage(); текст ошибки
// $e->getCode(); http код ответа сервиса MetaShip
// $e->getRawResponse(); // ответ сервера MetaShip как есть (http request body)
}
catch (\Exception $e) {
// Обработка исключения
}
Входные параметры:
- string order_id - uuid заказа в системе MetaShip.
Выходные параметры:
- array - данные о заказе
Примеры вызова:
<?php
try {
$Client = new LapayGroup\MetaShipSdk\Client('9e687410-62d5-5139-b712-37e7766922c6', '2091dcf8c89e12a9b8815b9e2d48d212fc9b4082d2e54a0ea4e5da260f5244ba20541d6b2e829133', 60, \LapayGroup\MetaShipSdk\Client::API_URI_TEST);
$Client->getJwt();
$result = $Client->getOrderDetails('fe1bb9da-ad8a-448c-81aa-b47a8314605b');
/*
Успешный ответ
Array
(
[returnItems] =>
[returnReason] =>
[delayReason] =>
[paymentType] =>
[pickupDate] =>
)
*/
}
catch (\LapayGroup\MetaShipSdk\Exceptions\MetaShipException $e) {
// Обработка ошибки вызова API MetaShip
// $e->getMessage(); текст ошибки
// $e->getCode(); http код ответа сервиса MetaShip
// $e->getRawResponse(); // ответ сервера MetaShip как есть (http request body)
}
catch (\Exception $e) {
// Обработка исключения
}
Входные параметры:
- string order_id - uuid заказа в системе MetaShip.
Выходные параметры:
- array - данные о заказе
Примеры вызова:
<?php
try {
$Client = new LapayGroup\MetaShipSdk\Client('9e687410-62d5-5139-b712-37e7766922c6', '2091dcf8c89e12a9b8815b9e2d48d212fc9b4082d2e54a0ea4e5da260f5244ba20541d6b2e829133', 60, \LapayGroup\MetaShipSdk\Client::API_URI_TEST);
$Client->getJwt();
$result = $Client->createParcel(['fe1bb9da-ad8a-448c-81aa-b47a8314605b', '15344907-38f7-4086-a568-a48e0a034d6c'], '2022-02-19');
/**
* Array
(
[0] => Array
(
[id] => 6bd255cf-b4d1-4bb8-8f1a-53f4d0a5177b
[type] => Parcel
[url] => /v2/parcels/6bd255cf-b4d1-4bb8-8f1a-53f4d0a5177b
[status] => 201
)
)
*/
}
catch (\LapayGroup\MetaShipSdk\Exceptions\MetaShipException $e) {
// Обработка ошибки вызова API MetaShip
// $e->getMessage(); текст ошибки
// $e->getCode(); http код ответа сервиса MetaShip
// $e->getRawResponse(); // ответ сервера MetaShip как есть (http request body)
}
catch (\Exception $e) {
// Обработка исключения
}
Входные параметры:
- string order_id - uuid заказа в системе MetaShip.
Выходные параметры:
- GuzzleHttp\Psr7\UploadedFile - АПП в формате PDF
Примеры вызова:
<?php
try {
$Client = new LapayGroup\MetaShipSdk\Client('9e687410-62d5-5139-b712-37e7766922c6', '2091dcf8c89e12a9b8815b9e2d48d212fc9b4082d2e54a0ea4e5da260f5244ba20541d6b2e829133', 60, \LapayGroup\MetaShipSdk\Client::API_URI_TEST);
$Client->getJwt();
$result = $Client->getParcelAcceptance('6bd255cf-b4d1-4bb8-8f1a-53f4d0a5177b');
file_put_contents('/tmp/'.$result->getClientFilename(), $result->getStream()->getContents());
/**
* GuzzleHttp\Psr7\UploadedFile Object
(
[clientFilename:GuzzleHttp\Psr7\UploadedFile:private] => "acceptance.pdf".pdf
[clientMediaType:GuzzleHttp\Psr7\UploadedFile:private] => application/pdf
[error:GuzzleHttp\Psr7\UploadedFile:private] => 0
[file:GuzzleHttp\Psr7\UploadedFile:private] =>
[moved:GuzzleHttp\Psr7\UploadedFile:private] =>
[size:GuzzleHttp\Psr7\UploadedFile:private] => 23663
[stream:GuzzleHttp\Psr7\UploadedFile:private] => GuzzleHttp\Psr7\Stream Object
(
[stream:GuzzleHttp\Psr7\Stream:private] => Resource id #79
[size:GuzzleHttp\Psr7\Stream:private] => 23663
[seekable:GuzzleHttp\Psr7\Stream:private] => 1
[readable:GuzzleHttp\Psr7\Stream:private] => 1
[writable:GuzzleHttp\Psr7\Stream:private] => 1
[uri:GuzzleHttp\Psr7\Stream:private] => php://temp
[customMetadata:GuzzleHttp\Psr7\Stream:private] => Array
(
)
)
)
*/
}
catch (\LapayGroup\MetaShipSdk\Exceptions\MetaShipException $e) {
// Обработка ошибки вызова API MetaShip
// $e->getMessage(); текст ошибки
// $e->getCode(); http код ответа сервиса MetaShip
// $e->getRawResponse(); // ответ сервера MetaShip как есть (http request body)
}
catch (\Exception $e) {
// Обработка исключения
}