cvxvp/rpost

俄罗斯邮政API的SDK

0.9.9 2020-12-15 11:17 UTC

README




Latest Stable Version Total Downloads License Telegram Chat

SDK用于集成俄罗斯邮政软件包 Почты России.

查看所有项目或向作者赠送咖啡可以这里.

内容

变更日志

  • 0.9.9 - 修复了在跟踪中切换客户端时的错误。感谢Alliance-X进行修复;
  • 0.9.8 - 修复了与OПС工作的功能。感谢Sergey Voronov发现和修复;
  • 0.9.7 - 修复了API的GET方法的工作。感谢GrayWolfy发现;
  • 0.9.6 - 添加了创建订单V2的功能,返回条形码和客户IS号,感谢GrayWolfy的帮助;
  • 0.9.5 - 更新了发送状态列表,更改了批量跟踪的行为,更多详情这里
  • 0.9.4 - 在Composer依赖中添加了对Guzzle 7.1的支持;
  • 0.9.3 - 在Composer依赖中添加了对Guzzle 7的支持;
  • 0.9.2 - 在订单声明中为包裹添加了新的字段trademark(商标),感谢PankovAlxndr更新;
  • 0.9.1 - 更新了发送状态列表,添加了在创建批次之前生成订单打印格式,更多详情这里
  • 0.9.0 - 更新发货状态列表,轻松退货,从OPS护照中导出,详情请见此处;
  • 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 - 为ЕКОМ添加了获取快递点列表的功能,修复了创建API http客户端的错误;
  • 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 - 更改了邮政计算器的地址,旧地址将于2019年1月1日停用;
  • 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

俄罗斯邮政计费器

获取发货类型列表

要获取分类列表,需要调用类 \LapayGroup\RussianPost\CategoryListparseToArray 方法。

<?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 = 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);
}

catch (\LapayGroup\RussianPost\Exceptions\RussianPostTarrificatorException $e) {
    // Обработка ошибок тарификатора 
    $errors = $e->getErrors(); // Массив вида [['msg' => 'текст ошибки', 'code' => код ошибки]]
}

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

catch (\Exception $e) {
    // Обработка нештатной ситуации
}

?>

$calcInfoLapayGroup\RussianPost\CalculateInfo 类的实例。可用的方法

  • getCategoryItemId() - 邮递类型的 ID
  • getCategoryItemName() - 邮递类型的名称
  • getWeight() - 邮递物的重量(克)
  • getTransportationName() - 传送方式
  • getPay() - 总费用(不含增值税)
  • getPayNds() - 总费用(含增值税)
  • 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(含增值税)
SMS 投递通知 /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>  [] []    

跟踪邮件发送(RPO)

实现俄罗斯邮政 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 在俄罗斯邮政服务中创建一个请求,以获取有关一系列发送的所有操作的信息。由于HTTP包的大小,俄罗斯邮政服务在最终阶段无法返回包含3000个发送的请求的响应,因此该函数将列表拆分为每个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 - 无法创建请求的RPO编号的一维数组(在实践中经常发生,需要对这些RPO进行重复请求创建)
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 - 关联数组,其键为RPO编号,值为扩展属性格式的对象数组

  • OperCtgName - 操作子类型的文本名称;
  • isFinal - 终端状态标志(在收到请求后不需要再次请求此RPO的状态)。
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(记录标识符)用于确定输入和输出记录的对应关系,因为返回记录的排序顺序没有保证。方法自动根据指定地址查找并返回最近的OPS索引。

如果响应中的地址被认为是正确的发送地址

  • 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 类对象。

计算运输成本(简化版)

根据指定的输入数据计算邮寄费用。发送点的OPS索引从客户配置文件中获取。返回的值以分表示。

重要!发货索引必须指明在其中一个交寄点,否则将返回错误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) {
      // Обработка нештатной ситуации
  }
?>

计算运输期限

使用 俄罗斯邮政配送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响应的转储。

获取PВЗ列表


返回EKOМ订单的快递点列表。

