1. Go to this page and download the library: Download lapaygroup/metaship-sdk library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
lapaygroup / metaship-sdk example snippets
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) {
// Обработка исключения
}
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);
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) {
// Обработка исключения
}
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) {
// Обработка исключения
}
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) {
// Обработка исключения
}
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) {
// Обработка исключения
}