rocketfellows/vies-vat-validation-php-sdk-rest

v2.0.0 2023-12-31 06:55 UTC

This package is auto-updated.

Last update: 2024-08-30 01:34:37 UTC


README

Software License PHPStan Badge Code Coverage Badge

实现VIES服务接口https://github.com/rocketfellows/vies-vat-validation-php-sdk-interface,用于通过REST网络服务检查VAT号码的有效性。该实现旨在通过REST网络服务发送请求并处理VAT验证服务的响应。

有关通过REST网络服务使用VIES VAT号码验证服务的更多信息,请参阅https://ec.europa.eu/taxation_customs/vies/#/technical-information

安装。

composer require rocketfellows/vies-vat-validation-php-sdk-rest

依赖项。

当前实现依赖项

VIES VAT号码验证REST服务描述。

有关VIES VAT号码验证REST服务的更多信息,请参阅:https://ec.europa.eu/taxation_customs/vies/#/technical-information

对于REST服务,以下URL可用

Swagger文件: https://ec.europa.eu/assets/taxud/vow-information/swagger_publicVAT.yaml

VIES VAT号码验证PHP SDK REST组件描述。

AbstractVatNumberValidationRestService - 是一个实现https://github.com/rocketfellows/vies-vat-validation-php-sdk-interface接口的抽象类,旨在通过REST网络服务发送VAT验证请求,处理响应/错误并返回验证结果类型的对象。

VatNumberValidationRestService - 是AbstractVatNumberValidationRestService类的继承者,配置为通过URLhttps://ec.europa.eu/taxation_customs/vies/rest-api/check-vat-number向生产API端点发送请求。

VatNumberValidationRestTestService - 是AbstractVatNumberValidationRestService类的继承者,配置为通过URLhttps://ec.europa.eu/taxation_customs/vies/rest-api/check-vat-test-service向测试API端点发送请求。

VatNumberValidationRestExpansibleService - 是AbstractVatNumberValidationRestService类的继承者,配置为根据通过类构造函数传递的URL(可定制服务)发送请求。

对于创建VAT号码验证结果,该组件使用接口包https://github.com/rocketfellows/vies-vat-validation-php-sdk-interface中的rocketfellows\ViesVatValidationInterface\VatNumberValidationResultFactory工厂。根据工厂,如果任何必需的响应属性缺失,则验证过程将抛出特殊异常。

  • CountryCodeAttributeNotFoundException - 在创建VatNumberValidationResult实例时,如果找不到国家代码属性,则抛出异常。
  • RequestDateAttributeNotFoundException - 在创建VatNumberValidationResult实例时,如果找不到请求日期属性,则抛出异常。
  • ValidationFlagAttributeNotFoundException - 在创建VatNumberValidationResult实例时,如果找不到验证标志属性,则抛出异常。
  • VatNumberAttributeNotFoundException - 在创建VatNumberValidationResult实例时,如果找不到增值税号码属性,则抛出异常。
  • VatOwnerAddressAttributeNotFoundException - 在创建VatNumberValidationResult实例时,如果找不到增值税所有者地址属性,则抛出异常。
  • VatOwnerNameAttributeNotFoundException - 在创建VatNumberValidationResult实例时,如果找不到增值税所有者名称属性,则抛出异常。

使用示例。

VatNumberValidationRestService的使用。

增值税号码验证结果(增值税有效)

use GuzzleHttp\Client;
use rocketfellows\ViesVatValidationInterface\FaultCodeExceptionFactory;
use rocketfellows\ViesVatValidationInterface\VatNumber;
use rocketfellows\ViesVatValidationInterface\VatNumberValidationResultFactory;
use rocketfellows\ViesVatValidationRest\services\VatNumberValidationRestService;

require_once __DIR__ . '/vendor/autoload.php';

// Service initialization
$service = new VatNumberValidationRestService((new Client()), (new FaultCodeExceptionFactory()), (new VatNumberValidationResultFactory()));