<?php
use Symfony\Component\Yaml\Yaml;
use LapayGroup\RussianPost\Providers\OtpravkaApi;

try {
    $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml')));
    $pvz_list = $otpravkaApi->getPvzList();
    /*
    Array
    (
        [0] => Array
            (
                [address] => Array
                    (
                        [addressType] => DEFAULT
                        [house] => 186
                        [index] => 656067
                        [manualInput] =>
                        [place] => г. Барнаул
                        [region] => край Алтайский
                        [street] => ул. Попова
                    )
    
                [brand-name] => Почта России
                [card-payment] =>
                [cash-payment] =>
                [closed] =>
                [contents-checking] => 1
                [delivery-point-index] => 656067
                [delivery-point-type] => DELIVERY_POINT
                [functionality-checking] =>
                [id] => 33815
                [latitude] => 53.341753
                [legal-name] => УФПС Алтайского края - филиал ФГУП "Почта России", Барнаульский почтамт, Отделение почтовой связи Барнаул  656067
                [legal-short-name] => БАРНАУЛ 67
                [longitude] => 83.667594
                [partial-redemption] =>
                [temporary-closed] =>
                [with-fitting] =>
                [work-time] => Array
                    (
                        [0] => пн, открыто: 08:00 - 20:00
                        [1] => вт, открыто: 08:00 - 20:00
                        [2] => ср, открыто: 08:00 - 20:00
                        [3] => чт, открыто: 08:00 - 20:00
                        [4] => пт, открыто: 08:00 - 20:00
                        [5] => сб, открыто: 09:00 - 18:00
                        [6] => вс, выходной
                    )
    
            )
    
        [1] => Array
            (
                [address] => Array
                    (
                        [addressType] => DEFAULT
                        [corpus] => 2
                        [house] => 8
                        [index] => 119526
                        [manualInput] =>
                        [place] => г. Москва
                        [region] => г. Москва
                        [street] => ул. 26-ти Бакинских Комиссаров
                    )
    
                [brand-name] => Почта России
                [card-payment] =>
                [cash-payment] =>
                [closed] =>
                [contents-checking] => 1
                [delivery-point-index] => 119526
                [delivery-point-type] => DELIVERY_POINT
                [functionality-checking] =>
                [id] => 35009
                [latitude] => 55.659170
                [legal-name] => УФПС г. Москвы-филиал ФГУП Почта России ММП 6 ОПС 526
                [legal-short-name] => МОСКВА 526
                [longitude] => 37.491359
                [partial-redemption] =>
                [temporary-closed] =>
                [with-fitting] =>
                [work-time] => Array
                    (
                        [0] => пн, открыто: 08:00 - 20:00
                        [1] => вт, открыто: 08:00 - 20:00
                        [2] => ср, открыто: 08:00 - 20:00
                        [3] => чт, открыто: 08:00 - 20:00
                        [4] => пт, открыто: 08:00 - 20:00
                        [5] => сб, открыто: 09:00 - 18:00
                        [6] => вс, открыто: 09:00 - 14:00
                    )
    
            )
    */
}
    
catch (\InvalidArgumentException $e) {
  // Обработка ошибки заполнения параметров
}
        
catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) {
  // Обработка ошибочного ответа от API ПРФ
}

catch (\Exception $e) {
  // Обработка нештатной ситуации
}

创建订单

创建新订单。自动计算并设置运费。
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) {
  // Обработка нештатной ситуации
}

按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->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) {
  // Обработка нештатной ситуации
}

将订单退回“新订单”

方法将订单从批次转移到“新订单”部分。批次必须处于“已创建”状态。

<?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对象。

注意!在打印任何文档之前,需要通过调用函数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);
}

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

catch (\Exception $e) {
  // Обработка нештатной ситуации
}

生成文档包

生成并返回包含4个文件的zip存档

  • Export.xls, Export.csv - 包含批次中申报单主要数据的列表
  • F103.pdf - 包含批次中申报单的F103表
  • 根据发送类型和类别,生成包含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) {
  // Обработка нештатной ситуации
}

