All Projects → appwilio → Russianpost Sdk

appwilio / Russianpost Sdk

Licence: mit
PHP SDK для Почты России

Projects that are alternatives of or similar to Russianpost Sdk

Telegram Bot Sdk
🤖 Telegram Bot API PHP SDK. Lets you build Telegram Bots easily! Supports Laravel out of the box.
Stars: ✭ 2,212 (+5044.19%)
Mutual labels:  laravel, laravel-5-package, sdk
Orm
A drop-in Doctrine ORM 2 implementation for Laravel 5+ and Lumen
Stars: ✭ 712 (+1555.81%)
Mutual labels:  laravel, laravel-5-package
Laravel Video Chat
Laravel Video Chat using Socket.IO and WebRTC
Stars: ✭ 646 (+1402.33%)
Mutual labels:  laravel, laravel-5-package
Identity Number
Validator for Swedish personal identity numbers (personnummer). For use "standalone" or with Laravel.
Stars: ✭ 17 (-60.47%)
Mutual labels:  laravel, laravel-5-package
Sudo Su
Laravel package to easily login as other users during development.
Stars: ✭ 554 (+1188.37%)
Mutual labels:  laravel, laravel-5-package
Ip Location Zh
获取 IP 地址的真实地理位置
Stars: ✭ 556 (+1193.02%)
Mutual labels:  laravel, laravel-5-package
Angular5.2 Laravel5.6
Angular 5.2 and Laravel 5.6 Authentication and CRUD
Stars: ✭ 17 (-60.47%)
Mutual labels:  laravel, laravel-5-package
Telegram
✈️ Telegram Notifications Channel for Laravel
Stars: ✭ 450 (+946.51%)
Mutual labels:  laravel, laravel-5-package
Laravel Tools
路飞laravel工具
Stars: ✭ 24 (-44.19%)
Mutual labels:  laravel, laravel-5-package
Socialite Mailru
MailRu OAuth2 Provider for Laravel Socialite
Stars: ✭ 25 (-41.86%)
Mutual labels:  laravel, laravel-5-package
Improved Polymorphic Eloquent Builder
🔨 Improved Polymorphic Eloquent Builder
Stars: ✭ 12 (-72.09%)
Mutual labels:  laravel, laravel-5-package
Column Sortable
Package for handling column sorting in Laravel 5/6/7/8
Stars: ✭ 496 (+1053.49%)
Mutual labels:  laravel, laravel-5-package
Laravel Scout Mysql Driver
Laravel Scout MySQL Driver
Stars: ✭ 491 (+1041.86%)
Mutual labels:  laravel, laravel-5-package
Laravel Mysql Spatial
MySQL Spatial Data Extension integration with Laravel.
Stars: ✭ 578 (+1244.19%)
Mutual labels:  laravel, laravel-5-package
Laravel Js Localization
🌐 Convert your Laravel messages and consume them in the front-end!
Stars: ✭ 451 (+948.84%)
Mutual labels:  laravel, laravel-5-package
Laravel Widgetize
A minimal package to help you make your laravel application cleaner and faster.
Stars: ✭ 791 (+1739.53%)
Mutual labels:  laravel, laravel-5-package
Orderable
My very first Laravel package
Stars: ✭ 21 (-51.16%)
Mutual labels:  laravel, laravel-5-package
Laravel Server Monitor
Server Monitoring Command for Laravel Applications
Stars: ✭ 424 (+886.05%)
Mutual labels:  laravel, laravel-5-package
Lada Cache
A Redis based, fully automated and scalable database cache layer for Laravel
Stars: ✭ 424 (+886.05%)
Mutual labels:  laravel, laravel-5-package
Pagarme Laravel
Pagar.me SDK for Laravel applications.
Stars: ✭ 23 (-46.51%)
Mutual labels:  laravel, sdk

SDK для бизнес-сервисов Почты России

Latest Version on Packagist Testing Quality Score Code Coverage StyleCI Total Downloads License MIT

Содержание

Работа с API пакетного трекинга и API отправки возможна только при наличии договора с Почтой России.

Работа с API единичного трекинга возможна как с договором, так и после простой регистрации (но с лимитом — 100 запросов в сутки).

Установка

Минимальные требования — PHP 7.1+, ext-soap, ext-json.

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

composer require appwilio/russianpost-sdk

При использовании фреймворка Laravel SDK автоматически регистрирует доступные сервисы.

Минимальная версия Laravel — 5.8.

Логирование

Для логирования запросов и ответов можно подключить любой логгер, реализующий стандарт PSR-3, например, Monolog:

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