$validationResult = $service->validateVat(VatNumber::create('DE', '206223519'));

var_dump(sprintf('VAT country code: %s', $validationResult->getCountryCode()));
var_dump(sprintf('VAT number: %s', $validationResult->getVatNumber()));
var_dump(sprintf('Request date: %s', $validationResult->getRequestDateString()));
var_dump(sprintf('Is VAT valid: %s', $validationResult->isValid() ? 'true' : 'false'));
var_dump(sprintf('VAT holder name: %s', $validationResult->getName()));
var_dump(sprintf('VAT holder address: %s', $validationResult->getAddress()));
VAT country code: DE
VAT number: 206223519
Request date: 2023-12-29T11:33:23.919Z
Is VAT valid: true
VAT holder name: ---
VAT holder address: ---

增值税号码验证结果(增值税无效)

use GuzzleHttp\Client;
use rocketfellows\ViesVatValidationInterface\FaultCodeExceptionFactory;
use rocketfellows\ViesVatValidationInterface\VatNumber;
use rocketfellows\ViesVatValidationInterface\VatNumberValidationResultFactory;
use rocketfellows\ViesVatValidationRest\services\VatNumberValidationRestService;

require_once __DIR__ . '/vendor/autoload.php';

// Service initialization
$service = new VatNumberValidationRestService((new Client()), (new FaultCodeExceptionFactory()), (new VatNumberValidationResultFactory()));

$validationResult = $service->validateVat(VatNumber::create('DE', '206223511'));

var_dump(sprintf('VAT country code: %s', $validationResult->getCountryCode()));
var_dump(sprintf('VAT number: %s', $validationResult->getVatNumber()));
var_dump(sprintf('Request date: %s', $validationResult->getRequestDateString()));
var_dump(sprintf('Is VAT valid: %s', $validationResult->isValid() ? 'true' : 'false'));
var_dump(sprintf('VAT holder name: %s', $validationResult->getName()));
var_dump(sprintf('VAT holder address: %s', $validationResult->getAddress()));
VAT country code: DE
VAT number: 206223511
Request date: 2023-12-29T11:35:01.009Z
Is VAT valid: false
VAT holder name: ---
VAT holder address: ---

VatNumberValidationRestTestService的使用。

以下是用于接收每种答案的增值税号码列表

  • 100 = 有效的请求,有效的增值税号码
  • 200 = 有效的请求,无效的增值税号码
  • 201 = 错误:INVALID_INPUT
  • 202 = 错误:INVALID_REQUESTER_INFO
  • 300 = 错误:SERVICE_UNAVAILABLE
  • 301 = 错误:MS_UNAVAILABLE
  • 302 = 错误:TIMEOUT
  • 400 = 错误:VAT_BLOCKED
  • 401 = 错误:IP_BLOCKED
  • 500 = 错误:GLOBAL_MAX_CONCURRENT_REQ
  • 501 = 错误:GLOBAL_MAX_CONCURRENT_REQ_TIME
  • 600 = 错误:MS_MAX_CONCURRENT_REQ
  • 601 = 错误:MS_MAX_CONCURRENT_REQ_TIME

对于所有其他情况,Web服务将响应“SERVICE_UNAVAILABLE”错误。

以下是一些使用示例。

增值税号码验证结果(增值税有效)

use GuzzleHttp\Client;
use rocketfellows\ViesVatValidationInterface\FaultCodeExceptionFactory;
use rocketfellows\ViesVatValidationInterface\VatNumber;
use rocketfellows\ViesVatValidationInterface\VatNumberValidationResultFactory;
use rocketfellows\ViesVatValidationRest\services\VatNumberValidationRestTestService;

require_once __DIR__ . '/vendor/autoload.php';

// Service initialization
$service = new VatNumberValidationRestTestService((new Client()), (new FaultCodeExceptionFactory()), (new VatNumberValidationResultFactory()));

