avto-dev / b2b-api-php
PHP package for a working with B2B API service
Installs: 17 028
Dependents: 1
Suggesters: 0
Security: 0
Stars: 3
Watchers: 1
Forks: 1
Open Issues: 0
Requires
- php: ^5.6 || >=7.0
- ext-curl: *
- ext-json: *
- guzzlehttp/guzzle: ^6.3
- nesbot/carbon: ^1.22
Requires (Dev)
- phpunit/phpunit: ~5.7.10 || ^6.4 || ~7.0 <7.5.0
- symfony/var-dumper: ~3.2 || ^4.0
Suggests
- avto-dev/b2b-api-php-laravel: Laravel package for a working with B2B API client.
README
THIS PACKAGE IS ABANDONED
And soon will be completely removed. New package is available here.
You must update your application soon as possible!
PHP-клиент для работы с B2B API
Данный пакет является реализацией клиента для работы с сервисом B2B API, значительно упрощающим работу с последним, предоставляя разработчику внятное API.
Все методы API сопровождены соответствующим @phpdoc
.
Установка
Для установки данного пакета выполните в терминале следующую команду:
$ composer require avto-dev/b2b-api-php "^2.5"
Для этого необходим установленный
composer
. Для его установки перейдите по данной ссылке.
Обратите внимание на то, что необходимо фиксировать мажорную версию устанавливаемого пакета.
Компоненты
Данный пакет состоит из следующих компонентов:
Название | Описание |
---|---|
Клиент | Реализует методы обращения к сервису B2B API |
HTTP-клиент | Реализует методы осуществления запросов по протоколу http (используется по умолчанию его реализация guzzle ) |
Справочники | Содержат основные значения (такие как типы запросов идентификаторов и так далее) |
Генераторы токенов | Производят генерацию токенов (авторизации на сервисе B2B API - в частности) |
Классы типов данных | К которым автоматически приводятся возвращаемые от сервиса данные (которые реализуют дополнительные методы-акцессоры), если это возможно. В противном случае всегда возвращается объект типа UnknownDataType ; |
Каждый компонент в той или иной мере автономен, и может использоваться отдельно от других при необходимости.
Жизненный цикл запроса
При создании инстанса клиента производится инициализация http-клиента и контейнеров-методов, каждый из которых отвечает за свою группу методов. Например, методы уровня пользователя вызываются с помощью $client->user()->someMethodName()
, в то время как команды, предназначенные для разработчиков, но повторяющие в некоторой степени команды уровня пользователя -- $client->dev()->user()->someMethodName()
. Таким образом, используя IDE для разработки, например, PHPStorm -- нажимая сочетание клавиш cmd
+ пробел
после каждого метода вы увидите как список тех команд, что он реализует, так и "вложенные" контейнеры со своими командами.
При вызове любого метода API производится проверка -- включен ли режим тестирования (параметр конфигурации is_test
), и если это так -- то реальный запрос не выполняется, а возвращается контент ответа из заранее подготовленных шаблонов, давая возможность произвести интеграцию с сервисом B2B API даже не имея учетной записи.
Как перед осуществлением запроса, так и после него -- производится выполнение всех callback-функций, что были зарегистрированы для http-клиента. Подробнее об их использовании смотрите исходный код.
В случае, если режим тестирования не активен - то производится запрос к сервису B2B API. Если запрос завершился не корректным кодом, или в его процессе "что-то пошло не так" - будет брошено исключение. Поэтому, во избежание "падения" ваших приложений -- оборачивайте все вызовы клиента в блок try { ... } catch (\Exception $e) { ... }
.
После получения ответа от B2B API -- вам возвращается объект типа B2BResponse
, который хранит в себе как "сырой" контент ответа в виде массива, так и базовые методы-акцессоры к данным в нём. Более того - если ответ содержит в себе блоки данных (контент отчета, статусная информация, прочее) -- он пытается разобрать тип вернувшихся данных и дает вам доступ к ним с помощью своего метода ->data()
. При его вызове вам вернется объект типа DataCollection
(коллекция данных), который реализует удобные методы для взаимодействия с последними -- получить их количество, извлечь первый элемент, перебрать все с помощью callback-функции и прочие.
В зависимости от того, какой тип данных "прилетел" в ответе от B2B API -- создастся объект соответствующего типа, со своими методами-акцессорами. Например, если вернулся контент отчета - вам будут доступны удобные методы для получения статусов источников, имен источников, получения состояния стадии генерации отчета, отдельный метод для извлечения данных по "путям филдов" и так далее. Самое важное -- это проверить тип объекта, что содержится в коллекции (его соответствие ожидаемому), и соответствии с ним использовать нужные методы-акцессоры.
Настройка
Для того, чтоб указать клиенту какую версию B2B API использовать, по какому URI, и некоторые другие опции -- необходимо передать их в конструктор класса клиента в виде массива определенной структуры. Пример структуры конфигурации вы можете наблюдать ниже:
<?php $configuration = [ 'api' => [ 'versions' => [ 'v1' => [ 'base_uri' => 'https://some.host/b2b/api/v1', ], ], ], 'use_api_version' => 'v1', // Блок 'client' используется *только* для функционального тестирования 'client' => [ 'domain' => '%имя_вашего_домена%', 'username' => '%имя_вашего_пользователя%', 'password' => '%пароль_вашего_пользователя%', 'report_type_uid' => '%uid_типа_отчета%', ], 'is_test' => false, ];
Использование
В качестве отправной точки вы можете использовать следующий пример:
<?php use AvtoDev\B2BApi\Clients\v1\Client; require __DIR__ . '/vendor/autoload.php'; $configuration = [/* настройки работы клиента */]; $client = new Client($configuration); $response = $client->dev()->ping(); var_dump($response);
Примеры
Ниже представлены некоторые примеры по работе с клиентом. Базовые операции -- проверить соединение с сервисом B2B API, заказать отчет, получить его контент:
<?php use AvtoDev\B2BApi\Tokens\AuthToken; use AvtoDev\B2BApi\Clients\v1\Client; use AvtoDev\B2BApi\References\QueryTypes; use AvtoDev\B2BApi\Responses\DataTypes\User\BalanceData; use AvtoDev\B2BApi\Responses\DataTypes\User\UserInfoData; use AvtoDev\B2BApi\Responses\DataTypes\Report\ReportData; use AvtoDev\B2BApi\Responses\DataTypes\Report\ReportStatusData; $configuration = [/* настройки работы клиента */]; $client = new Client($configuration); $token = AuthToken::generate('имя_пользователя', 'пароль', 'имя_домена'); $report_type_uid = 'uid_вашего_типа_отчета'; // Проверка соединения $response = $client->dev()->ping(); $result = $response->getValue('value'); // pong // Получение информации о текущем пользователе $user_info = $client->user()->info($token) ->data() ->first(); if ($user_info instanceof UserInfoData) { $result = $user_info->getDomainUid(); // Вернёт имя домена пользователя, строкой } // Проверка доступности квоты по UID-у типа отчета $client->user()->balance($token, $report_type_uid) ->data() ->each(function (BalanceData $balance_info) { if ($balance_info->isDailyBalance()) { // Получаем значение суточной квоты $quote_use = $balance_info->getQuoteUse(); } }); // Генерация нового отчета по ГРЗ 'A111AA177' $report_status = $client->user()->report()->make($token, QueryTypes::QUERY_TYPE_GRZ, 'A111AA177', $report_type_uid) ->data() ->first(); if ($report_status instanceof ReportStatusData) { $report_uid = $report_status->getUid(); // Вернёт UID отчета } // Получение имеющегося отчета $report = $client->user()->report()->get($token, $report_uid) ->data() ->first(); if ($report instanceof ReportData) { $sources = $report->getSourcesNames(); // Массив имен источников $is_completed = $report->generationIsCompleted(); // true, если генерация отчета завершена $vin_number = $report->getField('identifiers.vehicle.vin'); // Вернет VIN-номер ТС (при его наличии) $engine_kw = $report->getField('tech_data.engine.power.kw'); // Вернет мощность двигателя в КвТ $content = $report->getContent(); // Весь контент отчета, массивом }
Методов извлечения данных значительно больше, чем указано в примерах выше. Если вы используете современную IDE для разработки -- все они будут вам "подсказаны" с подробным описанием.
Тестирование
Для тестирования данного пакета используется фреймворк phpunit
. Для запуска тестов выполните в терминале:
$ composer test
Функциональное тестирование
Так же имеется возможность выполнения некоторых функциональных (выполняющих реальные запросы к сервису B2B API) тестов. Для этого выполните в терминале:
$ git clone git@github.com:avto-dev/b2b-api-php.git ./b2b-api-php && cd $_ $ composer install $ composer test
Создайте файл ./tests/env.php
с параметрами, которые будут использоваться клиентом (подробнее об этом смотрите в
разделе "настройка"), указав значение is_test
равным false
. После чего выполните в терминале:
$ php ./vendor/bin/phpunit --group=feature
Changes log
Changes log can be found here.
Support
If you will find any package errors, please, make an issue in current repository.
License
This is open-sourced software licensed under the MIT License.