magdv / kontur-logistics
Kontur.Logistics API implementation
1.0.15
2026-09-07 07:12 UTC
Requires
- php: >=8.0
- ext-curl: *
- ext-json: *
- ext-simplexml: *
- jms/serializer: ^3.21
- nyholm/psr7: ^1.5
- php-http/multipart-stream-builder: ^1.2
- psr/http-client: ^1.0
Requires (Dev)
- ext-dom: *
- guzzlehttp/guzzle: ^7.5
- overtrue/phplint: ^2.0
- phpunit/phpunit: ^8.5
- ramsey/uuid: 4.2
- rector/rector: ^2.2
- squizlabs/php_codesniffer: ^3.5
- vimeo/psalm: ^3.8
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-09-07 07:12:45 UTC
README
Внимание!!!
Библиотека пока активно редактируется и могут быть несовместимые изменения. Учтите этот момент.
Пример отправки ТРН
Надо сделать свой локальный класс для сериализатора declare(strict_types=1); use GuzzleHttp\Client; use MagDv\Logistics\ClientConfig; class LocalConfig extends ClientConfig { public function getCachePath(): ?string { return 'dfdf/df/df/df'; // здесь указываем путь, куда кешируем. Не обязательно, но желательно. Влияет на скорость } public function getIsDebug(): bool { return false; // тут надо указать, включать ли дебаг в дев режиме можете включить, чтобы видеть ошибки } public function getUrl(): string { return 'URL к апи'; } public function getApiKey(): string { return 'apiKey'; } public function getClient(): HttpClientInterface { // PSR-18 совместимый клиент return new Client(); } } $request = new SendWaybillRequest(); $request->waybill = 'xml content'; $request->waybillFileName = 'name.xml'; $request->waybillSignFileName = 'sign_name.sig'; $request->waybillSign = 'sig_content'; $logistics = new LogisticsDocuments(new LocalConfig()); $response = $logistics->sendWaybill($request); // Текущий статус ответа echo $response->statusCode; // Проверка, что удачный запрос echo $response->isOk(); // Проверка статуса и вывод ошибки if (!$response->isOk()) { echo $response->error->message; } $response->transportationId;
Сделаны и протестированы методы
Минтранс
GET v1/mintransgateway/uuid
Документы (Транспортные накладные)
POST v1/documents/waybill— Отправка ТРНPOST v1/documents/waybill/draft— Черновик документа
Перевозки
GET v1/transportations— Список перевозокGET v1/transportations/{id}— Информация о перевозкеGET v1/transportations/{id}/print-form— Печатная форма ТРНGET v1/transportations/{id}/titles/{titleId}— Титул грузополучателяGET v1/transportations/{id}/full-docflow— Полный документооборот перевозкиPUT v1/transportations/{id}/archive— Архивация/разархивация перевозкиPOST v1/transportations/documents/draft— Черновик документов для перевозки
Организации
GET v1/organizations/requisites— Реквизиты организации
Логирование HTTP-запросов
Логер опционален: если getLogger() возвращает null, запросы идут без логирования.
Чтобы включить логирование, реализуйте HttpLoggerInterface и верните его из конфига:
use MagDv\Logistics\Entities\Http\HttpLogDto; use MagDv\Logistics\Interfaces\HttpLoggerInterface; use MagDv\Logistics\Logger\StdoutHttpLogger; class LocalConfig extends ClientConfig { // ... остальные методы ... public function getLogger(): ?HttpLoggerInterface { // готовый пример — пишет в STDOUT return new StdoutHttpLogger(); // или свой логер: // return new class implements HttpLoggerInterface { // public function log(HttpLogDto $log): void // { // // $log->url, $log->method, $log->params, $log->response, $log->statusCode // } // }; } }
В HttpLogDto передаётся:
url— полный URI запросаmethod— HTTP-методparams— тело запроса (илиnull, если пусто)response— тело ответаstatusCode— HTTP-код ответа
После логирования библиотека возвращает stream ответа в начало, отдельно делать rewind не нужно.
Работа с ошибками
Класс Error содержит метод getAllErrorMessagesByJsonString(), который возвращает полный список ошибок в JSON-формате:
if (!$response->isOk()) { // Отдельное сообщение echo $response->error->message; // Все ошибки в JSON echo $response->error->getAllErrorMessagesByJsonString(); }