Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

lapaygroup/RussianPost

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

212 Commits

Repository files navigation




Latest Stable Version Total Downloads License Telegram Chat

SDK для интеграции с программным комплексом Почты России.

Посмотреть все проекты или подарить автору кофе можно тут.

Содержание

Changelog

  • 1.0.2 - Исправлен Null в методе createBatch(). За внимательность спасибо petrovich24;
  • 1.0.1 - Исправлена работа clean функций после обновления;
  • 1.0.0 - Описание можно посмотреть тут;
  • 0.9.23 - Добавлена поддержка Guzzle 7.*;
  • 0.9.22 - Добавлена поддержка Guzzle 7.8 в зависимостях Composer;
  • 0.9.21 - Обновлены зависимости psr/log, решение issue #46, актуализирован список статусов отправлений, добавлены новые конечные статусы Почты России;
  • 0.9.20 - Исправлена совместимость с PHP 8.2 и добавлена поддержка Guzzle 7.5 в зависимостях Composer. За исправление спасибо NickMitin;
  • 0.9.19 - Добавлена поддержка Guzzle 7.4 в зависимостях Composer;
  • 0.9.18 - Испралвена передача ecom-data. За исправление спасибо Stanislav Naumuk;
  • 0.9.17 - Испралвены ошибки в сеттерах у Item.php. За исправление спасибо SERGEY;
  • 0.9.16 - Актуализированы свойства вложения в заказ. За исправление спасибо SERGEY;
  • 0.9.15 - Добавлена возможность задать таймаут в тарификаторе. За исправление спасибо DarWiM;
  • 0.9.14 - Добавлена поддержка Guzzle 7.3 в зависимостях Composer;
  • 0.9.13 - Добавлено поле комментарий к заказу при создании заказа V1 и V2;
  • 0.9.12 - Исправлена ошибка с отсутствующим $result->historyRecord в ответе API Почты. За исправление спасибо Nikita Burichenko;
  • 0.9.11 - Добавлена поддержка Guzzle 7.2 в зависимостях Composer;
  • 0.9.10 - Добавлена поддержка флага useOnlineBalance в методе отправки электронной формы Ф103;
  • 0.9.9 - Исправлена ошибка при переключении клиента в трекинге. За исправление спасибо Alliance-X;
  • 0.9.8 - Исправлены функции для работы с ОПС. За обнаружение и исправление спасибо Sergey Voronov;
  • 0.9.7 - Исправлена работы GET методов API. За обнаружение спасибо GrayWolfy;
  • 0.9.6 - Добавлена функция создания заказа V2 с возвратом ШК и номеров клиентской ИС, спасибо GrayWolfy за помощь;
  • 0.9.5 - Актуализирован список статусов отправления, изменено поведение пакетного трекинга, подробнее тут;
  • 0.9.4 - Добавлена поддержка Guzzle 7.1 в зависимостях Composer;
  • 0.9.3 - Добавлена поддержка Guzzle 7 в зависимостях Composer;
  • 0.9.2 - У заказа у вложений в декларацию добавлено новое поле trademark (Торговая марка), спасибо PankovAlxndr за актуализацию;
  • 0.9.1 - Актуализация списка статусов отправления, добавлена генерация печатных форм для заказа до формирования партии, подробнее тут;
  • 0.9.0 - Актуализация списка статусов отправления, легкий возврат, выгрузка из паспорта ОПС, подробнее тут;
  • 0.8.6 - Исправление ошибки API отправки с desc в ответе вместо sub-code;
  • 0.8.5 - Зависимость с Guzzle 6.3+ вместо строгой 6.3;
  • 0.8.3 - Доработана поддержка расчета тарифов для посылок EKOM, спасибо Konstantin Shevsky за доработку;
  • 0.8.2 - Актуализированы параметры запроса и ответа тарификатора, за актуализацию выражаем благодарность Konstantin Shevsky;
  • 0.8.1 - Добавлена функция получения списка ПВЗ для ЕКОМ, исправлена ошибка создания http-клиента к API;
  • 0.8.0 - Описание можно посмотреть тут;
  • 0.7.4 - Добавлено сохранение ошибок расчета тарифа в объект CalculateInfo с разделением на сообщение и код ошибки;
  • 0.7.3 - Исправлена ошибка при сохранении документов;
  • 0.7.2 - Актуализирован список статусов отправлений Почты России;
  • 0.7.1 - Доработана генерация RussianPostException, спасибо toporchillo за исправление. Добавлена расширенная информация в логировании;
  • 0.7.0 - Описание можно посмотреть тут;
  • 0.6.6 - Исправлено формирование и проверка параметров для запроса на создание заказа;
  • 0.6.5 - Реализованы функции работы с архивом;
  • 0.6.0 - Долгожданная работа с заказами, подробнее тут;
  • 0.5.4 - Правки composer.json;
  • 0.5.3 - Описание можно посмотреть тут;
  • 0.5.2 - Исправлена ошибка получения информации о сроках доставки в формате HTML;
  • 0.5.1 - Описание можно посмотреть тут;
  • 0.5.0 - Описание можно посмотреть тут;
  • 0.4.12 - Скорректировано описание упрощенной версии расчета тарифов, добавлен метод получения списка точек сдачи;
  • 0.4.11 - Актуализирован список статусов Почты России;
  • 0.4.10 - Актуализирован расчет стоимости пересылки (Упрощенная версия), за актуализацию спасибо rik43;
  • 0.4.9 - Исправлена ошибка выставления флага isFinal в пакетном трекинге отправлений, за обнаружение спасибо Dmitry Sobchenko;
  • 0.4.8 - Изменен адрес калькулятора Почты России, старый будет отключен 01.01.2019;
  • 0.4.7 - Актуализация списка статусов;
  • 0.4.6 - Было принято решение исключить зависимость с symfony/yaml и понизить требуемую версию PHP до 5.5+. Подробнее в разделе Конфигурация;
  • 0.4.5 - Актуализация списка статусов, признак конечного статуса в пакетном трекинге;
  • 0.4.0 - Единичный и пакетный трекинг отправлений;
  • 0.3.0 - Нормализация данных, упрощенный расчет стоимости отправки;
  • 0.2.0 - Расчет стоимости отправки тарификатором Почты России.

Установка

Для установки можно использовать менеджер пакетов Composer

composer require lapaygroup/russianpost

Тарификатор Почты России

Получения списка видов отправления

Для получения списка категорий нужно вызвать метод parseToArray класса \LapayGroup\RussianPost\CategoryList

<?php
 $CategoryList = new \LapayGroup\RussianPost\CategoryList();
 $categoryList = $CategoryList->parseToArray();
?>

В $categoryList мы получим ассоциативный массив из категорий, их подкатегорий и видов почтовых отправлений с возможными опциями и списком параметров, которые нужно передать для расчета тарифа. По этим данным можно легко и быстро построить форму-калькулятор аналогичную тарификатору Почты России.

Если нужно исключить категории из выборки, то перед вызовом parseToArray вызываем метод setCategoryDelete и передаем ему массий ID категорий, которые нужно исключить.

<?php
 $CategoryList = new \LapayGroup\RussianPost\CategoryList();
 $CategoryList->setCategoryDelete([100,200,300]);
 $categoryList = $CategoryList->parseToArray();
?>

Расчет стоимости отправки

objectId, список параметров в $params и список дополнительных услуг $service берутся из массива $categoryList.

<?php
try {
 $objectId = 23030; // Посылка онлайн обыкновенная
 // Минимальный набор параметров для расчета стоимости отправления c доставкой
 $params = [
 'weight' => 600, // Вес в граммах
 'sumoc' => 10000, // Сумма объявленной ценности в копейках
 'from' => 109012, // Почтовый индекс места отправления
 'to' => 115551
 ];
 // Список ID дополнительных услуг
 // 2 - Заказное уведомление о вручении
 // 21 - СМС-уведомление о вручении
 // 42 - Пакет СМС уведомлений получателю при единичном приеме
 $services = [42];
 $TariffCalculation = new \LapayGroup\RussianPost\TariffCalculation();
 // Расчет с сроками доставки
 $calcInfo = $TariffCalculation->calculate($objectId, $params, true, $services);
 // Расчет без сроков доставки
 $calcInfo = $TariffCalculation->calculate($objectId, $params, false, $services);
 /*
 LapayGroup\RussianPost\CalculateInfo Object
 (
 [version:LapayGroup\RussianPost\CalculateInfo:private] => 2.16.11.700
 [categoryItemId:LapayGroup\RussianPost\CalculateInfo:private] => 23030
 [categoryItemName:LapayGroup\RussianPost\CalculateInfo:private] => Посылка онлайн обыкновенная
 [weight:LapayGroup\RussianPost\CalculateInfo:private] => 600
 [transportationID:LapayGroup\RussianPost\CalculateInfo:private] =>
 [transportationName:LapayGroup\RussianPost\CalculateInfo:private] => Наземно
 [pay:LapayGroup\RussianPost\CalculateInfo:private] => 118.00
 [payNds:LapayGroup\RussianPost\CalculateInfo:private] => 141.60
 [payMark:LapayGroup\RussianPost\CalculateInfo:private] => 0
 [ground:LapayGroup\RussianPost\CalculateInfo:private] => 118.00
 [groundNds:LapayGroup\RussianPost\CalculateInfo:private] => 141.60
 [cover:LapayGroup\RussianPost\CalculateInfo:private] => 0
 [coverNds:LapayGroup\RussianPost\CalculateInfo:private] => 0
 [service:LapayGroup\RussianPost\CalculateInfo:private] => 0
 [serviceNds:LapayGroup\RussianPost\CalculateInfo:private] => 0
 [deliveryPeriodMin:LapayGroup\RussianPost\CalculateInfo:private] => 1
 [deliveryPeriodMax:LapayGroup\RussianPost\CalculateInfo:private] => 1
 [deliveryDeadLine:LapayGroup\RussianPost\CalculateInfo:private] => DateTime Object
 (
 [date] => 2024年02月19日 20:00:00.000000
 [timezone_type] => 3
 [timezone] => UTC
 )

 [tariffList:LapayGroup\RussianPost\CalculateInfo:private] => Array
 (
 [0] => LapayGroup\RussianPost\Tariff Object
 (
 [id:LapayGroup\RussianPost\Tariff:private] => 3062
 [name:LapayGroup\RussianPost\Tariff:private] => Плата за доставку посылки онлайн
 [value:LapayGroup\RussianPost\Tariff:private] => 118.00
 [valueNds:LapayGroup\RussianPost\Tariff:private] => 141.60
 [valueMark:LapayGroup\RussianPost\Tariff:private] => 0.00
 )

 )

 )
 */
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostTarrificatorException $e) {
 // Обработка ошибок тарификатора
 $errors = $e->getErrors(); // Массив вида [['msg' => 'текст ошибки', 'code' => код ошибки]]
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}
?>