$log = (new Logger('pochta.ru'))
    ->pushHandler(new StreamHandler('path/to/your.log', Logger::INFO));

// SingleAccessClient, PacketAccessClient, DispatchingClient
$client->setLogger($log);

В случае использования фреймворка Laravel следует добавить логгер в контейнер под именем appwilio.russianpost.logger:

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

$this->app->singleton('appwilio.russianpost.logger', static function () {
    return (new Logger('pochta.ru'))
        ->pushHandler(new StreamHandler('path/to/your.log', Logger::INFO));
});

Трекинг

Документация

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

Добавьте следющие ключи в services.php:

// ...
'russianpost' => [
    'tracking' => [
        'login' => \env('RUSSIAN_POST_TRACKING_LOGIN'),
        'password' => \env('RUSSIAN_POST_TRACKING_PASSWORD'),
    ],
],
// ...

Не забудьте перегенерировать кэш настроек, если они были закэшированы!

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

Конструктор класса SingleAccessClient принимает два параметра — логин и пароль от личного кабинета на сайте Почты России.

use Appwilio\RussianPostSDK\Tracking\SingleAccessClient;

$tracker = new SingleAccessClient($login = 'login', $password = 'secret');

Если информации по ШПИ (трек-комеру) не найдено, то выбрасывается исключение Appwilio\RussianPostSDK\Tracking\Exceptions\SingleAccessException с соответствующим сообщением.

Получение данных по ШПИ (трек-комеру)

$response = $tracker->getTrackingEvents('29014562148754');

Объект $response реализует интерфейс \IteratorAggregate, поэтому его можно сразу перебирать в цикле:

foreach ($response as $events) {
    $parameters = $events->getOperationParameters();
    
    echo $parameters->getOperationId();
    echo $parameters->getAttributeId();
    echo $parameters->getPerformedAt()->format('d.m.Y в h:i:s'); // 17.09.2019 в 17:20:48
}

Получение информации о наложенном платеже по ШПИ (трек-комеру)

$response = $tracker->getCashOnDeliveryEvents('29014562148754');

Объект $response реализует интерфейс \IteratorAggregate, поэтому его можно сразу перебирать в цикле:

foreach ($response as $event) {
    $parameters = $event->getOperationParameters();
    
    echo $parameters->getTransferNumber();
    echo $parameters->getPayment(); // 7410
    echo $parameters->getPerformedAt()->format('d.m.Y в h:i:s'); // 17.09.2019 в 17:20:48
}

Пакетный доступ

use Appwilio\RussianPostSDK\Tracking\PacketAccessClient;

$tracker = new PacketAccessClient($login = 'login', $password = 'secret');

Получение данных по ШПИ (трек-комеру)

$ticket = $tracker->getTicket(['29014562148754', 'RA325487125CN']); // максимум 3 000 треков

Рекомендуется подождать 15 минут перед запросом информации.

$response = $tracker->getTrackingEvents($ticket->getId());

echo $response->getPreparedAt()->format('d.m.Y в hⓂ️s');

Объект $response реализует интерфейс \IteratorAggregate, поэтому его можно сразу перебирать в цикле:

foreach ($response as $item) {
    echo $item->getBarcode();
    
    foreach ($item as $events) {
        echo $events->getOperationId();
        echo $events->getAttributeId();
        echo $events->getPerformedAt()->format('d.m.Y в hⓂ️s'); // 17.09.2019 в 17:20:48
    }
}

Отправка

Документация

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

Конструктор класса DispatchingClient принимает три обязательных параметра: логин и пароль от личного кабинета на сайте Почты России, а так же токен доступа, который высылается на почту при подключении сервиса «Отправка» и может быть изменён в личном кабинете.

use GuzzleHttp\Client as GuzzleClient;
use Appwilio\RussianPostSDK\Dispatching\DispatchingClient;

$dispatching = new DispatchingClient(
    $login = 'login', $password = 'secret', $token = 'QWERTY', new GuzzleClient()
);

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

Добавьте следющие ключи в services.php:

// ...
'russianpost' => [
    'dispatching' => [
        'token' => \env('RUSSIAN_POST_DISPATCHING_TOKEN'),
        'login' => \env('RUSSIAN_POST_TDISPATCHING_LOGIN'),
        'password' => \env('RUSSIAN_POST_DISPATCHING_PASSWORD'),
        'guzzle' => [
            'timeout' => 5,
        ],
    ],
],
// ...

Не забудьте перегенерировать кэш настроек, если они были закэшированы!

