2017 © Pedro PelΓ‘ez
 

library russianpost-sdk

Russian Post SDK (pochta.ru)

image

appwilio/russianpost-sdk

Russian Post SDK (pochta.ru)

  • Wednesday, February 21, 2018
  • by JhaoDa
  • Repository
  • 6 Watchers
  • 15 Stars
  • 2,096 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 6 Forks
  • 4 Open issues
  • 2 Versions
  • 68 % Grown

The README.md

SDK для бизнСс-сСрвисов ΠŸΠΎΡ‡Ρ‚Ρ‹ России

Latest Version on Packagist Testing Quality Score Code Coverage StyleCI Total Downloads License MIT , (*1)

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Π Π°Π±ΠΎΡ‚Π° с API ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚Ρ€Π΅ΠΊΠΈΠ½Π³Π° ΠΈ API ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π° с ΠŸΠΎΡ‡Ρ‚ΠΎΠΉ России., (*2)

Π Π°Π±ΠΎΡ‚Π° с API Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ‚Ρ€Π΅ΠΊΠΈΠ½Π³Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΠΊΠ°ΠΊ с Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΎΠΌ, Ρ‚Π°ΠΊ ΠΈ послС простой рСгистрации (Π½ΠΎ с Π»ΠΈΠΌΠΈΡ‚ΠΎΠΌ β€” 100 запросов Π² сутки)., (*3)

Установка

ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ трСбования β€” PHP 7.1+, ext-soap, ext-json., (*4)

Для установки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Composer:, (*5)

composer require appwilio/russianpost-sdk

ΠŸΡ€ΠΈ использовании Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° Laravel SDK автоматичСски рСгистрируСт доступныС сСрвисы., (*6)

Минимальная вСрсия Laravel β€” 5.8., (*7)

Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Для логирования запросов ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ любой Π»ΠΎΠ³Π³Π΅Ρ€, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ стандарт PSR-3, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Monolog:, (*8)

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:, (*9)

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

Π’Ρ€Π΅ΠΊΠΈΠ½Π³

ДокумСнтация, (*10)

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Π² Laravel

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡŽΡ‰ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡ΠΈ Π² services.php:, (*11)

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

НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ кэш настроСк, Ссли ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Π·Π°ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½Ρ‹!, (*12)

Π•Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹ΠΉ доступ

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ класса SingleAccessClient ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° β€” Π»ΠΎΠ³ΠΈΠ½ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΎΡ‚ Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ°Π±ΠΈΠ½Π΅Ρ‚Π° Π½Π° сайтС ΠŸΠΎΡ‡Ρ‚Ρ‹ России., (*13)

use Appwilio\RussianPostSDK\Tracking\SingleAccessClient;

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

Если ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΠΎ ШПИ (Ρ‚Ρ€Π΅ΠΊ-ΠΊΠΎΠΌΠ΅Ρ€Ρƒ) Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ, Ρ‚ΠΎ выбрасываСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Appwilio\RussianPostSDK\Tracking\Exceptions\SingleAccessException с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ сообщСниСм., (*14)

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ ШПИ (Ρ‚Ρ€Π΅ΠΊ-ΠΊΠΎΠΌΠ΅Ρ€Ρƒ)

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

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ $response Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс \IteratorAggregate, поэтому Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ сразу ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ Π² Ρ†ΠΈΠΊΠ»Π΅:, (*15)

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, поэтому Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ сразу ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ Π² Ρ†ΠΈΠΊΠ»Π΅:, (*16)

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 ΠΌΠΈΠ½ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π΄ запросом ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ., (*17)

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

echo $response->getPreparedAt()->format('d.m.Y Π² h:m:s');

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ $response Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс \IteratorAggregate, поэтому Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ сразу ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ Π² Ρ†ΠΈΠΊΠ»Π΅:, (*18)

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:m:s'); // 17.09.2019 Π² 17:20:48
    }
}

ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ°

ДокумСнтация, (*19)

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ класса DispatchingClient ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚Ρ€ΠΈ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°: Π»ΠΎΠ³ΠΈΠ½ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΎΡ‚ Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ°Π±ΠΈΠ½Π΅Ρ‚Π° Π½Π° сайтС ΠŸΠΎΡ‡Ρ‚Ρ‹ России, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ Ρ‚ΠΎΠΊΠ΅Π½ доступа, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ высылаСтся Π½Π° ΠΏΠΎΡ‡Ρ‚Ρƒ ΠΏΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ сСрвиса Β«ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ°Β» ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½ Π² Π»ΠΈΡ‡Π½ΠΎΠΌ ΠΊΠ°Π±ΠΈΠ½Π΅Ρ‚Π΅., (*20)

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

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

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Π² Laravel

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡŽΡ‰ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡ΠΈ Π² services.php:, (*21)

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

НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ кэш настроСк, Ссли ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Π·Π°ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½Ρ‹!, (*22)

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

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., (*23)

The Versions

21/02 2018

dev-dispatching

dev-dispatching https://github.com/appwilio/russianpost-sdk

Russian Post SDK (pochta.ru)

  Sources   Download

MIT

The Requires

 

The Development Requires

by Roman Sokharev

russian post delivery ΠŸΠΎΡ‡Ρ‚Π° России

11/02 2018

dev-master

9999999-dev https://github.com/appwilio/russianpost-sdk

Russian Post SDK (pochta.ru)

  Sources   Download

MIT

The Requires

 

The Development Requires

by Roman Sokharev

russian post delivery ΠŸΠΎΡ‡Ρ‚Π° России