$validationResult = $service->validateVat(VatNumber::create('DE', '100'));

var_dump(sprintf('VAT country code: %s', $validationResult->getCountryCode()));
var_dump(sprintf('VAT number: %s', $validationResult->getVatNumber()));
var_dump(sprintf('Request date: %s', $validationResult->getRequestDateString()));
var_dump(sprintf('Is VAT valid: %s', $validationResult->isValid() ? 'true' : 'false'));
var_dump(sprintf('VAT holder name: %s', $validationResult->getName()));
var_dump(sprintf('VAT holder address: %s', $validationResult->getAddress()));
VAT country code: DE
VAT number: 100
Request date: 2023-12-29T11:37:42.466Z
Is VAT valid: true
VAT holder name: John Doe
VAT holder address: 123 Main St, Anytown, UK

增值税号码验证结果(增值税无效)

use GuzzleHttp\Client;
use rocketfellows\ViesVatValidationInterface\FaultCodeExceptionFactory;
use rocketfellows\ViesVatValidationInterface\VatNumber;
use rocketfellows\ViesVatValidationInterface\VatNumberValidationResultFactory;
use rocketfellows\ViesVatValidationRest\services\VatNumberValidationRestTestService;

require_once __DIR__ . '/vendor/autoload.php';

// Service initialization
$service = new VatNumberValidationRestTestService((new Client()), (new FaultCodeExceptionFactory()), (new VatNumberValidationResultFactory()));

$validationResult = $service->validateVat(VatNumber::create('DE', '200'));

var_dump(sprintf('VAT country code: %s', $validationResult->getCountryCode()));
var_dump(sprintf('VAT number: %s', $validationResult->getVatNumber()));
var_dump(sprintf('Request date: %s', $validationResult->getRequestDateString()));
var_dump(sprintf('Is VAT valid: %s', $validationResult->isValid() ? 'true' : 'false'));
var_dump(sprintf('VAT holder name: %s', $validationResult->getName()));
var_dump(sprintf('VAT holder address: %s', $validationResult->getAddress()));
VAT country code: DE
VAT number: 200
Request date: 2023-12-29T11:39:17.727Z
Is VAT valid: false
VAT holder name: ---
VAT holder address: ---

增值税号码验证结果出现INVALID_INPUT故障

use GuzzleHttp\Client;
use rocketfellows\ViesVatValidationInterface\FaultCodeExceptionFactory;
use rocketfellows\ViesVatValidationInterface\VatNumber;
use rocketfellows\ViesVatValidationInterface\VatNumberValidationResultFactory;
use rocketfellows\ViesVatValidationRest\services\VatNumberValidationRestTestService;

require_once __DIR__ . '/vendor/autoload.php';

// Service initialization
$service = new VatNumberValidationRestTestService((new Client()), (new FaultCodeExceptionFactory()), (new VatNumberValidationResultFactory()));

try {
    $validationResult = $service->validateVat(VatNumber::create('DE', '201'));
} catch (Exception $exception) {
    var_dump(get_class($exception));
    var_dump($exception->getMessage());
}
rocketfellows\ViesVatValidationInterface\exceptions\service\InvalidInputServiceException
""

增值税号码验证结果出现IP_BLOCKED故障

use GuzzleHttp\Client;
use rocketfellows\ViesVatValidationInterface\FaultCodeExceptionFactory;
use rocketfellows\ViesVatValidationInterface\VatNumber;
use rocketfellows\ViesVatValidationInterface\VatNumberValidationResultFactory;
use rocketfellows\ViesVatValidationRest\services\VatNumberValidationRestTestService;

require_once __DIR__ . '/vendor/autoload.php';

// Service initialization
$service = new VatNumberValidationRestTestService((new Client()), (new FaultCodeExceptionFactory()), (new VatNumberValidationResultFactory()));