$calcInfo - это объект класса LapayGroup\RussianPost\CalculateInfo Доступные методы:

  • getCategoryItemId() - ID вида отправления
  • getCategoryItemName() - название вида отправления
  • getWeight() - вес отправления в граммах
  • getTransportationName() - способ пересылки
  • getPay() - итого стоимоть без НДС
  • getPayNds() - итого стоимоть c НДС
  • getPayMark() - итого стоимость при оплате марками
  • getGround() - почтовый сбор без НДС
  • getGroundNds() - почтовый сбор с НДС
  • getCover() - страхование без НДС
  • getCoverNds() - страхование с НДС
  • getService() - дополнительные услуги без НДС
  • getServiceNds() - ополнительные услуги с НДС
  • getTariffList() - массив тарифов из которых складывается итоговая стоимость доставки

Массив тарифов состоит из объектов класса LapayGroup\RussianPost\Tariff Доступные методы:

  • getId() - ID тарифа
  • getName() - название тарифа
  • getValue() - стоимость без НДС
  • getValueNds() - стоимость с НДС
  • getValueMark() - стоимость при оплате марками

Полученная информация может быть отображена так:

Процесс тарификации: Способ пересылки: НАЗЕМНО (код РТМ2: 1). Плата за пересылку письма с объявленной ценностью /230/ : 106.20 с НДС Плата за объявленную ценность /215/ : 3.54 с НДС Заказное уведомление о вручении /213/ услуга 2: 56.64 с НДС СМС-уведомление о вручении /119/ услуга 21: 10.00 с НДС

Результат: Почтовый сбор: 106.20 (с НДС). Страхование: 3.54 (с НДС). Дополнительные услуги: 66.64 (с НДС). Итого сумма без НДС: 149.47. Итого сумма с НДС 18%: 176.38.

Конфигурация

Для использования сервисов Почты России, не считая тарификатор, необходимы аутентификационные данные. Их можно хранить в ассоциативном массиве или yaml-файле. В примерах ниже я буду использовать yaml-файл, а парсить его с помощью symfony/yaml.

Информацию о аутентификационных данных можно получить здесь и здесь.

На запросы к API отправки Почтой России установлены лимиты на количество запросов в сутки. Для их увеличения необходимо написать письмо на почту support.parcel@russianpost.ru.

Отладка

Для логирования запросов и ответов используется стандартный PSR-3 логгер. Рассмотрим пример логирования используя Monolog.

<?php
 use Monolog\Logger;
 use Monolog\Handler\StreamHandler;
 $log = new Logger('name');
 $log->pushHandler(new StreamHandler('log.txt', Logger::INFO));
 // Логирование расчета тарифа
 $tariffCalculation = new \LapayGroup\RussianPost\TariffCalculation();
 $tariffCalculation->setLogger($log);
 $res = $tariffCalculation->calculate(23030, ['from' => 101000, 'to' => 101000, 'weight' => 100, 'sumoc' => 0]);
 // Логирования API отправки
 $otpravkaApi = new \LapayGroup\RussianPost\Providers\OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $otpravkaApi->setLogger($log);
 $addressList = new \LapayGroup\RussianPost\AddressList();
 $addressList->add('115551 Кширское шоссе 94-1, 1');
 $result = $otpravkaApi->clearAddress($addressList);
 // Логирование API трекинга
 $config['auth']['tracking']['login'] = 'login';
 $config['auth']['tracking']['password'] = 'password';
 $Tracking = new \LapayGroup\RussianPost\Providers\Tracking('single', $config);
 $Tracking->setLogger($log);
 $result = $Tracking->getOperationsByRpo('10944022440321');

Лог в файле выглядит так:

[2019年09月26日 12:00:59] name.INFO: Russian Post Tariff API GET request /v1/calculate: from=101000&to=101000&weight=100&sumoc=0&date=20190926&object=23030&jsontext=1 [] []
[2019年09月26日 12:01:04] name.INFO: Russian Post Tariff API GET response /v1/calculate: {"caption": "Ошибки тарификации", "version": "1.11.37.333", "data": {"id": 23030, "typ": 23, "cat": 3, "dir": 0, "name": "Посылка онлайн обыкновенная", "seq": 50, "date": 20190926, "date-first": 20190821}, "error": ["Неверное значение параметра \"Индекс места отправления\" (from). Не указано значение. (1301)"], "errors": [{"msg":"Неверное значение параметра \"Индекс места отправления\" (from). Не указано значение.","code":1301}]} {"Server":["nginx"],"Date":["Thu, 26 Sep 2019 12:00:53 GMT"],"Content-Type":["text/plain;charset=utf-8"],"Content-Length":["603"],"Connection":["keep-alive"],"Access-Control-Allow-Origin":["*"],"http_status":200} []
[2019年09月26日 11:59:10] name.INFO: Russian Post Otpravka API POST request /1.0/tariff: {"fragile":true,"index-from":109440,"index-to":644015,"mail-category":"ORDINARY","mail-type":"POSTAL_PARCEL","mass":1000,"payment-method":"CASHLESS","with-order-of-notice":false,"with-simple-notice":false} [] []
[2019年09月26日 11:59:11] name.INFO: Russian Post Otpravka API POST response /1.0/tariff: { "delivery-time" : { "max-days" : 3, "min-days" : 1 }, "fragile-rate" : { "rate" : 7075, "vat" : 1415 }, "ground-rate" : { "rate" : 30658, "vat" : 6132 }, "notice-payment-method" : "CASHLESS", "payment-method" : "CASHLESS", "total-rate" : 30658, "total-vat" : 6132 } {"Server":["nginx"],"Date":["Thu, 26 Sep 2019 11:59:11 GMT"],"Content-Type":["application/json;charset=UTF-8"],"Transfer-Encoding":["chunked"],"Connection":["keep-alive"],"Expires":["0"],"Cache-Control":["no-cache, no-store, max-age=0, must-revalidate"],"X-XSS-Protection":["1; mode=block"],"Pragma":["no-cache"],"X-Frame-Options":["DENY"],"X-Content-Type-Options":["nosniff"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"http_status":200} []
[2019年07月19日 12:14:10] name.INFO: Russian Post Tracking API request: <?xml version="1.0" encoding="UTF-8"?> <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://russianpost.org/operationhistory/data" xmlns:ns2="http://russianpost.org/operationhistory"><env:Body><ns2:getOperationHistory><ns1:OperationHistoryRequest><ns1:Barcode>10944022440321</ns1:Barcode><ns1:MessageType>0</ns1:MessageType><ns1:Language>RUS</ns1:Language></ns1:OperationHistoryRequest><ns1:AuthorizationHeader><ns1:login>login</ns1:login><ns1:password>password</ns1:password></ns1:AuthorizationHeader></ns2:getOperationHistory></env:Body></env:Envelope> [] []

Трекинг почтовых отправлений (РПО)

Реализует функции API Почты России для работы с отправлениями. Для работы данных функций необходим конфигурационный файл с логином и паролем от сервиса Почты России.

Для работы используется экземпляр класса LapayGroup\RussianPost\Providers\Tracking.

Входные параметры:

  • $service - Единочный (single) / Пакетный (pack);
  • $config - Массив данных для подключения к API;
  • $timeout - Таймаут HTTP соединения, по умолчанию 60 сек. (Для сервисов Почты России лучше использовать 120 сек.).

Единичный доступ

Метод getOperationsByRpo используется для получения информации о конкретном отправлении. Возвращает подробную информацию по всем операциям, совершенным над отправлением. Пример вызова:

<?php
 use Symfony\Component\Yaml\Yaml;
 use LapayGroup\RussianPost\Providers\Tracking;
 $Tracking = new Tracking('single', Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $Tracking->getOperationsByRpo('10944022440321');
?>

$result - Массив с объектами операций над отправлением в формате Почты России.

Метод getNpayInfo позволяет получить информацию об операциях с наложенным платежом, который связан с конкретным почтовым отправлением.

Пример вызова:

<?php
 use Symfony\Component\Yaml\Yaml;
 use LapayGroup\RussianPost\Providers\Tracking;
 $Tracking = new Tracking('single', Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $Tracking->getNpayInfo('10944022440321');
?>

$result - Массив с объектами операций с наложенным платежом в формате Почты России.

Пакетный доступ (включается через поддержу почты или через заявку на странице трекинга)

Метод getTickets создает заявку в сервисе Почты России на предоставление информации по всем операциям по списку отправлений. На практике сервис Почты России не может отдать ответ по заявке с 3000 отправлений на финальной стадии из-за размера HTTP пакета, поэтому данная функция разбивает список на части по 500 отправлений в каждой и создает по каждой заявку.

Пример вызова:

<?php
 use Symfony\Component\Yaml\Yaml;
 use LapayGroup\RussianPost\Providers\Tracking;
 $Tracking = new Tracking('pack', Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $Tracking->getTickets(['10944022440321', '11172522364055', '10944022490302']);
?>

$result - Ассоциативный массив данных, который содержит ключи:

  • tickets - одномерный массив с номерами успешно созданных заявок
  • not_create - одномерный массив с номерами РПО, по которым не удалось создать заявку (на практике бывает часто, требуется повторный запрос на создание по этим РПО)
Array
(
 [not_create] => Array
 (
 )
 [tickets] => Array
 (
 [0] => 20180506151902355WANVOUGROWKXUN
 )
)

Метод getOperationsByTicket возвращает массив с информацией по отправлениям по ранее созданной заявке.

Пример вызова:

<?php
 use Symfony\Component\Yaml\Yaml;
 use LapayGroup\RussianPost\Providers\Tracking;
 $Tracking = new Tracking('pack', Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $Tracking->getOperationsByTicket('20180506151902355WANVOUGROWKXUN');
?>

$result - Ассоциативный массив данных ключи которого - номера РПО, а значение - массив объектов в формате Почты России расширенный свойствами:

  • OperCtgName - текстовое название подтипа операции;
  • isFinal - признак конечного статуса (после получения запрашивать статусы у этого РПО не требуется).
Array
(
 [10944022440321] => Array
 (
 [0] => stdClass Object
 (
 [OperTypeID] => 1
 [OperCtgID] => 2
 [OperName] => Прием
 [DateOper] => 28.04.2018 19:48:47
 [IndexOper] => 109440
 [OperCtgName] => Партионный
 [isFinal] => false
 )

Данные

Реализует функции API Почты России для работы с данными. Для работы данных функций необходимы аутентификационные данные. Подробнее в разделе Конфигурация.

В случае возникновеня ошибок при обмене выбрасывает исключение \LapayGroup\RussianPost\Exceptions\RussianPostException в котором будет текст и код ошибки от API Почты России и дамп сырого ответа с HTTP-кодом.

Нормализация адреса

Разделяет и помещает сущности переданных адресов (город, улица) в соответствующие поля возвращаемого объекта. Параметр id (идентификатор записи) используется для установления соответствия переданных и полученных записей, так как порядок сортировки возвращаемых записей не гарантируется. Метод автоматически ищет и возвращает индекс близлежащего ОПС по указанному адресу.

Адрес считается корректным к отправке, если в ответе запроса:

  • quality-code=GOOD, POSTAL_BOX, ON_DEMAND или UNDEF_05;
  • validation-code=VALIDATED, OVERRIDDEN или CONFIRMED_MANUALLY.

Пример вызова:

<?php
 use Symfony\Component\Yaml\Yaml;
 use LapayGroup\RussianPost\Providers\OtpravkaApi;
 try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $addressList = new \LapayGroup\RussianPost\AddressList();
 $addressList->add('115551 Кширское шоссе 94-1, 1');
 $result = $otpravkaApi->clearAddress($addressList);
 /*
 Array
 (
 [0] => Array
 (
 [address-type] => DEFAULT
 [corpus] => 1
 [house] => 94
 [id] => 0
 [index] => 115551
 [original-address] => 115551 Кширское шоссе 94-1, 1
 [place] => г. Москва
 [quality-code] => GOOD
 [region] => г. Москва
 [room] => 1
 [street] => шоссе Каширское
 [validation-code] => VALIDATED
 )

 )
 */
 }
 catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
 }
 catch (\Exception $e) {
 // Обработка нештатной ситуации
 }
?>

$addressList - это объект класса LapayGroup\RussianPost\AddressList содержащий список адресов для нормализации.

Нормализация ФИО

Очищает, разделяет и помещает значения ФИО в соответствующие поля возвращаемого объекта. Параметр id (идентификатор записи) используется для установления соответствия переданных и полученных записей, так как порядок сортировки возвращаемых записей не гарантируется.

Пример вызова:

<?php
 use Symfony\Component\Yaml\Yaml;
 use LapayGroup\RussianPost\Providers\OtpravkaApi;
 try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $fioList = new \LapayGroup\RussianPost\FioList();
 $fioList->add('Иванов Петр игоревич');
 $result = $otpravkaApi->clearFio($fioList);
 /*
 Array
 (
 [0] => Array
 (
 [id] => 0
 [middle-name] => Игоревич
 [name] => Петр
 [original-fio] => Иванов Петр игоревич
 [quality-code] => EDITED
 [surname] => Иванов
 )

 )
 */
 }
 catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
 }
 catch (\Exception $e) {
 // Обработка нештатной ситуации
 }
?>

$fioList - это объект класса LapayGroup\RussianPost\FioList содержащий список ФИО для нормализации.

Нормализация телефона

Принимает номера телефонов в неотформатированном виде, который может включать пробелы, символы: +-(). Очищает, разделяет и помещает сущности телефона (код города, номер) в соответствующие поля возвращаемого объекта. Параметр id (идентификатор записи) используется для установления соответствия переданных и полученных записей, так как порядок сортировки возвращаемых записей не гарантируется.

Пример вызова:

<?php
 use Symfony\Component\Yaml\Yaml;
 use LapayGroup\RussianPost\Providers\OtpravkaApi;
 try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $phoneList = new \LapayGroup\RussianPost\PhoneList();
 $phoneList->add('9260120935');
 $result = $otpravkaApi->clearPhone($phoneList);
 /*
 Array
 (
 [0] => Array
 (
 [id] => 0
 [original-phone] => 9260120935
 [phone-city-code] => 926
 [phone-country-code] => 7
 [phone-extension] =>
 [phone-number] => 0120935
 [quality-code] => GOOD
 )

 )
 */
 }
 catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
 }
 catch (\Exception $e) {
 // Обработка нештатной ситуации
 }
?>

$phoneList - это объект класса LapayGroup\RussianPost\PhoneList содержащий список номеров телефлонов для нормализации.

Расчет стоимости пересылки (Упрощенная версия)

Расчитывает стоимость пересылки в зависимости от указанных входных данных. Индекс ОПС точки отправления берется из профиля клиента. Возвращаемые значения указываются в копейках.

Важно! Индекс отправления должен быть указан одного из пунктов сдачи, иначе будет возвращена ошибка 1001!

Пример получения списка пунктов сдачи отправлений:

use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
$OtpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
$list = $OtpravkaApi->shippingPoints();

Пример вызова:

<?php
 use Symfony\Component\Yaml\Yaml;
 use LapayGroup\RussianPost\Providers\OtpravkaApi;
 use LapayGroup\RussianPost\ParcelInfo;
 try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $parcelInfo = new ParcelInfo();
 $parcelInfo->setIndexFrom($list[0]['operator-postcode']); // Индекс пункта сдачи из функции $OtpravkaApi->shippingPoints()
 $parcelInfo->setIndexTo(644015);
 $parcelInfo->setMailCategory('ORDINARY'); // https://otpravka.pochta.ru/specification#/enums-base-mail-category
 $parcelInfo->setMailType('POSTAL_PARCEL'); // https://otpravka.pochta.ru/specification#/enums-base-mail-type
 $parcelInfo->setWeight(1000);
 $parcelInfo->setFragile(true);
 $tariffInfo = $otpravkaApi->getDeliveryTariff($parcelInfo);
 echo $tariffInfo->getTotalRate()/100 . ' руб.';
 /*
 LapayGroup\RussianPost\TariffInfo Object
 (
 [totalRate:LapayGroup\RussianPost\TariffInfo:private] => 30658
 [totalNds:LapayGroup\RussianPost\TariffInfo:private] => 6132
 [aviaRate:LapayGroup\RussianPost\TariffInfo:private] => 0
 [aviaNds:LapayGroup\RussianPost\TariffInfo:private] => 0
 [deliveryMinDays:LapayGroup\RussianPost\TariffInfo:private] => 1
 [deliveryMaxDays:LapayGroup\RussianPost\TariffInfo:private] => 3
 [fragileRate:LapayGroup\RussianPost\TariffInfo:p rivate] => 7075
 [fragileNds:LapayGroup\RussianPost\TariffInfo:private] => 1415
 [groundRate:LapayGroup\RussianPost\TariffInfo:private] => 30658
 [groundNds:LapayGroup\RussianPost\TariffInfo:private] => 6132
 [insuranceRate:LapayGroup\RussianPost\TariffInfo:private] => 0
 [insuranceNds:LapayGroup\RussianPost\TariffInfo:private] => 0
 [noticeRate:LapayGroup\RussianPost\TariffInfo:private] => 0
 [noticeNds:LapayGroup\RussianPost\TariffInfo:private] => 0
 [oversizeRate:LapayGroup\RussianPost\TariffInfo:private] => 0
 [oversizeNds:LapayGroup\RussianPost\TariffInfo:private] => 0
 )
 */
 }
 catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
 }
 catch (\Exception $e) {
 // Обработка нештатной ситуации
 }