生成打印格式F7p

生成并返回指定订单的f7p表格的pdf文件。可选地,文件中附上F22表(在线包裹)。如果未提供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) {
  // Обработка нештатной ситуации
}

生成打印格式F112ЭК

生成并返回指定订单的F112ЭК表格的pdf文件。仅适用于带有“货到付款”的订单。如果订单没有此属性,方法将返回错误。如果未提供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文件,该文件可能包含以下类型之一的表格,具体取决于发送类型

  • 表格f7p(包裹、在线包裹、挂号信、在线快递);
  • 表格E-1(EMS、EMS-优化、商业快递、商业快递Express)
  • 信封(挂号信)。

可选附加表格:F112ЭК(货到付款的发送)、F22(在线包裹)、通知(用于挂号信或包裹)。

注意:在生成打印表格之前,如果尚未形成批次,则在第三个参数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) {
  // Обработка нештатной ситуации
}

生成打印格式F103

为指定批次生成并返回包含表格 Ф103 的 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->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) {
  // Обработка нештатной ситуации
}

准备和发送电子表单F103

分配唯一批次版本以便于后续由 OPS 工作人员接收该批次。通过电子邮件发送包含表格 Ф103 的电子表格到 OPS 进行登记。

<?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-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) {
  // Обработка нештатной ситуации
}

搜索OПС


实现俄罗斯邮政的 API 功能以查找 OPS。使用这些功能需要认证数据。详情请见 配置 部分。

在数据交换出错时,抛出异常 \LapayGroup\RussianPost\Exceptions\RussianPostException,其中包含来自俄罗斯邮政服务API的错误文本和代码以及原始HTTP响应的转储。

按索引搜索邮政局

返回 OPS 的信息。

<?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) {
  // Обработка нештатной ситуации
}

按地址搜索服务 OPS

返回 OPS 的邮政索引列表以及传入地址是否为 OPS 的精确地址的标志。

<?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) {
  // Обработка нештатной ситуации
}

搜索 OPS 的邮政服务

可以返回所有可用服务,也可以返回特定组的服务(例如:电子邮政)。

<?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) {
  // Обработка нештатной ситуации
}

按坐标搜索邮政局

根据提供的参数数组返回 OPS 列表,这些参数遵循 文档

<?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) {
  // Обработка нештатной ситуации
}

从OПС护照中导出

从 OPS 护照中导出 OPS、PVZ、邮政自动柜员机的数据。
生成并返回包含文本文件 TYPEdd_MMMM_yyyy.txt 的 zip 存档,其中

  • 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的长期存储功能。API链接。使用这些功能需要认证数据。更多详情请参阅配置部分。

在数据交换出错时,抛出异常 \LapayGroup\RussianPost\Exceptions\RussianPostException,其中包含来自俄罗斯邮政服务API的错误文本和代码以及原始HTTP响应的转储。

退货


实现俄罗斯邮政API的轻松退货功能。API链接。使用这些功能需要认证数据。更多详情请参阅配置部分。

在数据交换出错时,抛出异常 \LapayGroup\RussianPost\Exceptions\RussianPostException,其中包含来自俄罗斯邮政服务API的错误文本和代码以及原始HTTP响应的转储。

为先前创建的发送创建退货发送

为已创建在个人账户中的发送项创建退货发送(LV)。

输入参数

  • $rpo - 直接发送的邮件处理信息(RPO);
  • $mail_type - RPO类型。 查看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->returnShipment(123456, \LapayGroup\RussianPost\Enum\MailType::UNDEFINED);

// Успешный ответ
/*Array
(
    [return-barcode] => 1234567890 // ШПИ возвратного отправления
)

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

        )

)*/

创建单独的退货发送

创建不包含直接的退货发送(LV)。
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 - 退货发送的邮件处理信息(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] => Возвратное отправление не найдено
)*/

编辑单独的退货发送

编辑单独的退货发送(LV)。
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的设置功能。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();