Расчёт стоимости пересылки

use Appwilio\RussianPostSDK\Dispatching\Enum\MailType;
use Appwilio\RussianPostSDK\Dispatching\Enum\MailCategory;
use Appwilio\RussianPostSDK\Dispatching\Enum\MailEntryType;
use Appwilio\RussianPostSDK\Dispatching\Endpoints\Services\Requests\CalculationRequest;

$response = $dispatching->services->calculate(
    CalculationRequest::create('123456', 200)
        ->ofMailType(MailType::PARCEL_POSTAL())
        ->ofMailCategory(MailCategory::ORDINARY())
        ->ofEntriesType(MailEntryType::GOODS())
        ->fragile()
        ->withSmsNotice()
);

echo $response->getTotal()->getRate();
echo $response->getTotal()->getVAT(); // НДС

Нормализация и валидация данных

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

use Appwilio\RussianPostSDK\Dispatching\Endpoints\Services\Requests\NormalizeFioRequest;

$response = $dispatching->services->normalizeFio(
    NormalizeFioRequest::one('иванов иван иванович')
);

if ($response[0]->isUseful()) {
    echo $response[0]->getFirstName().' '.$response[0]->getLastName(); // Иван Иванов
}

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

use Appwilio\RussianPostSDK\Dispatching\Endpoints\Services\Requests\NormalizeAddressRequest;

$response = $dispatching->services->normalizeAddress(
    NormalizeAddressRequest::one('Москва варшавское шоссе 37-45')
);

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

use Appwilio\RussianPostSDK\Dispatching\Endpoints\Services\Requests\NormalizePhoneRequest;

$response = $dispatching->services->normalizePhone(NormalizePhoneRequest::one('89001234567'));

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

use Appwilio\RussianPostSDK\Dispatching\Endpoints\Services\Requests\CheckRecipientRequest;

$response = $dispatching->services->checkRecipient(
    CheckRecipientRequest::one('Москва, Варшавское шоссе, 37-45', 'Иванов Иван Иванович', '+7 123 456-78-90')
);

$response[0]->isFraud(); // ненадёжный
$response[0]->isReliable(); // надёжный
use Appwilio\RussianPostSDK\Dispatching\Endpoints\Services\Requests\CheckRecipientRequest;

$request = CheckRecipientRequest::create();
$request->addRecipient('123456 Москва, Варшавское шоссе, 37-45', 'Иванов Иван Иванович', '+7 123 456-78-90');

$response = $dispatching->services->checkRecipient($request);

foreach ($response as $recipient) {
    echo $recipient->getAddress.': '.$recipient->isReliable();
}

Документы

$file = $dispatching->documents->orderF7Form('12345678');

echo $file->getClientFilename(); // f7p.pdf

// Сохранение
$file->moveTo("storage/printforms/12345678-{$file->getClientFilename()}");

// Перенаправление в браузер (Laravel)
return \response()->streamDownload(staticfunction () use ($file) {
    (string) $file->getStream();
}, $file->getClientName(), ['Content-Type' => $file->getClientMediaType()]);

Форма Ф7п для заказа

use Appwilio\RussianPostSDK\Dispatching\Enum\PrintType;

$pdf = $dispatching->documents->orderF7Form(
    '12345678', new \DateTime('2019-01-01'), PrintType::PAPER()
);

Форма Ф112ЭК для заказа

$pdf = $dispatching->documents->orderF112Form('12345678', new \DateTime('2019-01-01'));

Пакет документов для заказа (до формирования партии)

$zip = $dispatching->documents->orderFormsBundleBacklog('12345678', new \DateTime('2019-01-01'));

Пакет документов для заказа (после формирования партии)

use Appwilio\RussianPostSDK\Dispatching\Enum\PrintType;

$zip = $dispatching->documents->orderFormBundle(
    '12345678', new \DateTime('2019-01-01'), PrintType::THERMO()
);

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

$zip = $dispatching->documents->batchFormBundle('87654321');

Акт осмотра содержимого партии

$pdf = $dispatching->documents->batchCheckingForm('87654321');

Форма Ф103 для партии

$pdf = $dispatching->documents->batchF103Form('87654321');

Возвратный ярлык

use Appwilio\RussianPostSDK\Dispatching\Enum\PrintType;

$pdf = $dispatching->documents->easyReturnForm('29014562148754', PrintType::THERMO());

Запуск тестов

$ vendor/bin/phpunit

Авторы

Лиценция

Данный SDK распространяется под лицензией MIT.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].