Почты России.
SDK для интеграции с программным комплексомПосмотреть все проекты или поддержать автора можно тут.
Почта России ищет опытных разработчиков, которые будут заниматься созданием модулей для CMS, CRM и ERP систем, а так же интеграциями с ПО ключевых клиентов. Работа в Москве, БЦ Сириус Парк (м. Нагатинская). Хочешь принять участие в масштабировании национального почтового оператора? Тогда эта вакансия для тебя. Ознакомиться с вакансиями можно тут.
Содержание
- Changelog
- Тарификатор Почты России
- Конфигурация
- Отладка
- Трекинг почтовых отправлений (РПО)
- Данные
- Заказы
- Партии
- Документы
- Архив
- Поиск ОПС
- Долгосрочное хранение (Не работает в API Почты России!)
- Настройки
Changelog
- 0.2.0 - Расчет стоимости отправки тарификатором Почты России;
- 0.3.0 - Нормализация данных, упрощенный расчет стоимости отправки;
- 0.4.0 - Единичный и пакетный трекинг отправлений;
- 0.4.5 - Актуализация списка статусов, признак конечного статуса в пакетном трекинге;
- 0.4.6 - Было принято решение исключить зависимость с symfony/yaml и понизить требуемую версию PHP до 5.5+. Подробнее в разделе Конфигурация;
- 0.4.7 - Актуализация списка статусов;
- 0.4.8 - Изменен адрес калькулятора Почты России, старый будет отключен 01.01.2019;
- 0.4.9 - Исправлена ошибка выставления флага isFinal в пакетном трекинге отправлений, за обнаружение спасибо Dmitry Sobchenko;
- 0.4.10 - Актуализирован расчет стоимости пересылки (Упрощенная версия), за актуализацию спасибо rik43;
- 0.4.11 - Актуализирован список статусов Почты России;
- 0.4.12 - Скорректировано описание упрощенной версии расчета тарифов, добавлен метод получения списка точек сдачи;
- 0.5.0 - Описание можно посмотреть тут;
- 0.5.1 - Описание можно посмотреть тут;
- 0.5.2 - Исправлена ошибка получения информации о сроках доставки в формате HTML;
- 0.5.3 - Описание можно посмотреть тут;
- 0.5.4 - Правки composer.json;
- 0.6.0 - Долгожданная работа с заказами, подробнее тут;
- 0.6.5 - Реализованы функции работы с архивом;
- 0.6.6 - Исправлено формирование и проверка параметров для запроса на создание заказа;
- 0.7.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
$objectId = 2020; // Письмо с объявленной ценностью
// Минимальный набор параметров для расчета стоимости отправления
$params = [
'weight' => 20, // Вес в граммах
'sumoc' => 10000, // Сумма объявленной ценности в копейках
'from' => 109012 // Почтовый индекс места отправления
];
// Список ID дополнительных услуг
// 2 - Заказное уведомление о вручении
// 21 - СМС-уведомление о вручении
$services = [2,21];
$TariffCalculation = new \LapayGroup\RussianPost\TariffCalculation();
$calcInfo = $TariffCalculation->calculate($objectId, $params, $services);
?>
$calcInfo - это объект класса LapayGroup\RussianPost\CalculateInfo Доступные методы:
- getError() - возвращает флаг наличия ошибки при расчета (true - есть ошибка, false - нет ошибки)
- getErrorList() - массив с текстовым описанием ошибок при расчете
- 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.
Информацию о аутентификационных данных можно получить здесь и здесь.
Отладка
Для логирования запросов и ответов используется стандартный 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-07-19 11:59:50] name.INFO: Russian Post Tariff API request: from=101000&to=101000&weight=100&sumoc=0&date=20190719&object=23030&jsontext=1 [] []
[2019-07-19 11:59:51] name.INFO: Russian Post Tariff API response: {"caption": "Ошибки тарификации", "version": "1.10.30.323", "data": {"id": 23030, "typ": 23, "cat": 3, "dir": 0, "name": "Посылка онлайн обыкновенная", "seq": 50, "date": 20190719, "date-first": 20190101}, "error": ["Услуга \"Посылка онлайн обыкновенная\" не оказывается. Плата за доставку посылки онлайн (тариф 163): в 101000 МОСКВА не осуществляется (маршруты nt101000 и nt1000000001045). (1372)"], "errors": [{"msg":"Услуга \"Посылка онлайн обыкновенная\" не оказывается. Плата за доставку посылки онлайн (тариф 163): в 101000 МОСКВА не осуществляется (маршруты nt101000 и nt1000000001045).","code":1372}]} [] []
[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 содержащий данные по расчитанному тарифу.
Расчет сроков доставки
Расчитывает сроки доставки по типам отправлений используя API доставки Почты России
Пример вызова:
<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;
try {
$otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
$res = $otpravkaApi->getDeliveryPeriod(\LapayGroup\RussianPost\PostType::EMS, 115551, 115551);
/*
Array
(
[version] => 1.2.10.28
[date] => 20190621
[datefirst] => 20190411
[posttype] => 7
[posttypename] => EMS
[from] => 115551
[fromname] => МОСКВА 551
[to] => 115551
[toname] => МОСКВА 551
[route] => 43-45000000-45000000
[routename] => МОСКВА 551-МОСКВА 551
[delivery] => Array
(
[min] => 1
[max] => 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->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) {
// Обработка нештатной ситуации
}
Изменение ранее созданного заказа. Автоматически рассчитывает и проставляет плату за пересылку. Редактирование заказа
<?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('333'); // Меняем внутренний номер заказа
$order->setPlaceTo('Москва');
$order->setRecipientName('Иванов Иван');
$order->setRegionTo('Москва');
$order->setStreetTo('Каширское шоссе');
$order->setRoomTo('1');
$order->setSurname('Иванов');
$orders[] = $order->asArr();
$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-03T11: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-03T11: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-03T11: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-03T11: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-03T11: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 с данными о файле.
Генерирует и возвращает 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) {
// Обработка нештатной ситуации
}
Генерирует и возвращает pdf файл с формой ф7п для указанного заказа. Опционально в файл прикрепляется форма Ф22 (посылка онлайн). Если параметр sending-date не передается, берется текущая дата. Генерация печатной формы Ф7п
<?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) {
// Обработка нештатной ситуации
}
Генерирует и возвращает pdf-файл с заполненной формой Ф112ЭК для указанного заказа. Только для заказа с «наложенным платежом». Если заказ не имеет данного атрибута, метод вернет ошибку. Если параметр sending-date не передается, берется текущая дата. Генерация печатной формы Ф112ЭК
<?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 (посылка онлайн), уведомление (для заказного письма или бандероли).
<?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, 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) {
// Обработка нештатной ситуации
}
Генерирует и возвращает pdf файл с формой Ф103 для указанной партии. Генерация печатной формы Ф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) {
// Обработка нештатной ситуации
}
Присваивает уникальную версию партии для дальнейшего приема этой партии сотрудниками ОПС. Отправляет по e-mail электронную форму Ф103 в ОПС для регистрации. Подготовка и отправка электронной формы Ф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) {
// Обработка нештатной ситуации
}
Архив
Реализует функции 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-03T13: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-кодом.
Долгосрочное хранение
!!!Данный раздел не работает в API Почты России!!!
Реализует функции API Почты России для работы с данными. Для работы данных функций необходимы аутентификационные данные. Подробнее в разделе Конфигурация.
В случае возникновеня ошибок при обмене выбрасывает исключение \LapayGroup\RussianPost\Exceptions\RussianPostException в котором будет текст и код ошибки от API Почты России и дамп сырого ответа с HTTP-кодом.
Настройки
Реализует функции 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();