PHP SDK для работы с API транспортной компании ПЭК (https://kabinet.pecom.ru/api/v1).
Низкоуровневый клиент сгенерирован из OpenAPI 3.0.3 спецификации через Jane. Поверх него добавлен ручной фасад, который скрывает детали HTTP, аутентификации и обработки ошибок.
- PHP
^7.2 || ^8.0 - расширение
ext-json - любой PSR-18 HTTP-клиент (например,
symfony/http-client,guzzlehttp/guzzle,php-http/curl-client) — будет найден автоматически черезphp-http/discovery
composer require glook/pecom-sdkЕсли в проекте ещё нет PSR-18 клиента, добавьте любой:
composer require symfony/http-client nyholm/psr7<?php
use glook\PecomSdk\Client\PecomClientFactory;
use glook\PecomSdk\Exception\PecomApiException;
use glook\PecomSdk\Exception\PecomValidationException;
require __DIR__ . '/vendor/autoload.php';
$client = PecomClientFactory::create('your_login', 'your_password');
try {
$branches = $client->raw()->branchesAll();
foreach ($branches as $branch) {
echo $branch->getTitle() . PHP_EOL;
}
} catch (PecomValidationException $e) {
// 4xx — невалидные данные запроса
echo 'Validation error: ' . $e->getMessage();
print_r($e->getPayload());
} catch (PecomApiException $e) {
// прочие ошибки API ПЭК
echo 'API error: ' . $e->getMessage();
}PecomClientFactory::create() принимает третий необязательный аргумент — собственный Psr\Http\Client\ClientInterface, если автодискавери не подходит:
$client = PecomClientFactory::create($login, $password, $myHttpClient);src/
Client/
PecomClient.php # фасад поверх Generated\Client
PecomClientFactory.php # сборка HTTP-стека и аутентификации
Http/
PecomErrorAwareHttpClient.php # PSR-18 декоратор: бросает Pecom*Exception
Exception/
PecomApiException.php
PecomValidationException.php
generated/ # Jane-сгенерированный код, namespace glook\PecomSdk\Generated
Client.php
Endpoint/
Model/
Normalizer/
Runtime/
Authentication/
Exception/
- Ручной код живёт в
src/подglook\PecomSdk\*. - Generated-код живёт в
generated/подglook\PecomSdk\Generated\*и считается disposable — его можно безопасно удалить и перегенерировать. - Прямой доступ к низкоуровневому клиенту:
$client->raw()→glook\PecomSdk\Generated\Client.
API ПЭК использует Basic Auth (логин и пароль личного кабинета). Они передаются в PecomClientFactory::create() и автоматически добавляются в каждый запрос через AuthenticationRegistry + BasicAuthAuthentication.
PecomErrorAwareHttpClient оборачивает PSR-18 клиент и анализирует ответы API ПЭК:
| HTTP статус | Исключение |
|---|---|
4xx (валидация) |
PecomValidationException |
| прочие ошибки | PecomApiException |
Оба исключения расширяют RuntimeException и предоставляют:
getMessage()/getCode()— стандартные методы исключенияgetTitle()— заголовок ошибки от ПЭК (если есть)getPayload()— массив с телом ответаgetResponse()— оригинальныйPsr\Http\Message\ResponseInterface
OpenAPI-спецификация лежит в корне монорепы (dist/pecom.json), собирается через npm run build в корне проекта.
После обновления спецификации:
cd packages/php-sdk
composer generateСкрипт:
- запускает
jane-openapi generate --config-file=jane-config.php; - полностью пересоздаёт
generated/(опцияclean-generated); - вызывает
composer dump-autoload.
Конфигурация Jane — в jane-config.php. Изменения в generated/ руками не делать — будут потеряны при следующей генерации.
# тесты
vendor/bin/phpunit
# code style
composer cs