lapaygroup / russianpost
用于与俄罗斯邮政API (pochta.ru) 交互的SDK
Requires
- php: >=7.0
- ext-json: *
- ext-soap: *
- guzzlehttp/guzzle: ^6.3 || ^7.0
- psr/log: ^1.1 || ^2.0 || ^3.0
- dev-master
- 1.0.2
- 1.0.1
- 1.0.0
- 0.9.23
- 0.9.22
- 0.9.21
- 0.9.20
- 0.9.19
- 0.9.18
- 0.9.17
- 0.9.16
- 0.9.15
- 0.9.14
- 0.9.13
- 0.9.12
- 0.9.11
- 0.9.10
- 0.9.9
- 0.9.8
- 0.9.7
- 0.9.6
- 0.9.5
- 0.9.4
- 0.9.3
- 0.9.2
- 0.9.1
- 0.9.0
- 0.8.6
- 0.8.5
- 0.8.4
- 0.8.3
- 0.8.2
- 0.8.1
- 0.8.0
- 0.7.4
- 0.7.3
- 0.7.2
- 0.7.1
- 0.7.0
- 0.6.6
- 0.6.5
- 0.6.0
- 0.5.4
- 0.5.3
- 0.5.2
- 0.5.1
- 0.5.0
- 0.4.12
- 0.4.11
- 0.4.10
- 0.4.9
- 0.4.8
- 0.4.7
- 0.4.6
- 0.4.5
- 0.4.1
- 0.4.0
- 0.3.3
- 0.3.2
- 0.3.1
- 0.3.0
- 0.2.3
- 0.2.2
- 0.2.1
- 0.2.0
- 0.1.8
- 0.1.7
- 0.1.6
- 0.1.5
- 0.1.4
- 0.1.3
- 0.1.2
- 0.1.1
- 0.1.0
- 0.0.1
- dev-feature/version/1_0
- dev-version_0_9
This package is auto-updated.
Last update: 2024-09-16 17:42:20 UTC
README
SDK用于集成俄罗斯邮政软件系统 Почты России.
查看所有项目或为作者赠送咖啡请访问此处.
内容
变更日志
- 1.0.2 - 修复了createBatch()方法中的Null。感谢您的关注petrovich24;
- 1.0.1 - 修复了更新后的clean函数的工作;
- 1.0.0 - 描述可在此处查看此处;
- 0.9.23 - 添加了对Guzzle 7.*的支持;
- 0.9.22 - 在Composer依赖项中添加了对Guzzle 7.8的支持;
- 0.9.21 - 更新了依赖项 psr/log,解决了问题 #46,更新了发送状态列表,添加了俄罗斯邮政的新最终状态;
- 0.9.20 - 修复了与PHP 8.2的兼容性并添加了对Composer依赖项中Guzzle 7.5的支持。感谢NickMitin的修复;
- 0.9.19 - 在Composer依赖项中添加了对Guzzle 7.4的支持;
- 0.9.18 - 修复ecom-data的传输问题。感谢Stanislav Naumuk的修复;
- 0.9.17 - 在Item.php的setter中修复了错误。感谢SERGEY的修复;
- 0.9.16 - 更新了订单中嵌入属性。感谢SERGEY的修复;
- 0.9.15 - 在计费器中添加了设置超时选项。感谢DarWiM的修复;
- 0.9.14 - 在Composer依赖中添加了对Guzzle 7.3的支持;
- 0.9.13 - 在创建V1和V2订单时添加了订单评论字段;
- 0.9.12 - 修复了API邮局响应中缺少$result->historyRecord的错误。感谢Nikita Burichenko的修复;
- 0.9.11 - 在Composer依赖中添加了对Guzzle 7.2的支持;
- 0.9.10 - 在发送电子表格F103的方法中添加了对useOnlineBalance标志的支持;
- 0.9.9 - 修复了切换跟踪中客户端的错误。感谢Alliance-X的修复;
- 0.9.8 - 修复了与ОПС一起工作的函数。感谢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 - 将依赖关系从严格的6.3更改为Guzzle 6.3+;
- 0.8.3 - 改进了对EKOM包裹计费的支持,感谢Konstantin Shevsky的改进;
- 0.8.2 - 更新了计费器的请求和响应参数,感谢Konstantin Shevsky的更新;
- 0.8.1 - 添加了获取EКOM的PВЗ列表的功能,修复了创建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\CategoryList 的 parseToArray 方法
<?php $CategoryList = new \LapayGroup\RussianPost\CategoryList(); $categoryList = $CategoryList->parseToArray(); ?>
在 $categoryList 中,我们将获得一个关联数组,其中包含类别、子类别和邮政发送类型的选项以及用于计算费率的参数列表。根据这些数据,可以轻松快速地构建一个类似俄罗斯邮政计费器的表单计算器。
如果需要排除某些类别,则在调用 parseToArray 之前调用 setCategoryDelete 方法,并传递要排除的类别的ID列表。
<?php $CategoryList = new \LapayGroup\RussianPost\CategoryList(); $CategoryList->setCategoryDelete([100,200,300]); $categoryList = $CategoryList->parseToArray(); ?>
计算发送成本
objectId、$params中的参数列表和$service中的附加服务均来自数组 $categoryList。
<?php try { $objectId = 23030; // Посылка онлайн обыкновенная // Минимальный набор параметров для расчета стоимости отправления c доставкой $params = [ 'weight' => 600, // Вес в граммах 'sumoc' => 10000, // Сумма объявленной ценности в копейках 'from' => 109012, // Почтовый индекс места отправления 'to' => 115551 ]; // Список ID дополнительных услуг // 2 - Заказное уведомление о вручении // 21 - СМС-уведомление о вручении // 42 - Пакет СМС уведомлений получателю при единичном приеме $services = [42]; $TariffCalculation = new \LapayGroup\RussianPost\TariffCalculation(); // Расчет с сроками доставки $calcInfo = $TariffCalculation->calculate($objectId, $params, true, $services); // Расчет без сроков доставки $calcInfo = $TariffCalculation->calculate($objectId, $params, false, $services); /* LapayGroup\RussianPost\CalculateInfo Object ( [version:LapayGroup\RussianPost\CalculateInfo:private] => 2.16.11.700 [categoryItemId:LapayGroup\RussianPost\CalculateInfo:private] => 23030 [categoryItemName:LapayGroup\RussianPost\CalculateInfo:private] => Посылка онлайн обыкновенная [weight:LapayGroup\RussianPost\CalculateInfo:private] => 600 [transportationID:LapayGroup\RussianPost\CalculateInfo:private] => [transportationName:LapayGroup\RussianPost\CalculateInfo:private] => Наземно [pay:LapayGroup\RussianPost\CalculateInfo:private] => 118.00 [payNds:LapayGroup\RussianPost\CalculateInfo:private] => 141.60 [payMark:LapayGroup\RussianPost\CalculateInfo:private] => 0 [ground:LapayGroup\RussianPost\CalculateInfo:private] => 118.00 [groundNds:LapayGroup\RussianPost\CalculateInfo:private] => 141.60 [cover:LapayGroup\RussianPost\CalculateInfo:private] => 0 [coverNds:LapayGroup\RussianPost\CalculateInfo:private] => 0 [service:LapayGroup\RussianPost\CalculateInfo:private] => 0 [serviceNds:LapayGroup\RussianPost\CalculateInfo:private] => 0 [deliveryPeriodMin:LapayGroup\RussianPost\CalculateInfo:private] => 1 [deliveryPeriodMax:LapayGroup\RussianPost\CalculateInfo:private] => 1 [deliveryDeadLine:LapayGroup\RussianPost\CalculateInfo:private] => DateTime Object ( [date] => 2024-02-19 20:00:00.000000 [timezone_type] => 3 [timezone] => UTC ) [tariffList:LapayGroup\RussianPost\CalculateInfo:private] => Array ( [0] => LapayGroup\RussianPost\Tariff Object ( [id:LapayGroup\RussianPost\Tariff:private] => 3062 [name:LapayGroup\RussianPost\Tariff:private] => Плата за доставку посылки онлайн [value:LapayGroup\RussianPost\Tariff:private] => 118.00 [valueNds:LapayGroup\RussianPost\Tariff:private] => 141.60 [valueMark:LapayGroup\RussianPost\Tariff:private] => 0.00 ) ) ) */ } catch (\LapayGroup\RussianPost\Exceptions\RussianPostTarrificatorException $e) { // Обработка ошибок тарификатора $errors = $e->getErrors(); // Массив вида [['msg' => 'текст ошибки', 'code' => код ошибки]] } catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) { // Обработка ошибочного ответа от API ПРФ } catch (\Exception $e) { // Обработка нештатной ситуации } ?>
$calcInfo 是类 LapayGroup\RussianPost\CalculateInfo 的一个对象。可用方法
- getCategoryItemId() - 发送类型的ID
- getCategoryItemName() - 发送类型的名称
- getWeight() - 发送重量(克)
- getTransportationName() - 传送方式
- getPay() - 总价(不含增值税)
- getPayNds() - 总价(含增值税)
- getPayMark() - 使用邮票支付的总价
- getGround() - 邮费(不含增值税)
- getGroundNds() - 邮费(含增值税)
- getCover() - 保险(不含增值税)
- getCoverNds() - 保险(含增值税)
- getService() - 附加服务(不含增值税)
- getServiceNds() - 附加服务(含增值税)
- getTariffList() - 用于计算最终配送成本的税率数组
税率数组由类 LapayGroup\RussianPost\Tariff 的对象组成。可用方法
- getId() - 税率ID
- getName() - 税率名称
- getValue() - 税率(不含增值税)
- getValueNds() - 税率(含增值税)
- getValueMark() - 使用邮票支付的税率
获取到的信息可以按以下方式显示
计费过程:传输方式:地面(代码RTM2: 1)。挂号信费(/230/):106.20元含增值税。声明价值费(/215/):3.54元含增值税。挂号通知单服务2:56.64元含增值税。投递通知短信服务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 类对象。
运输成本计算 ЕКОМ
对于EKO,运输成本根据上述类似算法计算,除了某些输入参数。
调用示例
<?php use Symfony\Component\Yaml\Yaml; use LapayGroup\RussianPost\Providers\OtpravkaApi; use LapayGroup\RussianPost\ParcelInfo; try { $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml'))); $parcelInfo = new ParcelInfo(); $parcelInfo->setIndexFrom($list[0]['operator-postcode']); // Индекс пункта сдачи из функции $OtpravkaApi->shippingPoints() $parcelInfo->setMailCategory('ORDINARY'); // https://otpravka.pochta.ru/specification#/enums-base-mail-category $parcelInfo->setWeight(1000); $parcelInfo->setFragile(true); // Параметры только для ЕКОМ $parcelInfo->setMailType('ECOM'); // Вид РПО ЕКОМ https://otpravka.pochta.ru/specification#/enums-base-mail-type $parcelInfo->setDeliveryPointindex(644015); // Вместо индекса назначения указывается индекс ПВЗ $parcelInfo->setEntriesType('SALE_OF_GOODS'); // Категория вложения https://otpravka.pochta.ru/specification#/enums-base-entries-type $parcelInfo->setFunctionalityChecking(true); // Признак услуги проверки работоспособности $parcelInfo->setGoodsValue(1588000); // Стоимость $parcelInfo->setWithFitting(true); // Признак услуги 'Возможность примерки' $tariffInfo = $otpravkaApi->getDeliveryTariff($parcelInfo); echo $tariffInfo->getTotalRate()/100 . ' руб.'; /* LapayGroup\RussianPost\TariffInfo Object ( [functionalityCheckingRate:LapayGroup\RussianPost\TariffInfo:private] => 30658 [functionalityCheckingNds:LapayGroup\RussianPost\TariffInfo:private] => 6132 [withFittingRate:LapayGroup\RussianPost\TariffInfo:private] => 0 [withFittingNds:LapayGroup\RussianPost\TariffInfo:private] => 0 ) */ } catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) { // Обработка ошибочного ответа от API ПРФ } catch (\Exception $e) { // Обработка нештатной ситуации } ?>
显示余额
显示结算账户余额。返回的值以分表示。
调用示例
<?php use Symfony\Component\Yaml\Yaml; use LapayGroup\RussianPost\Providers\OtpravkaApi; try { $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml'))); $result = $otpravkaApi->getBalance(); /* Array ( [balance] => 0 [balance-date] => 2019-06-21 [work-with-balance] => 1 ) */ } catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) { // Обработка ошибочного ответа от API ПРФ } catch (\Exception $e) { // Обработка нештатной ситуации } ?>
不可靠的收件人
适用于需要支付邮费的发送。确定接收者是否可靠,是否有不偿还的前例。
调用示例
<?php use Symfony\Component\Yaml\Yaml; use LapayGroup\RussianPost\Providers\OtpravkaApi; $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml'))); $recepient = new \LapayGroup\RussianPost\Entity\Recipient(); $recepient->setAddress('650905 ЯГУНОВСКИЙ, КЕМЕРОВСКАЯ ОБЛАСТЬ, УЛ БЕЛОЗЕРНАЯ, ДОМ 21,КВ 1'); $recepient->setName('Иванов Петр Николаевич'); $recepient->setPhone('79260112367'); try { $res = $otpravkaApi->untrustworthyRecipient($recepient); /* Array ( [raw-address] => 650905 ЯГУНОВСКИЙ, КЕМЕРОВСКАЯ ОБЛАСТЬ, УЛ БЕЛОЗЕРНАЯ,ДОМ 21,КВ 1 [raw-full-name] => Иванов Петр Николаевич [raw-telephone] => 79260112367 [unreliability] => RELIABLE ) */ } catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) { // Обработка ошибочного ответа от API ПРФ } catch (\Exception $e) { // Обработка нештатной ситуации } // Обработка списка получателей $recepients[0] = $recepient; $recepients[1] = $recepient; try { $res = $otpravkaApi->untrustworthyRecipients($recepients); /* Array ( [0] => Array ( [raw-address] => 650905 ЯГУНОВСКИЙ, КЕМЕРОВСКАЯ ОБЛАСТЬ, УЛ БЕЛОЗЕРНАЯ,ДОМ 21,КВ 1 [raw-full-name] => Иванов Петр Николаевич [raw-telephone] => 79260112367 [unreliability] => RELIABLE ), [1] => Array ( [raw-address] => 650905 ЯГУНОВСКИЙ, КЕМЕРåОВСКАЯ ОБЛАСТЬ, УЛ БЕЛОЗЕРНАЯ,ДОМ 21,КВ 1 [raw-full-name] => Иванов Петр Николаевич [raw-telephone] => 79260112367 [unreliability] => RELIABLE ) ) */ } catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) { // Обработка ошибочного ответа от API ПРФ } catch (\Exception $e) { // Обработка нештатной ситуации } ?>
订单
实现了俄罗斯邮政API的功能,用于处理订单。要使用这些功能,需要认证数据。更多详情请参考配置部分。在数据交换出错时,会抛出异常 \LapayGroup\RussianPost\Exceptions\RussianPostException,其中包含API邮政俄罗斯的错误文本和代码,以及带有HTTP状态的原始响应的转储。
创建订单
创建新订单。自动计算并设置运输费用。方法 asArr() 检查创建订单所需字段的填写情况,并在字段未填写时抛出 \InvalidArgumentException。注意! 对于内部发送,必须指定数字邮政索引 $order->setIndexTo(115551)。对于国际发送,必须指定国际邮政索引 $order->setStrIndexTo('ab5551')。默认选择动态DTI。要更改DTI范围,请联系俄罗斯邮政客户支持。
创建订单示例
<?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')。默认选择动态DTI。要更改DTI范围,请联系俄罗斯邮政客户支持。
创建订单示例
<?php use Symfony\Component\Yaml\Yaml; use LapayGroup\RussianPost\Providers\OtpravkaApi; use LapayGroup\RussianPost\Entity\Order; try { $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml'))); $orders = []; $order = new Order(); $order->setIndexTo(115551); $order->setPostOfficeCode(109012); $order->setGivenName('Иван'); $order->setHouseTo('92'); $order->setCorpusTo('3'); $order->setMass(1000); $order->setOrderNum('2'); $order->setPlaceTo('Москва'); $order->setRecipientName('Иванов Иван'); $order->setRegionTo('Москва'); $order->setStreetTo('Каширское шоссе'); $order->setRoomTo('1'); $order->setSurname('Иванов'); $orders[] = $order->asArr(); $result = $otpravkaApi->createOrdersV2($orders); // Успешный ответ /*Array ( [orders] => Array ( [barcode] => 80093053624992 [order-num] => 3 [result-id] => 310115153 ) )*/ // Ответ с ошибкой /*Array ( [errors] => Array ( [0] => Array ( [error-codes] => Array ( [0] => Array ( [code] => EMPTY_INDEX_TO [description] => Почтовый индекс не указан ) ) [position] => 0 ) ) )*/ } catch (\InvalidArgumentException $e) { // Обработка ошибки заполнения параметров } catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) { // Обработка ошибочного ответа от API ПРФ } catch (\Exception $e) { // Обработка нештатной ситуации }
编辑订单
修改已创建的订单。自动计算并填写邮费。<?php use Symfony\Component\Yaml\Yaml; use LapayGroup\RussianPost\Providers\OtpravkaApi; use LapayGroup\RussianPost\Entity\Order; try { $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml'))); $order = new Order(); $order->setIndexTo(115551); $order->setPostOfficeCode(109012); $order->setGivenName('Иван'); $order->setHouseTo('92'); $order->setCorpusTo('3'); $order->setMass(1000); $order->setOrderNum('333'); // Меняем внутренний номер заказа $order->setPlaceTo('Москва'); $order->setRecipientName('Иванов Иван'); $order->setRegionTo('Москва'); $order->setStreetTo('Каширское шоссе'); $order->setRoomTo('1'); $order->setSurname('Иванов'); $result = $otpravkaApi->editOrder($order, 115322331); // Успешный ответ /*Array ( [result-ids] => Array ( [0] => 115322331 ) ) */ // Ответ с ошибкой /*Array ( [error-codes] => Array ( [0] => Array ( [code] => EMPTY_INDEX_TO [description] => Почтовый индекс не указан ) ) [position] => 0 )*/ } catch (\InvalidArgumentException $e) { // Обработка ошибки заполнения параметров } catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) { // Обработка ошибочного ответа от API ПРФ } catch (\Exception $e) { // Обработка нештатной ситуации }
删除订单
删除尚未添加到批次的订单。<?php use Symfony\Component\Yaml\Yaml; use LapayGroup\RussianPost\Providers\OtpravkaApi; try { $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml'))); $result = $otpravkaApi->deleteOrders([115322331]); /* Array Успешный ответ ( [result-ids] => Array ( [0] => 115322331 ) ) Array Ответ с ошибкой ( [errors] => Array ( [0] => Array ( [error-code] => NOT_FOUND [position] => 0 ) ) )*/ } catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) { // Обработка ошибочного ответа от API ПРФ } catch (\Exception $e) { // Обработка нештатной ситуации }
搜索订单
根据商店指定的标识符查找订单。<?php use Symfony\Component\Yaml\Yaml; use LapayGroup\RussianPost\Providers\OtpravkaApi; try { $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml'))); $result = $otpravkaApi->findOrderByShopId(1); /* Array ( [0] => Array ( [address-type-to] => DEFAULT // По умолчанию выбран динамический ДТИ. Для изменения диапазона ДТИ нужно обратиться в службу поддержки Почты России [barcode] => 80082240994512 [corpus-to] => 3 [delivery-time] => Array ( [max-days] => 1 ) [given-name] => Иван [ground-rate] => 16500 [ground-rate-with-vat] => 19800 [ground-rate-wo-vat] => 16500 [house-to] => 92 [id] => 115322331 [index-to] => 115551 [mail-category] => ORDINARY [mail-direct] => 643 [mail-rank] => WO_RANK [mail-type] => POSTAL_PARCEL [manual-address-input] => [mass] => 1000 [mass-rate] => 16500 [mass-rate-with-vat] => 19800 [mass-rate-wo-vat] => 16500 [order-num] => 1 [payment-method] => CASHLESS [place-to] => Москва [postmarks] => Array ( [0] => NONSTANDARD ) [postoffice-code] => 109012 [recipient-name] => Иванов Иван [region-to] => Москва [room-to] => 1 [str-index-to] => 115551 [street-to] => Каширское шоссе [surname] => Иванов [total-rate-wo-vat] => 16500 [total-vat] => 3300 [transport-type] => SURFACE [version] => 0 ) )*/ } catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) { // Обработка ошибочного ответа от API ПРФ } catch (\Exception $e) { // Обработка нештатной ситуации }
按标识符搜索订单
根据俄罗斯邮政的标识符查找订单。<?php use Symfony\Component\Yaml\Yaml; use LapayGroup\RussianPost\Providers\OtpravkaApi; try { $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml'))); $result = $otpravkaApi->findOrderById(115322331); /* Array ( [address-type-to] => DEFAULT [barcode] => 80082240994512 [corpus-to] => 3 [delivery-time] => Array ( [max-days] => 1 ) [given-name] => Иван [ground-rate] => 16500 [ground-rate-with-vat] => 19800 [ground-rate-wo-vat] => 16500 [house-to] => 92 [id] => 115322331 [index-to] => 115551 [mail-category] => ORDINARY [mail-direct] => 643 [mail-rank] => WO_RANK [mail-type] => POSTAL_PARCEL [manual-address-input] => [mass] => 1000 [mass-rate] => 16500 [mass-rate-with-vat] => 19800 [mass-rate-wo-vat] => 16500 [order-num] => 1 [payment-method] => CASHLESS [place-to] => Москва [postmarks] => Array ( [0] => NONSTANDARD ) [postoffice-code] => 109012 [recipient-name] => Иванов Иван [region-to] => Москва [room-to] => 1 [str-index-to] => 115551 [street-to] => Каширское шоссе [surname] => Иванов [total-rate-wo-vat] => 16500 [total-vat] => 3300 [transport-type] => SURFACE [version] => 0 )*/ } catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) { // Обработка ошибочного ответа от API ПРФ } catch (\Exception $e) { // Обработка нештатной ситуации }
将订单退回“新订单”
该方法将订单从批次转移到“新订单”部分。批次必须处于CREATED状态。<?php use Symfony\Component\Yaml\Yaml; use LapayGroup\RussianPost\Providers\OtpravkaApi; try { $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml'))); $result = $otpravkaApi->returnToNew([115527611]); /* Array Успешный ответ ( [result-ids] => Array ( [0] => 115527611 ) ) Array Ответ с ошибкой ( [errors] => Array ( [0] => Array ( [error-code] => NOT_FOUND [position] => 0 ) ) )*/ } catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) { // Обработка ошибочного ответа от API ПРФ } catch (\Exception $e) { // Обработка нештатной ситуации }
批量
实现俄罗斯邮政API API 的功能,用于处理批次。使用这些功能需要认证数据。更多详细信息请参阅配置部分。在数据交换出错时,会抛出异常 \LapayGroup\RussianPost\Exceptions\RussianPostException,其中包含API邮政俄罗斯的错误文本和代码,以及带有HTTP状态的原始响应的转储。
从N个订单创建批量
自动创建批次并将指定的已准备订单转移到该批次。如果订单属于不同类型和类别,则创建多个批次。订单将分配到相应的批次。每个转移的订单将自动分配一个运单号(Shipment 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->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) { // Обработка нештатной ситуации }
搜索带ШПИ的订单
根据分配的运单号(Shipment 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->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 API 的功能,用于处理文件。使用这些功能需要认证数据。更多详细信息请参阅配置部分。在数据交换出错时,会抛出异常 \LapayGroup\RussianPost\Exceptions\RussianPostException,其中包含API邮政俄罗斯的错误文本和代码,以及带有HTTP状态的原始响应的转储。
所有文档操作函数都接受一个参数action,该参数接受两个值
- OtpravkaApi::DOWNLOAD_FILE - 输出相应的header以在浏览器中下载文件;
- OtpravkaApi::PRINT_FILE - 返回包含文件数据的 GuzzleHttp\Psr7\UploadedFile 对象。
注意! 在打印任何文档之前,必须通过调用函数 sendingF103form() 来固定批次中的更改。
<?php use Symfony\Component\Yaml\Yaml; use LapayGroup\RussianPost\Providers\OtpravkaApi; try { $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml'))); $otpravkaApi->sendingF103form(28); $otpravkaApi->sendingF103form(28, true); // С онлайн балансом } catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) { // Обработка ошибочного ответа от API ПРФ } catch (\Exception $e) { // Обработка нештатной ситуации }
生成文档包
生成并返回包含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) { // Обработка нештатной ситуации }
生成F7п打印表
生成并返回指定订单的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-优化、商务快递、商务快递快递)
- 信封(挂号信)。
可选地附加表格: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打印表
生成并返回指定批次的F103表格的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电子表格
为批次分配唯一版本,以便后续由邮政局工作人员接收该批次。通过电子邮件将F103电子表格发送给邮政局进行注册。<?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状态的原始响应的转储。
通过索引搜索邮政局
返回OBS的信息。<?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) { // Обработка нештатной ситуации }
按地址搜索服务OBS
返回OBS的邮政索引列表以及一个标志,指示传递的地址是否是OBS的确切地址。<?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) { // Обработка нештатной ситуации }
搜索OBS的邮政服务
可以返回所有可用的服务,也可以返回特定组的服务(例如:电子邮政局)。<?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) { // Обработка нештатной ситуации }
按坐标搜索邮政局
根据提供的参数列表返回OBS列表,详情请参考文档。<?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ПС护照中导出
从OBS护照中导出OBS,PVZ,邮政自动柜员机数据。生成并返回zip存档,其中包含名为TYPEdd_MMMM_yyyy.txt的文本文件,其中- TYPE - 对象类型
- dd_MMMM_yyyy - 存档创建时间
输入参数
- $type - OBS对象类型。
<?php use Symfony\Component\Yaml\Yaml; use LapayGroup\RussianPost\Providers\OtpravkaApi; try { $otpravkaApi = new OtpravkaApi(Yaml::parse(file_get_contents('path_to_config.yaml'))); $result = $otpravkaApi->getPostOfficeFromPassport(\LapayGroup\RussianPost\Enum\OpsObjectType::OPS); /* GuzzleHttp\Psr7\UploadedFile Object ( [clientFilename:GuzzleHttp\Psr7\UploadedFile:private] => OPS02_May_2020.zip.octet-stream [clientMediaType:GuzzleHttp\Psr7\UploadedFile:private] => application/octet-stream; charset=UTF-8 [error:GuzzleHttp\Psr7\UploadedFile:private] => 0 [file:GuzzleHttp\Psr7\UploadedFile:private] => [moved:GuzzleHttp\Psr7\UploadedFile:private] => [size:GuzzleHttp\Psr7\UploadedFile:private] => 4203382 [stream:GuzzleHttp\Psr7\UploadedFile:private] => GuzzleHttp\Psr7\Stream Object ( [stream:GuzzleHttp\Psr7\Stream:private] => Resource id #56 [size:GuzzleHttp\Psr7\Stream:private] => 4203382 [seekable:GuzzleHttp\Psr7\Stream:private] => 1 [readable:GuzzleHttp\Psr7\Stream:private] => 1 [writable:GuzzleHttp\Psr7\Stream:private] => 1 [uri:GuzzleHttp\Psr7\Stream:private] => php://temp [customMetadata:GuzzleHttp\Psr7\Stream:private] => Array ( ) ) )*/ } catch (\LapayGroup\RussianPost\Exceptions\RussianPostException $e) { // Обработка ошибочного ответа от API ПРФ } catch (\Exception $e) { // Обработка нештатной ситуации }
长期存储
!!!本部分在俄罗斯邮政API中不工作!!!
实现了俄罗斯邮政API的长期存储功能。要使用这些功能,需要认证数据。更多详情请参考配置部分。
在数据交换出错时,会抛出异常 \LapayGroup\RussianPost\Exceptions\RussianPostException,其中包含API邮政俄罗斯的错误文本和代码,以及带有HTTP状态的原始响应的转储。
退货
实现了俄罗斯邮政API的轻松退货服务功能。要使用这些功能,需要认证数据。更多详情请参考配置部分。在数据交换出错时,会抛出异常 \LapayGroup\RussianPost\Exceptions\RussianPostException,其中包含API邮政俄罗斯的错误文本和代码,以及带有HTTP状态的原始响应的转储。
为先前创建的发送创建退货发送
为已经创建在LC的发送项创建退货发送项(LV)。输入参数
- $rpo - 直接发送的SHPI;
- $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 - 退货发送项的SHPI。
输出参数
- code - 错误代码;
- description - 错误描述。
获取当前交付点的列表示例
<?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 邮政俄罗斯的工作设置功能。要使用这些功能,需要身份验证数据。详细信息请参阅配置部分。在数据交换出错时,会抛出异常 \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();