lapaygroup / ozon-rocket-sdk
SDK для работы с API транспортной компании Ozon Rocket (https://rocket.ozon.ru)
Requires
- php: ^7.2.5 || ^8.0
- ext-json: *
- guzzlehttp/guzzle: ^7.2
- psr/log: ^1.1
This package is auto-updated.
Last update: 2023-03-07 19:04:30 UTC
README
!!! ПРОЕКТ ЗАКРЫТ КОМПАНИЕЙ OZON !!!
SDK для интеграции с программным комплексом Ozon Rocket.
Посмотреть все проекты или подарить автору кофе можно тут.
Документация к API Ozon Rocket.
Содержание
Changelog
- 0.1.1 - Добавлен метод получения сроков доставки;
- 0.1.0 - Первая Alfa-версия SDK.
Установка
Для установки можно использовать менеджер пакетов Composer
composer require lapaygroup/ozon-rocket-sdk
Конфигурация
Для работы с API необходимо получить api-key у персонального менеджера при заключении договора.
По api-key необходимо получить токен в формате JWT и сохранить его. Токен живет 1 час с момента издания.
SDK позволяет сохранять JWT, для этого необходимо использовать Helper, который должен реализовывать JwtSaveInterface.
В SDK встроен Helper для сохранения токена в временный файл JwtSaveFileHelper.
try { // Инициализация API клиента с таймаутом ожидания ответа 60 секунд $Client = new LapayGroup\OzonRocketSdk\Client('ApiTest_11111111-1111-1111-1111-111111111111', 'SRYksX3PBPUYj73A6cNqbQYRSaYNpjSodIMeWoSCQ8U=', 60, \LapayGroup\OzonRocketSdk\Client::API_URI_TEST); $jwt = $Client->getJwt(); // $jwt = eyJhbGciOiJSUzI1NiIsImtpZCI6IjQyMmNhZDNiLTc2MjMtNGZhYy1hMWEwLTIwZTQxMGQxNDRjMCIsInR5cCI6ImF0K2p3dCJ9.eyJuYmYiOjE2NTUxMzAxNjQsImV4cCI6MTY1NTIxNjU2NCwiaXNzIjoiaHR0cHM6Ly9hcGktc3RnLm96b25ydS5tZS9wcmluY2lwYWwtYXV0aC1hcGkiLCJjbGllbnRfaWQiOiJBcGlUZXN0XzExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMSIsIkxvem9uVXNlck5hbWUiOiJBcGlVc2VyVGVzdDIiLCJMb3pvbkNvbnRyYWN0SWQiOiIyMjYwNDI1OTU3NjAwMCIsIkxvem9uUHJpbmNpcGFsSWQiOiIzNDUiLCJqdGkiOiJCOUFCNTUyMTVCMzlEQjBFMDM2OEI5NTk3QzE4QjFENiIsImlhdCI6MTY1NTEzMDE2NCwic2NvcGUiOlsiZGVsaXZlcnkucGFyYW1zLmFwaS5yZWFkIiwicHJpbmNpcGFsLmludGVncmF0aW9uLmFwaS5mdWxsIl19.IN6UV3rArlGSQD_fOFYT2c9FUPNx_LW_BMI7RqO7-rpT0_hbmh_PhxZedAdJs3ZRdc-kki5t2nR9p-GoQYWeVt30s5n-qeqpSigZvunf-TYmNMjl6Un0zSI0XY_9SMl-xTzUJ7DnwAGdWu9jWvusMoFI-vGUJB-wZIQzhCN1MeOq1gIgvc5Hd729fXe3hvlc683dsF-leoXgiIb3CV-kkSx6ASERZy7rw7ugs4LWhwphVCM2dvhMt8Ue1f35MkllgJaic9x6OU3JMIKlRdGFFdcPy9ZpWqmH34XpDoZCrHWnbndE-tFLc0fuXSIf0kNoJhaUrW5VJ7Gliu0_Rtv3sQ $result = \LapayGroup\OzonRocketSdk\Jwt::decode($jwt); // Получения информации из токена (payload) // Ранее полученный токен можно добавить в клиент специльным методом $Client->setJwt($jwt); // Токен можно сохранять в файл используя Helper $jwtHelper = new \LapayGroup\OzonRocketSdk\Helpers\JwtSaveFileHelper(); // Можно задать путь до временного файла отличный от заданного по умолчанию $jwtHelper->setTmpFile('/tmp/saved_jwt.txt'); $Client = new LapayGroup\OzonRocketSdk\Client('ApiTest_11111111-1111-1111-1111-111111111111', 'SRYksX3PBPUYj73A6cNqbQYRSaYNpjSodIMeWoSCQ8U=', 60, \LapayGroup\OzonRocketSdk\Client::API_URI_TEST, $jwtHelper); $jwt = $Client->getJwt(); // $jwt = eyJhbGciOiJSUzI1NiIsImtpZCI6IjQyMmNhZDNiLTc2MjMtNGZhYy1hMWEwLTIwZTQxMGQxNDRjMCIsInR5cCI6ImF0K2p3dCJ9.eyJuYmYiOjE2NTUxMzAxNjQsImV4cCI6MTY1NTIxNjU2NCwiaXNzIjoiaHR0cHM6Ly9hcGktc3RnLm96b25ydS5tZS9wcmluY2lwYWwtYXV0aC1hcGkiLCJjbGllbnRfaWQiOiJBcGlUZXN0XzExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMSIsIkxvem9uVXNlck5hbWUiOiJBcGlVc2VyVGVzdDIiLCJMb3pvbkNvbnRyYWN0SWQiOiIyMjYwNDI1OTU3NjAwMCIsIkxvem9uUHJpbmNpcGFsSWQiOiIzNDUiLCJqdGkiOiJCOUFCNTUyMTVCMzlEQjBFMDM2OEI5NTk3QzE4QjFENiIsImlhdCI6MTY1NTEzMDE2NCwic2NvcGUiOlsiZGVsaXZlcnkucGFyYW1zLmFwaS5yZWFkIiwicHJpbmNpcGFsLmludGVncmF0aW9uLmFwaS5mdWxsIl19.IN6UV3rArlGSQD_fOFYT2c9FUPNx_LW_BMI7RqO7-rpT0_hbmh_PhxZedAdJs3ZRdc-kki5t2nR9p-GoQYWeVt30s5n-qeqpSigZvunf-TYmNMjl6Un0zSI0XY_9SMl-xTzUJ7DnwAGdWu9jWvusMoFI-vGUJB-wZIQzhCN1MeOq1gIgvc5Hd729fXe3hvlc683dsF-leoXgiIb3CV-kkSx6ASERZy7rw7ugs4LWhwphVCM2dvhMt8Ue1f35MkllgJaic9x6OU3JMIKlRdGFFdcPy9ZpWqmH34XpDoZCrHWnbndE-tFLc0fuXSIf0kNoJhaUrW5VJ7Gliu0_Rtv3sQ } catch (\LapayGroup\FivePostSdk\Exceptions\FivePostException $e) { // Обработка ошибки вызова API 5post // $e->getMessage(); текст ошибки // $e->getCode(); http код ответа сервиса 5post // $e->getRawResponse(); // ответ сервера 5post как есть (http request body) } catch (\Exception $e) { // Обработка исключения }
Отладка
Для логирования запросов и ответов используется стандартный PSR-3 логгер. Ниже приведен пример логирования используя Monolog.
<?php use Monolog\Logger; use Monolog\Handler\StreamHandler; $log = new Logger('name'); $log->pushHandler(new StreamHandler('log.txt', Logger::INFO)); $Client = new LapayGroup\OzonRocketSdk\Client('ApiTest_11111111-1111-1111-1111-111111111111', 'SRYksX3PBPUYj73A6cNqbQYRSaYNpjSodIMeWoSCQ8U=', 60, \LapayGroup\OzonRocketSdk\Client::API_URI_TEST); $Client->setLogger($log); $jwt = $Client->getJwt(); // $jwt = eyJhbGciOiJSUzI1NiIsImtpZCI6IjQyMmNhZDNiLTc2MjMtNGZhYy1hMWEwLTIwZTQxMGQxNDRjMCIsInR5cCI6ImF0K2p3dCJ9.eyJuYmYiOjE2NTUxMzAxNjQsImV4cCI6MTY1NTIxNjU2NCwiaXNzIjoiaHR0cHM6Ly9hcGktc3RnLm96b25ydS5tZS9wcmluY2lwYWwtYXV0aC1hcGkiLCJjbGllbnRfaWQiOiJBcGlUZXN0XzExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMSIsIkxvem9uVXNlck5hbWUiOiJBcGlVc2VyVGVzdDIiLCJMb3pvbkNvbnRyYWN0SWQiOiIyMjYwNDI1OTU3NjAwMCIsIkxvem9uUHJpbmNpcGFsSWQiOiIzNDUiLCJqdGkiOiJCOUFCNTUyMTVCMzlEQjBFMDM2OEI5NTk3QzE4QjFENiIsImlhdCI6MTY1NTEzMDE2NCwic2NvcGUiOlsiZGVsaXZlcnkucGFyYW1zLmFwaS5yZWFkIiwicHJpbmNpcGFsLmludGVncmF0aW9uLmFwaS5mdWxsIl19.IN6UV3rArlGSQD_fOFYT2c9FUPNx_LW_BMI7RqO7-rpT0_hbmh_PhxZedAdJs3ZRdc-kki5t2nR9p-GoQYWeVt30s5n-qeqpSigZvunf-TYmNMjl6Un0zSI0XY_9SMl-xTzUJ7DnwAGdWu9jWvusMoFI-vGUJB-wZIQzhCN1MeOq1gIgvc5Hd729fXe3hvlc683dsF-leoXgiIb3CV-kkSx6ASERZy7rw7ugs4LWhwphVCM2dvhMt8Ue1f35MkllgJaic9x6OU3JMIKlRdGFFdcPy9ZpWqmH34XpDoZCrHWnbndE-tFLc0fuXSIf0kNoJhaUrW5VJ7Gliu0_Rtv3sQ $result = \LapayGroup\OzonRocketSdk\Jwt::decode($jwt);
В log.txt будут логи в виде:
[2022-06-13T14:15:21.219153+00:00] ozon-rocket-api.INFO: OzonRocket GET API request /principal-integration-api/v1/delivery/calculate?deliveryVariantId=1011000000001578&weight=500&fromPlaceId=18842715502000&estimatedPrice=1000 [] []
[2022-06-13T14:15:21.319264+00:00] ozon-rocket-api.INFO: OzonRocket API response /principal-integration-api/v1/delivery/calculate: {"amount":146.4} {"Server":["nginx"],"Date":["Mon, 13 Jun 2022 14:15:21 GMT"],"Content-Type":["application/json; charset=utf-8"],"Transfer-Encoding":["chunked"],"Connection":["keep-alive"],"Vary":["Accept-Encoding"],"Access-Control-Allow-Origin":["*"],"X-O3-Trace-Id":["ac9d2e1144903e5f"],"X-O3-App-Name":["principal-integration-api"],"X-O3-App-Version":["2022.06.09.8221"],"X-O3-App-Handler":["HTTP GET /v{version:apiVersion}/delivery/calculate"],"X-O3-App-Endpoint":["HTTP GET /v{version:apiVersion}/delivery/calculate"],"api-supported-versions":["1"],"Strict-Transport-Security":["max-age=36000"],"http_status":200} []
Расчет тарифа
Для расчета стоимости и сроков доставки используйте метод calculationTariff.
Входные параметры:
- $delivery_id (int) - ID ПВЗ получения заказа;
- $place_id (int) - ID места передачи заказа;
- $weight (int) - вес отправления в граммах;
- $valuation (float) - объявленная стоимость.
Выходные параметры:
- float - стоимость доставки
Примеры вызова:
<?php $Client = new LapayGroup\OzonRocketSdk\Client('ApiTest_11111111-1111-1111-1111-111111111111', 'SRYksX3PBPUYj73A6cNqbQYRSaYNpjSodIMeWoSCQ8U=', 60, \LapayGroup\OzonRocketSdk\Client::API_URI_TEST); $price = $Client->calculationTariff(1011000000001578, 18842715502000, 500, 1000); // 146.4
Расчет тарифа
Для расчета стоимости и сроков доставки используйте метод calculationTariff.
Входные параметры:
- $delivery_id (int) - ID ПВЗ получения заказа;
- $place_id (int) - ID места передачи заказа;
- $weight (int) - вес отправления в граммах;
- $valuation (float) - объявленная стоимость.
Выходные параметры:
- float - стоимость доставки
Примеры вызова:
<?php $Client = new LapayGroup\OzonRocketSdk\Client('ApiTest_11111111-1111-1111-1111-111111111111', 'SRYksX3PBPUYj73A6cNqbQYRSaYNpjSodIMeWoSCQ8U=', 60, \LapayGroup\OzonRocketSdk\Client::API_URI_TEST); $price = $Client->calculationTariff(1011000000001578, 18842715502000, 500, 1000); // 146.4
Получить информацию о сроках доставки
Для получить информацию о сроках доставки используйте метод getDeliveryPeriod.
Входные параметры:
- $delivery_id (int) - ID ПВЗ получения заказа;
- $place_id (int) - ID места передачи заказа;
Выходные параметры:
- int - срок доставки в днях
Примеры вызова:
<?php $Client = new LapayGroup\OzonRocketSdk\Client('ApiTest_11111111-1111-1111-1111-111111111111', 'SRYksX3PBPUYj73A6cNqbQYRSaYNpjSodIMeWoSCQ8U=', 60, \LapayGroup\OzonRocketSdk\Client::API_URI_TEST); $days = $Client->getDeliveryPeriod(1011000000001578, 18842715502000); // 9