devleand/nova-poshta-api 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

devleand/nova-poshta-api

Composer 安装命令:

composer require devleand/nova-poshta-api

包简介

Library for integrating web applications with the Nova Poshta API service

README 文档

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

统计信息

  • 总下载量: 34
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2021-10-31

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固