?>

$parcelInfo - это объект класса LapayGroup\RussianPost\ParcelInfo содержащий данные по отправлению. $tariffInfo - это объект класса LapayGroup\RussianPost\tariffInfo содержащий данные по расчитанному тарифу.

Расчет стоимости пересылки ЕКОМ

Стоимость пересылки для ЕКОМ расчитывается по аналогичному вышеуказанному алгоритму, за исключением некоторых входных параметров.

Пример вызова:

<?php
 use Symfony\Component\Yaml\Yaml;
 use LapayGroup\RussianPost\Providers\OtpravkaApi;
 use LapayGroup\RussianPost\ParcelInfo;
 try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $parcelInfo = new ParcelInfo();
 $parcelInfo->setIndexFrom($list[0]['operator-postcode']); // Индекс пункта сдачи из функции $OtpravkaApi->shippingPoints()
 $parcelInfo->setMailCategory('ORDINARY'); // https://otpravka.pochta.ru/specification#/enums-base-mail-category
 $parcelInfo->setWeight(1000);
 $parcelInfo->setFragile(true);
 // Параметры только для ЕКОМ
 $parcelInfo->setMailType('ECOM'); // Вид РПО ЕКОМ https://otpravka.pochta.ru/specification#/enums-base-mail-type
 $parcelInfo->setDeliveryPointindex(644015); // Вместо индекса назначения указывается индекс ПВЗ
 $parcelInfo->setEntriesType('SALE_OF_GOODS'); // Категория вложения https://otpravka.pochta.ru/specification#/enums-base-entries-type
 $parcelInfo->setFunctionalityChecking(true); // Признак услуги проверки работоспособности
 $parcelInfo->setGoodsValue(1588000); // Стоимость
 $parcelInfo->setWithFitting(true); // Признак услуги 'Возможность примерки'
 $tariffInfo = $otpravkaApi->getDeliveryTariff($parcelInfo);
 echo $tariffInfo->getTotalRate()/100 . ' руб.';
 /*
 LapayGroup\RussianPost\TariffInfo Object
 (
 [functionalityCheckingRate:LapayGroup\RussianPost\TariffInfo:private] => 30658
 [functionalityCheckingNds:LapayGroup\RussianPost\TariffInfo:private] => 6132
 [withFittingRate:LapayGroup\RussianPost\TariffInfo:private] => 0
 [withFittingNds:LapayGroup\RussianPost\TariffInfo:private] => 0
 )
 */
 }
 catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
 }
 catch (\Exception $e) {
 // Обработка нештатной ситуации
 }
?>

Отображение баланса

Отображает баланс расчетного счета. Возвращаемые значения указываются в копейках.

Пример вызова:

<?php
 use Symfony\Component\Yaml\Yaml;
 use LapayGroup\RussianPost\Providers\OtpravkaApi;
 try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $otpravkaApi->getBalance();
 /*
 Array
 (
 [balance] => 0
 [balance-date] => 2019年06月21日
 [work-with-balance] => 1
 )
 */
 }
 catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
 }
 catch (\Exception $e) {
 // Обработка нештатной ситуации
 }
?>

Неблагонадёжный получатель

Актуально для отправлений с наложенным платежом. Определяет, является ли получатель благонадёжным, есть ли прецеденты невыкупа.

Пример вызова:

