rocketfellows / vies-vat-validation-php-sdk-rest
Requires
- php: >=7.4
- guzzlehttp/guzzle: ^7.8
- rocketfellows/vies-vat-validation-php-sdk-interface: ~1.2.0
Requires (Dev)
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^8.5
- roave/security-advisories: dev-latest
- squizlabs/php_codesniffer: 3.6.2
README
实现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
依赖项。
当前实现依赖项
- guzzle客户端 - https://github.com/guzzle/guzzle;
- https://github.com/rocketfellows/vies-vat-validation-php-sdk-interface.
VIES VAT号码验证REST服务描述。
有关VIES VAT号码验证REST服务的更多信息,请参阅:https://ec.europa.eu/taxation_customs/vies/#/technical-information。
对于REST服务,以下URL可用
- https://ec.europa.eu/taxation_customs/vies/rest-api/check-vat-number - 生产;
- https://ec.europa.eu/taxation_customs/vies/rest-api/check-vat-test-service - 测试。
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: ---
贡献。
欢迎提出拉取请求。如果有重大更改,请先创建一个问题以供讨论。
请确保根据需要更新测试。