try {
    $validationResult = $service->validateVat(VatNumber::create('DE', '401'));
} catch (Exception $exception) {
    var_dump(get_class($exception));
    var_dump($exception->getMessage());
}
rocketfellows\ViesVatValidationInterface\exceptions\service\IPBlockedServiceException
""

VatNumberValidationRestExpansibleService的使用。

VatNumberValidationRestExpansibleService - 是AbstractVatNumberValidationRestService类的继承者,配置为根据通过类构造函数传递的URL(可定制服务)发送请求。

例如,使用以下URL初始化服务 - https://ec.europa.eu/taxation_customs/vies/rest-api/check-vat-number

增值税号码验证结果(增值税有效)

use GuzzleHttp\Client;
use rocketfellows\ViesVatValidationInterface\FaultCodeExceptionFactory;
use rocketfellows\ViesVatValidationInterface\VatNumber;
use rocketfellows\ViesVatValidationInterface\VatNumberValidationResultFactory;
use rocketfellows\ViesVatValidationRest\services\VatNumberValidationRestExpansibleService;

require_once __DIR__ . '/vendor/autoload.php';

// Service initialization
$service = new VatNumberValidationRestExpansibleService(
    'https://ec.europa.eu/taxation_customs/vies/rest-api/check-vat-number',
    (new Client()),
    (new FaultCodeExceptionFactory()),
    (new VatNumberValidationResultFactory())
);

$validationResult = $service->validateVat(VatNumber::create('DE', '206223519'));

var_dump(sprintf('VAT country code: %s', $validationResult->getCountryCode()));
var_dump(sprintf('VAT number: %s', $validationResult->getVatNumber()));
var_dump(sprintf('Request date: %s', $validationResult->getRequestDateString()));
var_dump(sprintf('Is VAT valid: %s', $validationResult->isValid() ? 'true' : 'false'));
var_dump(sprintf('VAT holder name: %s', $validationResult->getName()));
var_dump(sprintf('VAT holder address: %s', $validationResult->getAddress()));
VAT country code: DE
VAT number: 206223519
Request date: 2023-12-29T11:46:32.025Z
Is VAT valid: true
VAT holder name: ---
VAT holder address: ---

增值税号码验证结果(增值税无效)

use GuzzleHttp\Client;
use rocketfellows\ViesVatValidationInterface\FaultCodeExceptionFactory;
use rocketfellows\ViesVatValidationInterface\VatNumber;
use rocketfellows\ViesVatValidationInterface\VatNumberValidationResultFactory;
use rocketfellows\ViesVatValidationRest\services\VatNumberValidationRestExpansibleService;

require_once __DIR__ . '/vendor/autoload.php';

// Service initialization
$service = new VatNumberValidationRestExpansibleService(
    'https://ec.europa.eu/taxation_customs/vies/rest-api/check-vat-number',
    (new Client()),
    (new FaultCodeExceptionFactory()),
    (new VatNumberValidationResultFactory())
);

$validationResult = $service->validateVat(VatNumber::create('DE', '206223511'));

var_dump(sprintf('VAT country code: %s', $validationResult->getCountryCode()));
var_dump(sprintf('VAT number: %s', $validationResult->getVatNumber()));
var_dump(sprintf('Request date: %s', $validationResult->getRequestDateString()));
var_dump(sprintf('Is VAT valid: %s', $validationResult->isValid() ? 'true' : 'false'));
var_dump(sprintf('VAT holder name: %s', $validationResult->getName()));
var_dump(sprintf('VAT holder address: %s', $validationResult->getAddress()));
VAT country code: DE
VAT number: 206223511
Request date: 2023-12-29T11:47:40.673Z
Is VAT valid: false
VAT holder name: ---
VAT holder address: ---

贡献。

欢迎提出拉取请求。如果有重大更改,请先创建一个问题以供讨论。

请确保根据需要更新测试。