<?php
 use Symfony\Component\Yaml\Yaml;
 use LapayGroup\RussianPost\Providers\OtpravkaApi;
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $recepient = new \LapayGroup\RussianPost\Entity\Recipient();
 $recepient->setAddress('650905 ЯГУНОВСКИЙ, КЕМЕРОВСКАЯ ОБЛАСТЬ, УЛ БЕЛОЗЕРНАЯ, ДОМ 21,КВ 1');
 $recepient->setName('Иванов Петр Николаевич');
 $recepient->setPhone('79260112367');
 try {
 $res = $otpravkaApi->untrustworthyRecipient($recepient);
 /*
 Array
 (
 [raw-address] => 650905 ЯГУНОВСКИЙ, КЕМЕРОВСКАЯ ОБЛАСТЬ, УЛ БЕЛОЗЕРНАЯ,ДОМ 21,КВ 1
 [raw-full-name] => Иванов Петр Николаевич
 [raw-telephone] => 79260112367
 [unreliability] => RELIABLE
 )
 */
 }
 catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
 }
 catch (\Exception $e) {
 // Обработка нештатной ситуации
 }
 // Обработка списка получателей
 $recepients[0] = $recepient;
 $recepients[1] = $recepient;
 try {
 $res = $otpravkaApi->untrustworthyRecipients($recepients);
 /*
 Array
 (
 [0] => Array
 (
 [raw-address] => 650905 ЯГУНОВСКИЙ, КЕМЕРОВСКАЯ ОБЛАСТЬ, УЛ БЕЛОЗЕРНАЯ,ДОМ 21,КВ 1
 [raw-full-name] => Иванов Петр Николаевич
 [raw-telephone] => 79260112367
 [unreliability] => RELIABLE
 ),
 [1] => Array
 (
 [raw-address] => 650905 ЯГУНОВСКИЙ, КЕМЕРåОВСКАЯ ОБЛАСТЬ, УЛ БЕЛОЗЕРНАЯ,ДОМ 21,КВ 1
 [raw-full-name] => Иванов Петр Николаевич
 [raw-telephone] => 79260112367
 [unreliability] => RELIABLE
 )
 )
 */
 }
 catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
 }
 catch (\Exception $e) {
 // Обработка нештатной ситуации
 }
?>

Заказы

Реализует функции API Почты России для работы с заказами. Для работы данных функций необходимы аутентификационные данные. Подробнее в разделе Конфигурация.

В случае возникновеня ошибок при обмене выбрасывает исключение \LapayGroup\RussianPost\Exceptions\RussianPostException в котором будет текст и код ошибки от API Почты России и дамп сырого ответа с HTTP-кодом.

Создание заказа

Создает новый заказ. Автоматически рассчитывает и проставляет плату за пересылку. Метод asArr() проверяет заполнение необходимых для создания заказа полей и в случае незаполнения выбрасывает \InvalidArgumentException.

Важно! Для внутренних отправлений должен задаваться цифровой почтовый индекс $order->setIndexTo(115551). Для зарубежных отправлений должен задаваться зарубежный почтовый индекс $order->setStrIndexTo('ab5551'). По умолчанию выбран динамический ДТИ. Для изменения диапазона ДТИ нужно обратиться в службу поддержки Почты России.

Пример создания заказа:

<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
use LapayGroup\RussianPost\Entity\Order;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $orders = [];
 $order = new Order();
 $order->setIndexTo(115551);
 $order->setPostOfficeCode(109012);
 $order->setGivenName('Иван');
 $order->setHouseTo('92');
 $order->setCorpusTo('3');
 $order->setMass(1000);
 $order->setOrderNum('2');
 $order->setPlaceTo('Москва');
 $order->setRecipientName('Иванов Иван');
 $order->setRegionTo('Москва');
 $order->setStreetTo('Каширское шоссе');
 $order->setRoomTo('1');
 $order->setSurname('Иванов');
 $orders[] = $order->asArr();
 $result = $otpravkaApi->createOrders($orders);
 // Успешный ответ
 /*Array
 (
 [result-ids] => Array
 (
 [0] => 115322331
 )

 )
 */
 // Ответ с ошибкой
 /*Array
 (
 [errors] => Array
 (
 [0] => Array
 (
 [error-codes] => Array
 (
 [0] => Array
 (
 [code] => EMPTY_INDEX_TO
 [description] => Почтовый индекс не указан
 )

 )

 [position] => 0
 )

 )

 )*/
}
catch (\InvalidArgumentException $e) {
 // Обработка ошибки заполнения параметров
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Создание заказа V2

Создает новый заказ. Автоматически рассчитывает и проставляет плату за пересылку. Метод asArr() проверяет заполнение необходимых для создания заказа полей и в случае незаполнения выбрасывает \InvalidArgumentException.

Важно! Для внутренних отправлений должен задаваться цифровой почтовый индекс $order->setIndexTo(115551). Для зарубежных отправлений должен задаваться зарубежный почтовый индекс $order->setStrIndexTo('ab5551'). По умолчанию выбран динамический ДТИ. Для изменения диапазона ДТИ нужно обратиться в службу поддержки Почты России.

Пример создания заказа:

<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
use LapayGroup\RussianPost\Entity\Order;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $orders = [];
 $order = new Order();
 $order->setIndexTo(115551);
 $order->setPostOfficeCode(109012);
 $order->setGivenName('Иван');
 $order->setHouseTo('92');
 $order->setCorpusTo('3');
 $order->setMass(1000);
 $order->setOrderNum('2');
 $order->setPlaceTo('Москва');
 $order->setRecipientName('Иванов Иван');
 $order->setRegionTo('Москва');
 $order->setStreetTo('Каширское шоссе');
 $order->setRoomTo('1');
 $order->setSurname('Иванов');
 $orders[] = $order->asArr();
 $result = $otpravkaApi->createOrdersV2($orders);
 // Успешный ответ
 /*Array
 (
 [orders] => Array
 (
 [barcode] => 80093053624992
 [order-num] => 3
 [result-id] => 310115153
 )
 )*/
 // Ответ с ошибкой
 /*Array
 (
 [errors] => Array
 (
 [0] => Array
 (
 [error-codes] => Array
 (
 [0] => Array
 (
 [code] => EMPTY_INDEX_TO
 [description] => Почтовый индекс не указан
 )

 )

 [position] => 0
 )

 )

 )*/
}
catch (\InvalidArgumentException $e) {
 // Обработка ошибки заполнения параметров
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Редактирование заказа

Изменение ранее созданного заказа. Автоматически рассчитывает и проставляет плату за пересылку.
<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
use LapayGroup\RussianPost\Entity\Order;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $order = new Order();
 $order->setIndexTo(115551);
 $order->setPostOfficeCode(109012);
 $order->setGivenName('Иван');
 $order->setHouseTo('92');
 $order->setCorpusTo('3');
 $order->setMass(1000);
 $order->setOrderNum('333'); // Меняем внутренний номер заказа
 $order->setPlaceTo('Москва');
 $order->setRecipientName('Иванов Иван');
 $order->setRegionTo('Москва');
 $order->setStreetTo('Каширское шоссе');
 $order->setRoomTo('1');
 $order->setSurname('Иванов');
 $result = $otpravkaApi->editOrder($order, 115322331);
 // Успешный ответ
 /*Array
 (
 [result-ids] => Array
 (
 [0] => 115322331
 )

 )
 */
 // Ответ с ошибкой
 /*Array
 (
 [error-codes] => Array
 (
 [0] => Array
 (
 [code] => EMPTY_INDEX_TO
 [description] => Почтовый индекс не указан
 )

 )

 [position] => 0
 )*/
}
catch (\InvalidArgumentException $e) {
 // Обработка ошибки заполнения параметров
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Удаление заказов

Удаление заказов, который еще не добавлены в партию.
<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $otpravkaApi->deleteOrders([115322331]);
 /*
 Array Успешный ответ
 (
 [result-ids] => Array
 (
 [0] => 115322331
 )
 )

 Array Ответ с ошибкой
 (
 [errors] => Array
 (
 [0] => Array
 (
 [error-code] => NOT_FOUND
 [position] => 0
 )

 )
 )*/
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Поиск заказа

Ищет заказы по назначенному магазином идентификатору.
<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $otpravkaApi->findOrderByShopId(1);
 /*
 Array
 (
 [0] => Array
 (
 [address-type-to] => DEFAULT
 // По умолчанию выбран динамический ДТИ. Для изменения диапазона ДТИ нужно обратиться в службу поддержки Почты России
 [barcode] => 80082240994512
 [corpus-to] => 3
 [delivery-time] => Array
 (
 [max-days] => 1
 )

 [given-name] => Иван
 [ground-rate] => 16500
 [ground-rate-with-vat] => 19800
 [ground-rate-wo-vat] => 16500
 [house-to] => 92
 [id] => 115322331
 [index-to] => 115551
 [mail-category] => ORDINARY
 [mail-direct] => 643
 [mail-rank] => WO_RANK
 [mail-type] => POSTAL_PARCEL
 [manual-address-input] =>
 [mass] => 1000
 [mass-rate] => 16500
 [mass-rate-with-vat] => 19800
 [mass-rate-wo-vat] => 16500
 [order-num] => 1
 [payment-method] => CASHLESS
 [place-to] => Москва
 [postmarks] => Array
 (
 [0] => NONSTANDARD
 )

 [postoffice-code] => 109012
 [recipient-name] => Иванов Иван
 [region-to] => Москва
 [room-to] => 1
 [str-index-to] => 115551
 [street-to] => Каширское шоссе
 [surname] => Иванов
 [total-rate-wo-vat] => 16500
 [total-vat] => 3300
 [transport-type] => SURFACE
 [version] => 0
 )
 )*/
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Поиск заказа по идентификатору

Ищет заказ по идентификатору Почты России.
<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $otpravkaApi->findOrderById(115322331);
 /*
 Array
 (
 [address-type-to] => DEFAULT
 [barcode] => 80082240994512
 [corpus-to] => 3
 [delivery-time] => Array
 (
 [max-days] => 1
 )

 [given-name] => Иван
 [ground-rate] => 16500
 [ground-rate-with-vat] => 19800
 [ground-rate-wo-vat] => 16500
 [house-to] => 92
 [id] => 115322331
 [index-to] => 115551
 [mail-category] => ORDINARY
 [mail-direct] => 643
 [mail-rank] => WO_RANK
 [mail-type] => POSTAL_PARCEL
 [manual-address-input] =>
 [mass] => 1000
 [mass-rate] => 16500
 [mass-rate-with-vat] => 19800
 [mass-rate-wo-vat] => 16500
 [order-num] => 1
 [payment-method] => CASHLESS
 [place-to] => Москва
 [postmarks] => Array
 (
 [0] => NONSTANDARD
 )

 [postoffice-code] => 109012
 [recipient-name] => Иванов Иван
 [region-to] => Москва
 [room-to] => 1
 [str-index-to] => 115551
 [street-to] => Каширское шоссе
 [surname] => Иванов
 [total-rate-wo-vat] => 16500
 [total-vat] => 3300
 [transport-type] => SURFACE
 [version] => 0
 )*/
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Возврат заказов в "Новые"

Метод переводит заказы из партии в раздел Новые. Партия должна быть в статусе CREATED.
<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $otpravkaApi->returnToNew([115527611]);
 /*
 Array Успешный ответ
 (
 [result-ids] => Array
 (
 [0] => 115527611
 )

 )

 Array Ответ с ошибкой
 (
 [errors] => Array
 (
 [0] => Array
 (
 [error-code] => NOT_FOUND
 [position] => 0
 )

 )
 )*/
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Партии

Реализует функции API Почты России для работы с партиями. Для работы данных функций необходимы аутентификационные данные. Подробнее в разделе Конфигурация.

В случае возникновеня ошибок при обмене выбрасывает исключение \LapayGroup\RussianPost\Exceptions\RussianPostException в котором будет текст и код ошибки от API Почты России и дамп сырого ответа с HTTP-кодом.

Создание партии из N заказов

Автоматически создает партию и переносит указанные подготовленные заказы в эту партию. Если заказы относятся к разным типам и категориям – создается несколько партий. Заказы распределяются по соответствующим партиям. Каждому перенесенному заказу автоматически присваивается ШПИ.
<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $otpravkaApi->createBatch([115527611], new DateTimeImmutable('2019年09月20日'));
 /*
 Array Успешный ответ
 (
 [batches] => Array
 (
 [0] => Array
 (
 [batch-name] => 24
 [batch-status] => CREATED
 [batch-status-date] => 2019年09月03日T11:37:17.589Z
 [combined-batch-mail-types] => Array
 (
 [0] => POSTAL_PARCEL
 )

 [courier-order-statuses] => Array
 (
 [0] => NOT_REQUIRED
 )

 [international] =>
 [list-number-date] => 2019年09月20日
 [mail-category] => COMBINED
 [mail-category-text] => Комбинированно
 [mail-rank] => WO_RANK
 [mail-type] => COMBINED
 [mail-type-text] => Комбинированно
 [payment-method] => CASHLESS
 [postmarks] => Array
 (
 [0] => NONSTANDARD
 )

 [postoffice-code] => 109012
 [postoffice-name] => ОПС 109012
 [shipment-avia-rate-sum] => 0
 [shipment-avia-rate-vat-sum] => 0
 [shipment-completeness-checking-rate-sum] => 0
 [shipment-completeness-checking-rate-vat-sum] => 0
 [shipment-contents-checking-rate-sum] => 0
 [shipment-contents-checking-rate-vat-sum] => 0
 [shipment-count] => 1
 [shipment-ground-rate-sum] => 16500
 [shipment-ground-rate-vat-sum] => 3300
 [shipment-insure-rate-sum] => 0
 [shipment-insure-rate-vat-sum] => 0
 [shipment-inventory-rate-sum] => 0
 [shipment-inventory-rate-vat-sum] => 0
 [shipment-mass] => 1000
 [shipment-mass-rate-sum] => 16500
 [shipment-mass-rate-vat-sum] => 3300
 [shipment-notice-rate-sum] => 0
 [shipment-notice-rate-vat-sum] => 0
 [shipment-sms-notice-rate-sum] => 0
 [shipment-sms-notice-rate-vat-sum] => 0
 [shipping-notice-type] => SIMPLE
 [transport-type] => SURFACE
 [use-online-balance] =>
 [wo-mass] =>
 )
 )

 [result-ids] => Array
 (
 [0] => 115527611
 )
 )

 Array Ответ с ошибкой
 (
 [errors] => Array
 (
 [0] => Array
 (
 [error-code] => NOT_FOUND
 [error-description] => Отправление не найдено
 [position] => 0
 )
 )
 )*/
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Изменение дня отправки в почтовое отделение

Изменяет (устанавливает) новый день отправки в почтовое отделение.
<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $otpravkaApi->changeBatchSendingDay(25, new DateTimeImmutable('2019年09月08日'));
}
catch (\InvalidArgumentException $e) {
 // Обработка ошибки
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Перенос заказов в партию

Переносит подготовленные заказы в указанную партию. Если часть заказов не может быть помещена в партию (тип и категория партии не соответствует типу и категории заказа) - возвращается json объект с указанием индекса заказа в переданном массиве и типом ошибки, остальные заказы помещаются в указанную партию. Каждому перенесенному заказу автоматически присваивается ШПИ.
<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $otpravkaApi->moveOrdersToBatch('24', [115685148]);
 /*Array
 (
 [result-ids] => Array
 (
 [0] => 115685148
 )

 )*/
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Поиск партии по наименованию

Возвращает параметры партии по ее наименованию (batch-name).
<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $otpravkaApi->findBatchByName('24');
 /*
 Array
 (
 [batch-name] => 24
 [batch-status] => CREATED
 [batch-status-date] => 2019年09月03日T11:37:17.589Z
 [combined-batch-mail-types] => Array
 (
 [0] => POSTAL_PARCEL
 )

 [courier-order-statuses] => Array
 (
 [0] => NOT_REQUIRED
 )

 [international] =>
 [list-number-date] => 2019年09月16日
 [mail-category] => COMBINED
 [mail-category-text] => Комбинированно
 [mail-rank] => WO_RANK
 [mail-type] => COMBINED
 [mail-type-text] => Комбинированно
 [payment-method] => CASHLESS
 [postmarks] => Array
 (
 [0] => NONSTANDARD
 )

 [postoffice-code] => 109012
 [postoffice-name] => ОПС 109012
 [shipment-avia-rate-sum] => 0
 [shipment-avia-rate-vat-sum] => 0
 [shipment-completeness-checking-rate-sum] => 0
 [shipment-completeness-checking-rate-vat-sum] => 0
 [shipment-contents-checking-rate-sum] => 0
 [shipment-contents-checking-rate-vat-sum] => 0
 [shipment-count] => 2
 [shipment-ground-rate-sum] => 33000
 [shipment-ground-rate-vat-sum] => 6600
 [shipment-insure-rate-sum] => 0
 [shipment-insure-rate-vat-sum] => 0
 [shipment-inventory-rate-sum] => 0
 [shipment-inventory-rate-vat-sum] => 0
 [shipment-mass] => 2000
 [shipment-mass-rate-sum] => 33000
 [shipment-mass-rate-vat-sum] => 6600
 [shipment-notice-rate-sum] => 0
 [shipment-notice-rate-vat-sum] => 0
 [shipment-sms-notice-rate-sum] => 0
 [shipment-sms-notice-rate-vat-sum] => 0
 [shipping-notice-type] => SIMPLE
 [transport-type] => SURFACE
 [use-online-balance] =>
 [wo-mass] =>
 )*/
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Поиск заказов с ШПИ

Возвращает данные заказа в партии по присвоенному ему ШПИ.
<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $otpravkaApi->findOrderByRpo(80083740712514);
 /*
 Array
 (
 [0] => Array
 (
 [address-type-to] => DEFAULT
 [barcode] => 80083740712514
 [batch-category] => COMBINED
 [batch-name] => 24
 [batch-status] => CREATED
 [completeness-checking] =>
 [corpus-to] => 3
 [delivery-time] => Array
 (
 [max-days] => 1
 )

 [given-name] => Иван
 [ground-rate] => 16500
 [ground-rate-with-vat] => 19800
 [ground-rate-wo-vat] => 16500
 [house-to] => 92
 [id] => 115527611
 [index-to] => 115551
 [legal-hid] => 15b12c4c-96ff-4548-8e15-aeab82c8e927
 [mail-category] => ORDINARY
 [mail-direct] => 643
 [mail-rank] => WO_RANK
 [mail-type] => POSTAL_PARCEL
 [manual-address-input] =>
 [mass] => 1000
 [mass-rate] => 16500
 [mass-rate-with-vat] => 19800
 [mass-rate-wo-vat] => 16500
 [order-num] => 223
 [payment-method] => CASHLESS
 [place-to] => Москва
 [pochtaid-hid] => 816284
 [postmarks] => Array
 (
 [0] => NONSTANDARD
 )

 [postoffice-code] => 109012
 [recipient-name] => Иванов Иван
 [region-to] => Москва
 [room-to] => 1
 [str-index-to] => 115551
 [street-to] => Каширское шоссе
 [surname] => Иванов
 [total-rate-wo-vat] => 16500
 [total-vat] => 3300
 [transport-type] => SURFACE
 [version] => 0
 )

 )*/
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Добавление заказов в партию

Создает массив заказов и помещает непосредственно в партию. Автоматически рассчитывает и проставляет плату за пересылку. Каждому заказу автоматически присваивается ШПИ.
<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $orders = []; // Массив заказов
 $result = $otpravkaApi->addOrdersToBatch('24', $orders); // Ответ аналогичен созданию заказов
}
catch (\InvalidArgumentException $e) {
 // Обработка ошибки заполнения параметров
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Удаление заказов из партии

Удаляет заказы, которые уже были добавлены в партию.
<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $otpravkaApi->deleteOrdersInBatch([115527611]);
 /*
 Array Успешный ответ
 (
 [result-ids] => Array
 (
 [0] => 115685148
 )
 )

 Array Ответ с ошибкой
 (
 [errors] => Array
 (
 [0] => Array
 (
 [error-code] => NOT_FOUND
 [position] => 0
 )

 )
 )*/
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Запрос данных о заказах в партии

Возвращает заказы в партии по заданным параметрам.
<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $otpravkaApi->getOrdersInBatch(25);
 /*
 Array
 (
 [0] => Array
 (
 [address-type-to] => DEFAULT
 [barcode] => 80084740397510
 [batch-category] => COMBINED
 [batch-name] => 25
 [batch-status] => CREATED
 [completeness-checking] =>
 [corpus-to] => 3
 [delivery-time] => Array
 (
 [max-days] => 1
 )

 [given-name] => Иван
 [ground-rate] => 16500
 [ground-rate-with-vat] => 19800
 [ground-rate-wo-vat] => 16500
 [house-to] => 92
 [human-operation-name] => Присвоен трек-номер
 [id] => 115689758
 [index-to] => 115551
 [last-oper-attr] => ID_ASSIGNED
 [last-oper-date] => 2019年09月03日T11:48:20.759Z
 [last-oper-type] => ID_ASSIGNMENT
 [legal-hid] => 15b12c4c-96ff-4548-8e15-aeab82c8e927
 [mail-category] => ORDINARY
 [mail-direct] => 643
 [mail-rank] => WO_RANK
 [mail-type] => POSTAL_PARCEL
 [manual-address-input] =>
 [mass] => 1000
 [mass-rate] => 16500
 [mass-rate-with-vat] => 19800
 [mass-rate-wo-vat] => 16500
 [order-num] => 2
 [payment-method] => CASHLESS
 [place-to] => Москва
 [pochtaid-hid] => 816284
 [postmarks] => Array
 (
 [0] => NONSTANDARD
 )

 [postoffice-code] => 109012
 [recipient-name] => Иванов Иван
 [region-to] => Москва
 [room-to] => 1
 [str-index-to] => 115551
 [street-to] => Каширское шоссе
 [surname] => Иванов
 [total-rate-wo-vat] => 16500
 [total-vat] => 3300
 [transport-type] => SURFACE
 [version] => 1
 )
 )*/
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Поиск всех партий

Возвращает партии по заданным фильтрам.
<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $otpravkaApi->getAllBatches(); // Может вызываться с фильтрами
 /*
 Array
 (
 [0] => Array
 (
 [batch-name] => 24
 [batch-status] => CREATED
 [batch-status-date] => 2019年09月03日T11:37:17.589Z
 [combined-batch-mail-types] => Array
 (
 [0] => POSTAL_PARCEL
 )

 [courier-order-statuses] => Array
 (
 [0] => NOT_REQUIRED
 )

 [international] =>
 [list-number-date] => 2019年09月16日
 [mail-category] => COMBINED
 [mail-category-text] => Комбинированно
 [mail-rank] => WO_RANK
 [mail-type] => COMBINED
 [mail-type-text] => Комбинированно
 [payment-method] => CASHLESS
 [postmarks] => Array
 (
 [0] => NONSTANDARD
 )

 [postoffice-address] => ул Никольская, д.7-9, стр.3, г Москва
 [postoffice-code] => 109012
 [postoffice-name] => ОПС 109012
 [shipment-avia-rate-sum] => 0
 [shipment-avia-rate-vat-sum] => 0
 [shipment-completeness-checking-rate-sum] => 0
 [shipment-completeness-checking-rate-vat-sum] => 0
 [shipment-contents-checking-rate-sum] => 0
 [shipment-contents-checking-rate-vat-sum] => 0
 [shipment-count] => 1
 [shipment-ground-rate-sum] => 16500
 [shipment-ground-rate-vat-sum] => 3300
 [shipment-insure-rate-sum] => 0
 [shipment-insure-rate-vat-sum] => 0
 [shipment-inventory-rate-sum] => 0
 [shipment-inventory-rate-vat-sum] => 0
 [shipment-mass] => 1000
 [shipment-mass-rate-sum] => 16500
 [shipment-mass-rate-vat-sum] => 3300
 [shipment-notice-rate-sum] => 0
 [shipment-notice-rate-vat-sum] => 0
 [shipment-sms-notice-rate-sum] => 0
 [shipment-sms-notice-rate-vat-sum] => 0
 [shipping-notice-type] => SIMPLE
 [transport-type] => SURFACE
 [use-online-balance] =>
 [wo-mass] =>
 )
 )*/
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Поиск заказа в партии по id

<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $otpravkaApi->findOrderInBatch(115689758);
 /*
 Array
 (
 [address-type-to] => DEFAULT
 [barcode] => 80084740397510
 [batch-category] => COMBINED
 [batch-name] => 25
 [batch-status] => CREATED
 [completeness-checking] =>
 [corpus-to] => 3
 [delivery-time] => Array
 (
 [max-days] => 1
 )

 [given-name] => Иван
 [ground-rate] => 16500
 [ground-rate-with-vat] => 19800
 [ground-rate-wo-vat] => 16500
 [house-to] => 92
 [human-operation-name] => Присвоен трек-номер
 [id] => 115689758
 [index-to] => 115551
 [last-oper-attr] => ID_ASSIGNED
 [last-oper-date] => 2019年09月03日T11:48:20.759Z
 [last-oper-type] => ID_ASSIGNMENT
 [legal-hid] => 15b12c4c-96ff-4548-8e15-aeab82c8e927
 [mail-category] => ORDINARY
 [mail-direct] => 643
 [mail-rank] => WO_RANK
 [mail-type] => POSTAL_PARCEL
 [manual-address-input] =>
 [mass] => 1000
 [mass-rate] => 16500
 [mass-rate-with-vat] => 19800
 [mass-rate-wo-vat] => 16500
 [order-num] => 2
 [payment-method] => CASHLESS
 [place-to] => Москва
 [pochtaid-hid] => 816284
 [postmarks] => Array
 (
 [0] => NONSTANDARD
 )

 [postoffice-code] => 109012
 [recipient-name] => Иванов Иван
 [region-to] => Москва
 [room-to] => 1
 [str-index-to] => 115551
 [street-to] => Каширское шоссе
 [surname] => Иванов
 [total-rate-wo-vat] => 16500
 [total-vat] => 3300
 [transport-type] => SURFACE
 [version] => 1
 )*/
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Документы

Реализует функции API Почты России для работы с документами. Для работы данных функций необходимы аутентификационные данные. Подробнее в разделе Конфигурация.

В случае возникновеня ошибок при обмене выбрасывает исключение \LapayGroup\RussianPost\Exceptions\RussianPostException в котором будет текст и код ошибки от API Почты России и дамп сырого ответа с HTTP-кодом.

Все функции работы с документами принимают параметр action, который принимает два значения:

  • OtpravkaApi::DOWNLOAD_FILE - выводит соответствующие header для скачивания файла в браузере;
  • OtpravkaApi::PRINT_FILE - возврат объекта GuzzleHttp\Psr7\UploadedFile с данными о файле.

Важно! Перед печатью любого документа нужно зафиксировать изменения в партии вызовом функции sendingF103form():

<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $otpravkaApi->sendingF103form(28);
 $otpravkaApi->sendingF103form(28, true); // С онлайн балансом
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Генерация пакета документации

Генерирует и возвращает zip архив с 4-мя файлами:
  • Export.xls , Export.csv - список с основными данными по заявкам в составе партии
  • F103.pdf - форма ф103 по заявкам в составе партии
  • В зависимости от типа и категории отправлений, формируется комбинация из сопроводительных документов в формате pdf ( формы: f7, f112, f22)
<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $otpravkaApi->generateDocPackage(28, OtpravkaApi::PRINT_FILE);
 /*
 GuzzleHttp\Psr7\UploadedFile Object
 (
 [clientFilename:GuzzleHttp\Psr7\UploadedFile:private] => all-pdf.zip
 [clientMediaType:GuzzleHttp\Psr7\UploadedFile:private] => application/zip; charset=UTF-8
 [error:GuzzleHttp\Psr7\UploadedFile:private] => 0
 [file:GuzzleHttp\Psr7\UploadedFile:private] =>
 [moved:GuzzleHttp\Psr7\UploadedFile:private] =>
 [size:GuzzleHttp\Psr7\UploadedFile:private] => 290398
 [stream:GuzzleHttp\Psr7\UploadedFile:private] => GuzzleHttp\Psr7\Stream Object
 (
 [stream:GuzzleHttp\Psr7\Stream:private] => Resource id #56
 [size:GuzzleHttp\Psr7\Stream:private] => 290398
 [seekable:GuzzleHttp\Psr7\Stream:private] => 1
 [readable:GuzzleHttp\Psr7\Stream:private] => 1
 [writable:GuzzleHttp\Psr7\Stream:private] => 1
 [uri:GuzzleHttp\Psr7\Stream:private] => php://temp
 [customMetadata:GuzzleHttp\Psr7\Stream:private] => Array
 (
 )

 )

 )*/
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Генерация печатной формы Ф7п

Генерирует и возвращает pdf файл с формой ф7п для указанного заказа. Опционально в файл прикрепляется форма Ф22 (посылка онлайн). Если параметр sending-date не передается, берется текущая дата.
<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $otpravkaApi->generateDocF7p(123645924, OtpravkaApi::PRINT_FILE, new DateTimeImmutable('now'));
 /*
 GuzzleHttp\Psr7\UploadedFile Object
 (
 [clientFilename:GuzzleHttp\Psr7\UploadedFile:private] => f7p.pdf
 [clientMediaType:GuzzleHttp\Psr7\UploadedFile:private] => application/pdf; charset=UTF-8
 [error:GuzzleHttp\Psr7\UploadedFile:private] => 0
 [file:GuzzleHttp\Psr7\UploadedFile:private] =>
 [moved:GuzzleHttp\Psr7\UploadedFile:private] =>
 [size:GuzzleHttp\Psr7\UploadedFile:private] => 99776
 [stream:GuzzleHttp\Psr7\UploadedFile:private] => GuzzleHttp\Psr7\Stream Object
 (
 [stream:GuzzleHttp\Psr7\Stream:private] => Resource id #56
 [size:GuzzleHttp\Psr7\Stream:private] => 99776
 [seekable:GuzzleHttp\Psr7\Stream:private] => 1
 [readable:GuzzleHttp\Psr7\Stream:private] => 1
 [writable:GuzzleHttp\Psr7\Stream:private] => 1
 [uri:GuzzleHttp\Psr7\Stream:private] => php://temp
 [customMetadata:GuzzleHttp\Psr7\Stream:private] => Array
 (
 )

 )

 )*/
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Генерация печатной формы Ф112ЭК

Генерирует и возвращает pdf-файл с заполненной формой Ф112ЭК для указанного заказа. Только для заказа с «наложенным платежом». Если заказ не имеет данного атрибута, метод вернет ошибку. Если параметр sending-date не передается, берется текущая дата.
<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $otpravkaApi->generateDocF112ek(123645924, OtpravkaApi::PRINT_FILE);
 /*
 GuzzleHttp\Psr7\UploadedFile Object
 (
 [clientFilename:GuzzleHttp\Psr7\UploadedFile:private] => f112.pdf
 [clientMediaType:GuzzleHttp\Psr7\UploadedFile:private] => application/pdf; charset=UTF-8
 [error:GuzzleHttp\Psr7\UploadedFile:private] => 0
 [file:GuzzleHttp\Psr7\UploadedFile:private] =>
 [moved:GuzzleHttp\Psr7\UploadedFile:private] =>
 [size:GuzzleHttp\Psr7\UploadedFile:private] => 149702
 [stream:GuzzleHttp\Psr7\UploadedFile:private] => GuzzleHttp\Psr7\Stream Object
 (
 [stream:GuzzleHttp\Psr7\Stream:private] => Resource id #56
 [size:GuzzleHttp\Psr7\Stream:private] => 149702
 [seekable:GuzzleHttp\Psr7\Stream:private] => 1
 [readable:GuzzleHttp\Psr7\Stream:private] => 1
 [writable:GuzzleHttp\Psr7\Stream:private] => 1
 [uri:GuzzleHttp\Psr7\Stream:private] => php://temp
 [customMetadata:GuzzleHttp\Psr7\Stream:private] => Array
 (
 )

 )
 )*/
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Генерация печатных форм для заказа

Генерирует и возвращает pdf файл, который может содержать в зависимости от типа отправления:
  • форму ф7п (посылка, посылка-онлайн, бандероль, курьер-онлайн);
  • форму Е-1 (EMS, EMS-оптимальное, Бизнес курьер, Бизнес курьер экспресс)
  • конверт (письмо заказное).

Опционально прикрепляются формы: Ф112ЭК (отправление с наложенным платежом), Ф22 (посылка онлайн), уведомление (для заказного письма или бандероли).

ВАЖНО: Для генерации печатных форм до формирования партии в третьем параметре batch необходимо передавать false.

<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 // Генерация печатных форм до формирования партии
 $result = $otpravkaApi->generateDocOrderPrintForm(123645924, OtpravkaApi::PRINT_FILE, false, new DateTimeImmutable('now'));
 // Генерация печатных форм после формирования партии
 $result = $otpravkaApi->generateDocOrderPrintForm(123645924, OtpravkaApi::PRINT_FILE, true, new DateTimeImmutable('now'));
 /*
 GuzzleHttp\Psr7\UploadedFile Object
 (
 [clientFilename:GuzzleHttp\Psr7\UploadedFile:private] => form.pdf
 [clientMediaType:GuzzleHttp\Psr7\UploadedFile:private] => application/pdf; charset=UTF-8
 [error:GuzzleHttp\Psr7\UploadedFile:private] => 0
 [file:GuzzleHttp\Psr7\UploadedFile:private] =>
 [moved:GuzzleHttp\Psr7\UploadedFile:private] =>
 [size:GuzzleHttp\Psr7\UploadedFile:private] => 251338
 [stream:GuzzleHttp\Psr7\UploadedFile:private] => GuzzleHttp\Psr7\Stream Object
 (
 [stream:GuzzleHttp\Psr7\Stream:private] => Resource id #70
 [size:GuzzleHttp\Psr7\Stream:private] => 251338
 [seekable:GuzzleHttp\Psr7\Stream:private] => 1
 [readable:GuzzleHttp\Psr7\Stream:private] => 1
 [writable:GuzzleHttp\Psr7\Stream:private] => 1
 [uri:GuzzleHttp\Psr7\Stream:private] => php://temp
 [customMetadata:GuzzleHttp\Psr7\Stream:private] => Array
 (
 )

 )

 )*/
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Генерация печатной формы Ф103

Генерирует и возвращает pdf файл с формой Ф103 для указанной партии.
<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $otpravkaApi->generateDocF103(28, OtpravkaApi::PRINT_FILE);
 /*
 GuzzleHttp\Psr7\UploadedFile Object
 (
 [clientFilename:GuzzleHttp\Psr7\UploadedFile:private] => f103.pdf
 [clientMediaType:GuzzleHttp\Psr7\UploadedFile:private] => application/pdf; charset=UTF-8
 [error:GuzzleHttp\Psr7\UploadedFile:private] => 0
 [file:GuzzleHttp\Psr7\UploadedFile:private] =>
 [moved:GuzzleHttp\Psr7\UploadedFile:private] =>
 [size:GuzzleHttp\Psr7\UploadedFile:private] => 131856
 [stream:GuzzleHttp\Psr7\UploadedFile:private] => GuzzleHttp\Psr7\Stream Object
 (
 [stream:GuzzleHttp\Psr7\Stream:private] => Resource id #74
 [size:GuzzleHttp\Psr7\Stream:private] => 131856
 [seekable:GuzzleHttp\Psr7\Stream:private] => 1
 [readable:GuzzleHttp\Psr7\Stream:private] => 1
 [writable:GuzzleHttp\Psr7\Stream:private] => 1
 [uri:GuzzleHttp\Psr7\Stream:private] => php://temp
 [customMetadata:GuzzleHttp\Psr7\Stream:private] => Array
 (
 )

 )

 )*/
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Подготовка и отправка электронной формы Ф103

Присваивает уникальную версию партии для дальнейшего приема этой партии сотрудниками ОПС. Отправляет по e-mail электронную форму Ф103 в ОПС для регистрации.
<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $otpravkaApi->sendingF103form(28); // return boolean
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Генерация печатной формы акта осмотра содержимого

Генерирует и возвращает pdf файл с формой акта осмотра содержимого для указанной партии.

Важно! Дананя функция работает только, если включена услуга проверки комплектности по отправлению.

<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $otpravkaApi->generateDocCheckingAct(28, OtpravkaApi::PRINT_FILE);
 // TODO если у Вас есть пример ответа, просьба приложить его через pull request :)
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Генерация возвратного ярлыка на одной печатной странице

Генерирует и возвращает pdf файл возвратного ярлыка на одной печатной странице.
<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $otpravkaApi->generateReturnLabel(123456, OtpravkaApi::PRINT_FILE, OtpravkaApi::PRINT_TYPE_PAPER);
 // TODO если у Вас есть пример ответа, просьба приложить его через pull request :)
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Архив

Реализует функции API Почты России для работы с архивом. Для работы данных функций необходимы аутентификационные данные. Подробнее в разделе Конфигурация.

В случае возникновеня ошибок при обмене выбрасывает исключение \LapayGroup\RussianPost\Exceptions\RussianPostException в котором будет текст и код ошибки от API Почты России и дамп сырого ответа с HTTP-кодом.

Перевод партии в архив

Перевод списка партий в архив.
<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $otpravkaApi->archivingBatch([25]);
 /*
 Array (

 [0] => Array
 (
 [batch-name] => 25
 )

 )*/
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Возврат партии из архива

Возврат списка партий из архива.
<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $otpravkaApi->unarchivingBatch([25]);
 /*
 Array Успешный ответ
 (
 [0] => Array
 (
 [batch-name] => 25
 )

 )

 Array Ответ с ошибкой
 (
 [0] => Array
 (
 [batch-name] => 26
 [error-code] => NOT_FOUND
 )

 )*/
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Запрос данных о партиях в архиве

Возврат списка партий в архиве.
<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $otpravkaApi->getArchivedBatches();
 /*
 Array
 (
 [0] => Array
 (
 [batch-name] => 25
 [batch-status] => ARCHIVED
 [batch-status-date] => 2019年09月03日T13:17:59.237Z
 [combined-batch-mail-types] => Array
 (
 [0] => POSTAL_PARCEL
 )

 [courier-order-statuses] => Array
 (
 [0] => NOT_REQUIRED
 )

 [international] =>
 [list-number-date] => 2019年09月08日
 [mail-category] => COMBINED
 [mail-category-text] => Комбинированно
 [mail-rank] => WO_RANK
 [mail-type] => COMBINED
 [mail-type-text] => Комбинированно
 [payment-method] => CASHLESS
 [postmarks] => Array
 (
 [0] => NONSTANDARD
 )

 [postoffice-address] => ул Никольская, д.7-9, стр.3, г Москва
 [postoffice-code] => 109012
 [postoffice-name] => ОПС 109012
 [shipment-avia-rate-sum] => 0
 [shipment-avia-rate-vat-sum] => 0
 [shipment-completeness-checking-rate-sum] => 0
 [shipment-completeness-checking-rate-vat-sum] => 0
 [shipment-contents-checking-rate-sum] => 0
 [shipment-contents-checking-rate-vat-sum] => 0
 [shipment-count] => 1
 [shipment-ground-rate-sum] => 16500
 [shipment-ground-rate-vat-sum] => 3300
 [shipment-insure-rate-sum] => 0
 [shipment-insure-rate-vat-sum] => 0
 [shipment-inventory-rate-sum] => 0
 [shipment-inventory-rate-vat-sum] => 0
 [shipment-mass] => 1000
 [shipment-mass-rate-sum] => 16500
 [shipment-mass-rate-vat-sum] => 3300
 [shipment-notice-rate-sum] => 0
 [shipment-notice-rate-vat-sum] => 0
 [shipment-sms-notice-rate-sum] => 0
 [shipment-sms-notice-rate-vat-sum] => 0
 [shipping-notice-type] => SIMPLE
 [transport-type] => SURFACE
 [use-online-balance] =>
 [wo-mass] =>
 )
 )*/
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Поиск ОПС

Реализует функции API Почты России для поиска ОПС. Для работы данных функций необходимы аутентификационные данные. Подробнее в разделе Конфигурация.

В случае возникновеня ошибок при обмене выбрасывает исключение \LapayGroup\RussianPost\Exceptions\RussianPostException в котором будет текст и код ошибки от API Почты России и дамп сырого ответа с HTTP-кодом.

Поиск почтового отделения по индексу

Возвращает информацию о ОПС.
<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $otpravkaApi->searchPostOfficeByIndex(115551, 0, 0);
 /*
 Array
 (
 [address-source] => Домодедовская ул, 20, к.3, стр.2
 [distance] => 7059103.1165241
 [holidays] => Array
 (
 )

 [is-closed] =>
 [is-private-category] =>
 [is-temporary-closed] =>
 [latitude] => 55.612772
 [longitude] => 37.704862
 [postal-code] => 115551
 [region] => Москва г
 [settlement] => Москва
 [type-code] => ГОПС
 [type-id] => 8
 [working-hours] => Array
 (
 [0] => Array
 (
 [begin-worktime] => 08:00:00.000
 [end-worktime] => 20:00:00.000
 [lunches] => Array
 (
 )

 [weekday-id] => 1
 )

 [1] => Array
 (
 [begin-worktime] => 08:00:00.000
 [end-worktime] => 20:00:00.000
 [lunches] => Array
 (
 )

 [weekday-id] => 2
 )

 [2] => Array
 (
 [begin-worktime] => 08:00:00.000
 [end-worktime] => 20:00:00.000
 [lunches] => Array
 (
 )

 [weekday-id] => 3
 )

 [3] => Array
 (
 [begin-worktime] => 08:00:00.000
 [end-worktime] => 20:00:00.000
 [lunches] => Array
 (
 )

 [weekday-id] => 4
 )

 [4] => Array
 (
 [begin-worktime] => 08:00:00.000
 [end-worktime] => 20:00:00.000
 [lunches] => Array
 (
 )

 [weekday-id] => 5
 )

 [5] => Array
 (
 [begin-worktime] => 09:00:00.000
 [end-worktime] => 18:00:00.000
 [lunches] => Array
 (
 )

 [weekday-id] => 6
 )

 [6] => Array
 (
 [begin-worktime] => 09:00:00.000
 [end-worktime] => 14:00:00.000
 [lunches] => Array
 (
 )

 [weekday-id] => 7
 )

 )

 [works-on-saturdays] => 1
 [works-on-sundays] => 1
 [phones] => Array
 (
 [0] => Array
 (
 [is-fax] =>
 [phone-number] => 1000000
 [phone-town-code] => 800
 [phone-type-name] => Прочее
 )

 )

 [service-groups] => Array
 (
 [0] => Array
 (
 [group-id] => 2101
 [group-name] => Почтовые услуги
 )

 [1] => Array
 (
 [group-id] => 2315
 [group-name] => Коммерческие услуги
 )

 [2] => Array
 (
 [group-id] => 2259
 [group-name] => Финансовые услуги
 )

 )

 )*/
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Поиск обслуживающего ОПС по адресу

Возвращает список почтовых индексов ОПС и признак является ли переданный адрес точным адресом ОПС.
<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $otpravkaApi->searchPostOfficeByAddress('Санкт-Петербург, улица Победы, 15к1');
 /*
 Array
 (
 [is-matched] =>
 [postoffices] => Array
 (
 [0] => 196070
 )

 )
 */
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Поиск почтовых сервисов ОПС

Может возвращать как все доступные сервисы, так и сервисы определенной группы (например: Киберпочт@).
<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $otpravkaApi->getPostOfficeServices(196070);
 $result = $otpravkaApi->getPostOfficeServices(196070, 2101); // С фильтром по группе
 /*
 Array
 (
 [0] => Array
 (
 [code] => 1090900
 [group-id] => 2101
 [name] => Хранение и возврат почтовых отправлений, периодических изданий: Абонирование ячейки абонементного почтового шкафа, Возврат посылок, Возврат РПО (кроме посылок), Хранение РПО в ОПС
 )

 [1] => Array
 (
 [code] => 1090200
 [group-id] => 2101
 [name] => Информирование отправителей и получателей РПО, ЕМS -отправлений об их статусе: SMS-уведомление, Заказное уведомление о вручении внутреннего РПО, Простое уведомление о вручении внутреннего РПО, Простое уведомление о получении международного почтового отправления, Электронное уведомление о вручении внутреннего РПО
 )

 [2] => Array
 (
 [code] => 1090100
 [group-id] => 2101
 [name] => Доставка и оказание услуг по адресу расположения (проживания) клиента: Доставка посылок и мелких пакетов по местонахождению клиента
 )
 */
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Поиск почтовых отделений по координатам

Возвращает список ОПС по переданному массиву параметров согласно документации.
<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $otpravkaApi->searchPostOfficeByCoordinates($params); // $params - массив параметров поиска
 /*
 Ответ аналогичен функции searchPostOfficeByIndex только список.
 */
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Поиск почтовых индексов в населённом пункте

Возвращает список индексов.
<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $otpravkaApi->getPostalCodesInLocality('Екатеринбург');
 /*
 Array
 (
 [0] => 620000
 [1] => 620002
 [2] => 620004
 [3] => 620007
 [4] => 620010
 [5] => 620012
 */
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Выгрузка из паспорта ОПС

Выгружает данные ОПС, ПВЗ, Почтоматов из Паспорта ОПС. Генерирует и возвращает zip архив с текстовым файлом TYPEdd_MMMM_yyyy.txt, где:
  • TYPE - тип объекта
  • dd_MMMM_yyyy - время создания архива

Входные параметры:

<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $result = $otpravkaApi->getPostOfficeFromPassport(\LapayGroup\RussianPost\Enum\OpsObjectType::OPS);
 /*
 GuzzleHttp\Psr7\UploadedFile Object
 (
 [clientFilename:GuzzleHttp\Psr7\UploadedFile:private] => OPS02_May_2020.zip.octet-stream
 [clientMediaType:GuzzleHttp\Psr7\UploadedFile:private] => application/octet-stream; charset=UTF-8
 [error:GuzzleHttp\Psr7\UploadedFile:private] => 0
 [file:GuzzleHttp\Psr7\UploadedFile:private] =>
 [moved:GuzzleHttp\Psr7\UploadedFile:private] =>
 [size:GuzzleHttp\Psr7\UploadedFile:private] => 4203382
 [stream:GuzzleHttp\Psr7\UploadedFile:private] => GuzzleHttp\Psr7\Stream Object
 (
 [stream:GuzzleHttp\Psr7\Stream:private] => Resource id #56
 [size:GuzzleHttp\Psr7\Stream:private] => 4203382
 [seekable:GuzzleHttp\Psr7\Stream:private] => 1
 [readable:GuzzleHttp\Psr7\Stream:private] => 1
 [writable:GuzzleHttp\Psr7\Stream:private] => 1
 [uri:GuzzleHttp\Psr7\Stream:private] => php://temp
 [customMetadata:GuzzleHttp\Psr7\Stream:private] => Array
 (
 )

 )
 )*/
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Долгосрочное хранение

!!!Данный раздел не работает в API Почты России!!!

Реализует функции API Почты России для работы с долгосрочным хранением. Для работы данных функций необходимы аутентификационные данные. Подробнее в разделе Конфигурация.

В случае возникновеня ошибок при обмене выбрасывает исключение \LapayGroup\RussianPost\Exceptions\RussianPostException в котором будет текст и код ошибки от API Почты России и дамп сырого ответа с HTTP-кодом.

Возвраты

Реализует функции API Почты России для работы с услугой Легкий возврат. Для работы данных функций необходимы аутентификационные данные. Подробнее в разделе Конфигурация.

В случае возникновеня ошибок при обмене выбрасывает исключение \LapayGroup\RussianPost\Exceptions\RussianPostException в котором будет текст и код ошибки от API Почты России и дамп сырого ответа с HTTP-кодом.

Создание возвратного отправления для ранее созданного отправления

Создает возвратное отправление (ЛВ) для уже созданного в ЛК отправления.

Входные параметры:

  • $rpo - ШПИ прямого отправления;
  • $mail_type - Вид РПО. См. Вид РПО.

Пример получения списка текущих точек сдачи:

<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
$otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
$result = $otpravkaApi->returnShipment(123456, \LapayGroup\RussianPost\Enum\MailType::UNDEFINED);
// Успешный ответ
/*Array
(
 [return-barcode] => 1234567890 // ШПИ возвратного отправления
)

// Ответ с ошибкой
/*Array
(
 [errors] => Array
 (
 [0] => Array
 (
 [code] => DIRECT_SHIPMENT_NOT_FOUND
 [description] => Прямое отправление не найдено
 )

 )

)*/

Создание отдельного возвратного отправления

Создает возвратное отправление (ЛВ) без прямого. Метод asArr() проверяет заполнение необходимых для создания возвратного отправления полей и в случае незаполнения выбрасывает \InvalidArgumentException.

Пример создания заказа:

<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $addressFrom = new \LapayGroup\RussianPost\Entity\AddressReturn();
 $addressFrom->setAddressType(\LapayGroup\RussianPost\Enum\AddressType::DEFAULT);
 $addressFrom->setIndex(125009);
 $addressFrom->setPlace('Москва');
 $addressFrom->setRegion('Москва');
 $addressTo = new \LapayGroup\RussianPost\Entity\AddressReturn();
 $addressTo->setAddressType(\LapayGroup\RussianPost\Enum\AddressType::DEFAULT);
 $addressTo->setIndex(115551);
 $addressTo->setPlace('Москва');
 $addressTo->setRegion('Москва');
 $return_shipment = new \LapayGroup\RussianPost\Entity\ReturnShipment();
 $return_shipment->setMailType(\LapayGroup\RussianPost\Enum\MailType::UNDEFINED);
 $return_shipment->setSenderName('Иванов Иван');
 $return_shipment->setRecipientName('Петров Петр');
 $return_shipment->setOrderNum(1234);
 $return_shipment->setAddressFrom($addressFrom);
 $return_shipment->setAddressTo($addressTo);
 $result = $otpravkaApi->createReturnShipment([$return_shipment->asArr()]);
 // Успешный ответ
 // TODO добавьте в PR, если у кого есть реальный пример, пожалуйста :-)
 // Ответ с ошибкой
 /*Array
 (
 [0] => Array
 (
 [errors] => Array
 (
 [0] => Array
 (
 [code] => FREE_ER_ADDRESS_NOT_ENABLED
 [description] => Свободный ввод адреса не доступен
 )

 )

 [position] => 0
 )
 )*/
}
catch (\InvalidArgumentException $e) {
 // Обработка ошибки заполнения параметров
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Удаление отдельного возвратного отправления

Удаляет отдельное возвратное отправление.

Входные параметры:

  • $rpo - ШПИ возвратного отправления.

Выходные параметры:

Пример получения списка текущих точек сдачи:

<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
$otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
$result = $otpravkaApi->deleteReturnShipment(123456);
/*Array
(
 [code] => RETURN_SHIPMENT_NOT_FOUND
 [description] => Возвратное отправление не найдено
)*/

Редактирование отдельного возвратного отправления

Редактирование отдельного возвратного отправления (ЛВ). Метод asArr() проверяет заполнение необходимых для создания возвратного отправления полей и в случае незаполнения выбрасывает \InvalidArgumentException.

Пример создания заказа:

<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
 $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
 $addressFrom = new \LapayGroup\RussianPost\Entity\AddressReturn();
 $addressFrom->setAddressType(\LapayGroup\RussianPost\Enum\AddressType::DEFAULT);
 $addressFrom->setIndex(125009);
 $addressFrom->setPlace('Москва');
 $addressFrom->setRegion('Москва');
 $addressTo = new \LapayGroup\RussianPost\Entity\AddressReturn();
 $addressTo->setAddressType(\LapayGroup\RussianPost\Enum\AddressType::DEFAULT);
 $addressTo->setIndex(115551);
 $addressTo->setPlace('Москва');
 $addressTo->setRegion('Москва');
 $return_shipment = new \LapayGroup\RussianPost\Entity\ReturnShipment();
 $return_shipment->setMailType(\LapayGroup\RussianPost\Enum\MailType::UNDEFINED);
 $return_shipment->setSenderName('Иванов Иван');
 $return_shipment->setRecipientName('Петров Петр');
 $return_shipment->setOrderNum(1234);
 $return_shipment->setAddressFrom($addressFrom);
 $return_shipment->setAddressTo($addressTo);
 $result = $otpravkaApi->editReturnShipment($return_shipment, 123456);
 // Успешный ответ
 // TODO добавьте в PR, если у кого есть реальный пример, пожалуйста :-)
 // Ответ с ошибкой
 /* Array
 (
 [errors] => Array
 (
 [0] => Array
 (
 [code] => FREE_ER_ADDRESS_NOT_ENABLED
 [description] => Свободный ввод адреса не доступен
 )

 )

 )*/
}
catch (\InvalidArgumentException $e) {
 // Обработка ошибки заполнения параметров
}
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
 // Обработка ошибочного ответа от API ПРФ
}
catch (\Exception $e) {
 // Обработка нештатной ситуации
}

Настройки

Реализует функции API Почты России для работы с настройками. Для работы данных функций необходимы аутентификационные данные. Подробнее в разделе Конфигурация.

В случае возникновеня ошибок при обмене выбрасывает исключение \LapayGroup\RussianPost\Exceptions\RussianPostException в котором будет текст и код ошибки от API Почты России и дамп сырого ответа с HTTP-кодом.

Текущие точки сдачи

Возвращает список текущих точек сдачи.

Пример получения списка текущих точек сдачи:

<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
$otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
$list = $otpravkaApi->shippingPoints();

Текущие настройки пользователя

Возвращает текущие настройки пользователя.

Пример получения списка текущих точек сдачи:

<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
$otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
$info = $otpravkaApi->settings();

About

SDK для работы с API Почты России (pochta.ru)

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 17

Languages

AltStyle によって変換されたページ (->オリジナル) /