glook / pecom-sdk
PHP SDK для работы с API ПЭК
Requires
- php: ^7.2 || ^8.0
- ext-json: *
- jane-php/open-api-runtime: ^6.3
- nyholm/psr7: ^1.8
- php-http/client-common: ^2.0
- php-http/discovery: ^1.14
- php-http/httplug: ^2.0
- psr/http-client: ^1.0
- psr/http-factory: ^1.0
- psr/http-message: ^1.0
- symfony/serializer: ^4.4 || ^5.0
Requires (Dev)
- cweagans/composer-patches: ^1.7
- jane-php/open-api-3: ^6.3.9
- php-cs-fixer/shim: ^3.95
- phpunit/phpunit: ^9.0
This package is auto-updated.
Last update: 2026-05-12 10:03:04 UTC
README
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
Регенерация SDK
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
Breaking Changes
Обработка HTTP-ошибок (текущая версия)
-
PecomErrorAwareHttpClient: HTTP-ответы со статусами4xx/5xxтеперь кидаютPecomApiException(илиPecomValidationExceptionдля 400). Потребители, ожидавшие возвратResponseInterfaceпри ошибочных HTTP-статусах, должны перейти наcatch (PecomApiException $e)и использовать$e->getResponse()для получения оригинального ответа. -
PecomApiExceptionтеперь реализуетPsr\Http\Client\ClientExceptionInterface. Стандартные плагины HTTPlug (ErrorPlugin,RetryPlugin,HistoryPlugin) теперь корректно обрабатывают эти исключения как HTTP-ошибки.