devleand / nova-poshta-api
Library for integrating web applications with the Nova Poshta API service
3.2.0
2023-12-26 15:02 UTC
Requires
- php: ^7.4|^8.0
- ext-json: *
- jms/serializer: ^3.14
- monolog/monolog: ^2.3
- myclabs/php-enum: ^1.8
- nesbot/carbon: ^2.53
- php-http/httplug: ^2.2
- psr/http-factory: ^1.0
- symfony/validator: ^5.3
Requires (Dev)
- phpstan/phpstan: ^1.10.50
- phpunit/phpunit: ^9.5
This package is not auto-updated.
Last update: 2025-05-13 21:34:21 UTC
README
The package provides access to the API 2.0 functions of the Nova Poshta delivery service.
Installation
Git
git clone git@gitlab.com:devleand-lib/nova-poshta-api/nova-poshta-api.git
Composer
composer require devleand/nova-poshta-api
Testing
Automatically
- Static analysing
./vendor/bin/phpstan analyse -l 8 src ./vendor/bin/phpstan analyse tests
- Unit tests
./vendor/bin/phpunit tests
Manual
- Example for class V2\NovaPoshtaApiClient
use Doctrine\Common\Annotations\AnnotationReader;
use JMS\Serializer\Accessor\DefaultAccessorStrategy;
use JMS\Serializer\Construction\UnserializeObjectConstructor;
use JMS\Serializer\GraphNavigator\Factory\DeserializationGraphNavigatorFactory;
use JMS\Serializer\GraphNavigator\Factory\SerializationGraphNavigatorFactory;
use JMS\Serializer\Handler\HandlerRegistry;
use JMS\Serializer\Metadata\Driver\AnnotationDriver;
use JMS\Serializer\Naming\CamelCaseNamingStrategy;
use JMS\Serializer\Serializer;
use JMS\Serializer\Visitor\Factory\JsonDeserializationVisitorFactory;
use JMS\Serializer\Visitor\Factory\JsonSerializationVisitorFactory;
use Devleand\NovaPoshta\Api\V2\Contracts\Model\ModelInterface;
use Devleand\NovaPoshta\Api\V2\Dto\SettingsDto;
use Devleand\NovaPoshta\Api\V2\Enum\Request\HttpMethod;
use Devleand\NovaPoshta\Api\V2\NovaPoshtaApiClient;
use Metadata\MetadataFactory;
use Monolog\Handler\StreamHandler;
use Monolog\Logger;
use Nyholm\Psr7\Factory\Psr17Factory;
use Symfony\Component\Validator\ConstraintValidatorFactory;
use Symfony\Component\Validator\Context\ExecutionContextFactory;
use Symfony\Component\Validator\Mapping\Factory\LazyLoadingMetadataFactory;
use Symfony\Component\Validator\Validator\RecursiveValidator;
use Symfony\Contracts\Translation\LocaleAwareInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Contracts\Translation\TranslatorTrait;
require 'vendor/autoload.php';
$logger = new Logger('name');
$logger->pushHandler(new StreamHandler('php://stdout', Logger::INFO));
$client = new NovaPoshtaApiClient(
new SettingsDto(
'https://api.novaposhta.ua/v2.0/json/',
'01ba51b9f9f8d70866b1d988e02fbf94'
),
new GuzzleHttp\Client(),
$psr17Factory = new Psr17Factory(),
$psr17Factory,
new Serializer(
$metadataFactory = new MetadataFactory(
new AnnotationDriver(
new AnnotationReader(),
new CamelCaseNamingStrategy()
)
),
[
1 => new SerializationGraphNavigatorFactory(
$metadataFactory,
$handlerRegistry = new HandlerRegistry()
),
2 => new DeserializationGraphNavigatorFactory(
$metadataFactory,
$handlerRegistry,
new UnserializeObjectConstructor(),
new DefaultAccessorStrategy()
)
],
['json' => new JsonSerializationVisitorFactory()],
['json' => new JsonDeserializationVisitorFactory()]
),
new RecursiveValidator(
new ExecutionContextFactory(
new class () implements TranslatorInterface, LocaleAwareInterface {
use TranslatorTrait;
}
),
new LazyLoadingMetadataFactory(),
new ConstraintValidatorFactory()
),
$logger
);
try {
$response = $client->send(
HttpMethod::POST(),
new class () implements ModelInterface {
public function getApiModel(): string
{
return 'Common'; // "modelName"
}
public function isApiMethodSupported(string $apiMethod): bool
{
return true;
}
},
'getPaymentForms' // "calledMethod"
);
var_dump($response);
} catch (Throwable $exception) {
echo $exception->getMessage();
}
- Example for class Model/AddressModel
use Doctrine\Common\Annotations\AnnotationReader;
use JMS\Serializer\Accessor\DefaultAccessorStrategy;
use JMS\Serializer\Construction\UnserializeObjectConstructor;
use JMS\Serializer\GraphNavigator\Factory\DeserializationGraphNavigatorFactory;
use JMS\Serializer\GraphNavigator\Factory\SerializationGraphNavigatorFactory;
use JMS\Serializer\Handler\HandlerRegistry;
use JMS\Serializer\Metadata\Driver\AnnotationDriver;
use JMS\Serializer\Naming\CamelCaseNamingStrategy;
use JMS\Serializer\Serializer;
use JMS\Serializer\Visitor\Factory\JsonDeserializationVisitorFactory;
use JMS\Serializer\Visitor\Factory\JsonSerializationVisitorFactory;
use Devleand\NovaPoshta\Api\V2\Dto\SettingsDto;
use Devleand\NovaPoshta\Api\V2\Model\Address\AddressModel;
use Devleand\NovaPoshta\Api\V2\NovaPoshtaApiClient;
use Devleand\NovaPoshta\Api\V2\Transformer\DataToEntityTransformer;
use Metadata\MetadataFactory;
use Monolog\Handler\StreamHandler;
use Monolog\Logger;
use Nyholm\Psr7\Factory\Psr17Factory;
use Symfony\Component\Validator\ConstraintValidatorFactory;
use Symfony\Component\Validator\Context\ExecutionContextFactory;
use Symfony\Component\Validator\Mapping\Factory\LazyLoadingMetadataFactory;
use Symfony\Component\Validator\Validator\RecursiveValidator;
use Symfony\Contracts\Translation\LocaleAwareInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Contracts\Translation\TranslatorTrait;
require 'vendor/autoload.php';
$logger = new Logger('name');
$logger->pushHandler(new StreamHandler('php://stdout', Logger::INFO));
$client = new NovaPoshtaApiClient(
new SettingsDto(
'https://api.novaposhta.ua/v2.0/json/',
'01ba51b9f9f8d70866b1d988e02fbf94'
),
new GuzzleHttp\Client(),
$psr17Factory = new Psr17Factory(),
$psr17Factory,
$serializer = new Serializer(
$metadataFactory = new MetadataFactory(
new AnnotationDriver(
new AnnotationReader(),
new CamelCaseNamingStrategy()
)
),
[
1 => new SerializationGraphNavigatorFactory(
$metadataFactory,
$handlerRegistry = new HandlerRegistry()
),
2 => new DeserializationGraphNavigatorFactory(
$metadataFactory,
$handlerRegistry,
new UnserializeObjectConstructor(),
new DefaultAccessorStrategy()
)
],
['json' => new JsonSerializationVisitorFactory()],
['json' => new JsonDeserializationVisitorFactory()]
),
$validator = new RecursiveValidator(
new ExecutionContextFactory(
new class () implements TranslatorInterface, LocaleAwareInterface {
use TranslatorTrait;
}
),
new LazyLoadingMetadataFactory(),
new ConstraintValidatorFactory()
),
$logger
);
$addressModel = new AddressModel($client, new DataToEntityTransformer($serializer, $validator, $logger), $logger);
try {
$response = $addressModel->getAreas();
var_dump(iterator_to_array($response->getData()));
} catch (Throwable $exception) {
echo $exception->getMessage();
}