该组件使用欧盟委员会 (EC) 增值税信息交换系统 (VIES),使用 PHP 和 Composer 来验证和确认欧盟的增值税注册号。
Vies
类提供对 VIES 进行 SOAP 调用的功能,并返回包含以下信息的CheckVatResponse
对象:
国家/地区代码(字符串):国家/地区代码的 2 个字符表示法
增值税注册号(字符串):包含完整的注册号,不含国家/地区代码
请求日期(DateTime):提出请求的日期
有效(布尔值):指示注册号有效(TRUE)或无效(FALSE)的标志
名称(字符串):注册公司名称(如果由 EC 成员国提供)
地址(字符串):注册公司地址(如果由 EC 成员国提供)
欧盟委员会网站上指出:
要在不收取增值税的情况下进行共同体内供应,您应确保您向其提供货物的人是另一个成员国的纳税人,并且相关货物已经离开或将离开您的成员国到另一个成员国多发性硬化症。增值税号码也应包含在发票中。
更多信息请访问http://ec.europa.eu/taxation_customs/vies/faqvies.do#item16
2018 年 5 月 25 日,《通用数据保护条例》(GDPR)成为所有 28 个欧洲成员国的法律。此 VIES 服务包是否符合 GDPR?
简而言之:是的。
更长的答案是,此 VIES 包仅与欧盟委员会提供的增值税 ID 验证服务交互。增值税验证在欧洲国家是强制性的,因此该服务被允许作为合法性和法律依据。请阅读欧洲 DPO-3816.1 中的更多相关信息。该服务本身不存储任何数据,也不收集超出法律严格要求和 EC VIES 服务提供的信息的信息。
当您在自己的项目中实施此服务包时,请确保仅存储增值税 ID、验证时间戳、验证结果以及可选的 EC VIES 服务提供的给定验证 ID 。
最低 PHP 版本:7.3
推荐 PHP 版本:7.4
延伸:肥皂
扩展名:pcntl
扩展名:ctype
请阅读发行说明了解详细信息。
这个项目在 Packagist 上!
要安装最新的稳定版本,请使用composer require dragonbe/vies
。
要安装特定版本(例如2.2.0),只需将其添加到上面的命令中,例如composer require dragonbe/vies:2.2.0
这是一个使用示例,您可以立即在命令行(或在 cron、worker 或其他)中执行,因为这很可能是您最常见的用例。
<?phpuse DragonBeViesVies;use DragonBeViesViesException;use DragonBeViesViesServiceException;require_once dirname(__DIR__) 。 '/vendor/autoload.php';$vies = new Vies();
if (false === $vies->getHeartBeat()->isAlive()) {echo '服务暂时不可用,请稍后重试。' 。 PHP_EOL;退出(1); }
$vies = new Vies();$options = ['proxy_host' => '127.0.0.1','proxy_port' => '8888', ];$vies->setOptions($options);$heartBeat = new DragonBeViesHeartBeat('tcp://' . $options['proxy_host'], $options['proxy_port']);$vies->setHeartBeat($heartBeat );$isAlive = $vies->getHeartBeat()->isAlive();
现在我们知道服务处于活动状态,我们可以开始验证增值税 ID
$vatResult = $vies->validateVat('BE', // 交易者国家代码 '0203430576', // 交易者增值税 ID 'BE', // 请求者国家代码 '0811231190' // 请求者增值税 ID);
$vatResult = $vies->validateVat('BE', // 交易者国家代码 '0203430576', // 交易者增值税 ID'BE', // 请求者国家代码 '0811231190' // 请求者增值税 ID'B-Rail', // 交易者名称'NV', // 交易者公司类型'Frankrijkstraat 65', // 交易者街道地址'1060', //交易者邮政编码'Sint-Gillis' // 交易者城市 );
最重要的功能是查看增值税 ID 是否有效
echo ($vatResult->isValid() ? '有效' : '无效') 。 PHP_EOL;// 结果:有效
回显'标识符:'。 $vatResult->getIdentifier() 。 PHP_EOL;// 结果:标识符:WAPIAAAAWaXGj4Ra
注意:VIES 服务返回日期和时区,但不返回时间
echo '日期和时间:' 。 $vatResult->getRequestDate()->format('r') 。 PHP_EOL;// 结果:日期和时间:2019 年 8 月 31 日星期六 00:00:00 +0200
echo '公司名称:' . $vatResult->getName() 。 PHP_EOL;// 结果:公司名称:NV OR NATIONALE MAATSCHAPPIJ DER BELGISCHE SPOORWEGEN
echo '公司地址:' . $vatResult->getAddress() 。 PHP_EOL;// 结果:公司地址:FRANKRIJKSTRAAT 56 1060 SINT-GILLIS (BIJ-BRUSSEL)
echo '交易者姓名匹配:' 。 $vatResult->getNameMatch() 。 PHP_EOL;// 结果:交易者名称匹配:
echo '交易者公司类型匹配:' . $vatResult->getCompanyTypeMatch() 。 PHP_EOL;// 结果:交易者公司类型匹配:
echo '交易街比赛:' 。 $vatResult->getStreetMatch() 。 PHP_EOL;// 结果:交易者街比赛:
echo '交易者邮政编码匹配:' 。 $vatResult->getPostcodeMatch() 。 PHP_EOL;// 结果:交易者邮政编码匹配:
echo '交易者城市匹配:' . $vatResult->getCityMatch() 。 PHP_EOL;// 结果:交易者城市匹配:
<?phpuse DragonBeViesVies;use DragonBeViesViesException;use DragonBeViesViesServiceException;require_once dirname(__DIR__) 。 '/vendor/autoload.php';$vies = new Vies();$company = [ 'country_code' => 'BE', 'vat_id' => '0203430576', 'trader_name' => 'B-Rail', 'trader_company_type' => 'NV', 'trader_street' => 'Frankrijkstraat 65', 'trader_postcode' => '1060', 'trader_city' => '圣吉利斯', ];try {$vatResult = $vies->validateVat($company['country_code'], // 交易者国家/地区代码$company['vat_id'], // 交易者增值税 ID'BE', // 请求者国家/地区代码(您的国家代码)'0811231190', // 请求者增值税 ID (您的增值税 ID)$company['trader_name'], // 交易者name$company['trader_company_type'], // 交易者公司类型$company['trader_street'], // 交易者街道地址$company['trader_postcode'], // 交易者邮政编码$company['trader_city'] // 交易者城市 ); } catch (ViesException $viesException) {echo '无法处理增值税验证:' . $viesException->getMessage();退出(2); } catch (ViesServiceException $viesServiceException) {echo '无法处理增值税验证:' . $viesServiceException->getMessage();退出(2); }echo ($vatResult->isValid() ? '有效' : '无效') 。 PHP_EOL;echo '标识符:' 。 $vatResult->getIdentifier() 。 PHP_EOL;echo '日期和时间:' 。 $vatResult->getRequestDate()->format('d/m/Y H:i') 。 PHP_EOL;echo '公司名称:' . $vatResult->getName() 。 PHP_EOL;echo '公司地址:' . $vatResult->getAddress() 。 PHP_EOL;echo '交易者名称匹配:' 。 $vatResult->getNameMatch() 。 PHP_EOL;echo '交易者公司类型匹配:' . $vatResult->getCompanyTypeMatch() 。 PHP_EOL;echo '交易街比赛:' 。 $vatResult->getStreetMatch() 。 PHP_EOL;echo '交易者邮政编码匹配:' 。 $vatResult->getPostcodeMatch() 。 PHP_EOL;echo '交易者城市匹配:' . $vatResult->getCityMatch() 。 PHP_EOL;回显 PHP_EOL;
当您运行此命令时,您将得到以下结果:
Valid Identifier: WAPIAAAAWaYR0O8D Date and time: 21/10/2018 02:00 Company name: NV OR NATIONALE MAATSCHAPPIJ DER BELGISCHE SPOORWEGEN Company address: FRANKRIJKSTRAAT 56 1060 SINT-GILLIS (BIJ-BRUSSEL) Trader name match: Trader company type match: Trader street match: Trader postcode match: Trader city match:
以下是包含此 VIES 包的产品或项目列表
MyOnlineStore 的 Symfony 捆绑包
三明治/vies-bundle
如果您有一个产品或项目正在使用此软件包,并且您希望对您的工作进行一些归因,请给我发送电子邮件或在 Twitter 或 Facebook 上联系我。
如果您喜欢 Docker 容器,现在可以使用为此目的设计的容器。
docker run --rm -d -p 8000:18080 Dragonbe/vies-web
将浏览器指向 localhost:8000 以使用 Web 界面验证增值税。
Microsoft Dynamics GP - 使用 VIES 进行 Dynamics GP 实时欧盟税务登记号验证
热门 RIA 法欧盟项目
PHP 代码示例 - HotExamples.com
对于希腊,国际国家 ISO 代码是GR ,但对于增值税 IDN,他们使用前缀EL 。感谢 Johan Wilfer 的报告。
自 2021 年 1 月 1 日起,英国不再是欧盟成员,因此欧盟委员会提供的 VIES 服务不再验证英国的增值税 ID。但有一个例外,即北爱尔兰 (XI) 的增值税 ID 可以使用此库和 EC VIES 服务进行验证。
DragonBeVies 是根据 MIT 许可证发布的。有关详细信息,请参阅捆绑的许可证文件。