Javascript VIES增值税编号验证

Javascript VIES增值税编号验证,javascript,php,jquery,html,Javascript,Php,Jquery,Html,如何在我们的网站上加入表格以验证VIE?我在欧盟的网站上找到了一些信息来验证它 我感兴趣的是直接从我网站的支付数据表单进行验证。该网站将普通HTML表单发送到服务器 最简单的解决方案是在URL中传递参数并用于获取响应 然后可以解析响应以提取所需的信息。未经测试,但显示了以下想法: $country1 = 'PL'; $country2 = 'PL'; $vatnum1 = '123456'; $vatnum2 = '789012'; //Prepare the URL $url = 'htt

如何在我们的网站上加入表格以验证VIE?我在欧盟的网站上找到了一些信息来验证它


我感兴趣的是直接从我网站的支付数据表单进行验证。

该网站将普通HTML表单发送到服务器

最简单的解决方案是在URL中传递参数并用于获取响应

然后可以解析响应以提取所需的信息。未经测试,但显示了以下想法:

$country1 = 'PL';
$country2 = 'PL';
$vatnum1 = '123456';
$vatnum2 = '789012';

//Prepare the URL
$url = 'http://ec.europa.eu/taxation_customs/vies/viesquer.do?ms='.$country1.'&iso='.$country1.'&vat='.$vatnum1.'&name=&companyType=&street1=&postcode=&city=&requesterMs='.$country2.'&requesterIso='.$country2.'&requesterVat='.$vatnum2.'&BtnSubmitVat=Verify';

$response = file_get_contents($url);
// Do sth with the response
echo $response;

实际上,可以通过VIE的API查询VIE数据库。
它们只支持SOAP协议,但这就足够了

下面是一个简单的例子:

$client = new SoapClient("http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl");
var_dump($client->checkVat(array(
  'countryCode' => $countryCode,
  'vatNumber' => $vatNo
)));
以下是WSDL:

有多个API提供程序基于原始API,但使用不同的协议提供。简单地说,它们就像翻译器一样——在应用程序中使用json,并使用SOAP连接到原始API。它们在连接超时方面有一个主要问题


有时VIES数据库响应缓慢,因此需要更多时间返回响应。在设计应用程序时应考虑这一点。

这里是一个基于javascript的全堆栈验证脚本,每个国家都有regex+模:

下载链接:

使用Web服务有时不是一种选择

另请参见欧盟增值税验证的PHP端口:

编辑: 请注意,上面的链接是指非官方的验证库。这意味着一些算法没有正式发布,另一些可能会随着时间的推移而改变。如果无法使用官方VIE网络服务(例如,无法在线访问的内部网、VIE离线等),上述图书馆可能会有所帮助。如果使用这些LIB的验证通过,那么欧盟增值税很有可能90-95%有效,但肯定不是100%。只有VIE才能确保100%的有效性


如果由于某些原因,您不能在服务器上使用SOAP(没有可用的,无论什么),那么文件内容就是您的朋友

下面的实现不依赖于SOAP、Curl和XMLParser(简单与否)。这是标准的PHP代码,可以在任何PHP版本上使用

该函数返回以下项:

  • 国家代码
  • 瓦特数
  • 请求日期
  • 有效
  • 名称
  • 地址
好吧,我希望这有帮助:-)

数组(
'方法'=>'发布',
'header'=>“内容类型:text/xml;charset=utf-8;SOAPAction:checkVatService”,
“content”=>sprintf($content、$countryCode、$vatNumber),
'timeout'=>$timeout
) 
);
$ctx=流\上下文\创建($opts);
$result=file\u get\u contents(VIES\u URL,false,$ctx);
if(preg_match(sprintf($pattern,'checkVatResponse'),$result,$matches)){
foreach($key作为$key)
预匹配(sprintf($pattern,$key),$matches[2],$value)&&$response[$key]=$value[2];
}
返回$response;
}
印刷品(viesCheckVAT('RO','19386256'));
?>

您现在可以使用js lib进行欧洲增值税验证:

基于,但使用现代js标准(例如braemoor,仍然使用
.eval()
)重写,并添加到和注册表中。 还有单元测试

bower i jsvat--保存


npmijsvat——保存

我需要在ruby中使用它,下面是我的代码

  • 宝石安装savon
  • 将此方法添加到控制器

    def validateVAT
      # create a client for the service
      client = Savon.client(wsdl: 'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl')
      response = client.call(:check_vat, message: {countryCode: params[:country_code], vatNumber: params[:vat]})
      render json: { valid: response.body[:check_vat_response][:valid] }, status: :ok
    end
    

    • 还有一个用于VIE数据库的API


      我正在寻找一个拆分地址信息的方法。现在你可以得到它,但它是一个字符串

      我在上使用了REST服务,但由于它们被VIE阻止(我想是因为请求量很大),我已经切换到了

      免费计划是每月100个请求,因此我实现了一个小型缓存,并生成了我自己的有效增值税编号表(每年更新),因此我不会花费请求多次检查同一增值税编号。
      适合我的需要;)

      这是一个composer包,它包装了VIES Web服务。您可以快速简便地使用此功能:

      非常感谢,我使用$response上的preg_match函数来比较数字是否有效。现在我需要一个有效的数字,如果它真的工作尝试。代码:if(preg_match(“/No,invalid VAT number/i”,“$response”){echo“invalid number.”;}否则{echo”Valid number.;}这看起来很简单。然而,如果他们的网站发生任何变化,它就会崩溃。有官方API吗?@Johan本文介绍了如何使用VIES VAT SOAP web服务:@Les Carbonaro这是一个非常好的回答。我建议使用这种方法,而不是原始答案。@Lescabonaro这里有一个更新的链接:(抱歉,但博客从那时起有了一些更新)我一直在搜索有关此soap api的官方文档,是否有指向文档的链接?如果您在浏览器中打开该链接,您可以检查“xsd:documentation”的内容节点。此服务的可靠性令人震惊!试图实现以遵守新的欧盟增值税法律,但始终出现“服务器忙”错误。您可能希望此SOAP接口只检查增值税编号的中央数据库,但这并不存在。每个国家都管理自己的数据库,而欧盟委员会只是发送查询。这些查询甚至不会一直停留在web服务上,而是通过传统的海关网络(CCN/CSI)进行的,在某些国家,远程系统可能会非常糟糕。甚至有一个国家在数天甚至数周内退出该体系!有没有连接SSL的方法?更好地使用它-它基于braemoor的库,但用现代标准和测试重写,并添加到bower和np中
      def validateVAT
        # create a client for the service
        client = Savon.client(wsdl: 'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl')
        response = client.call(:check_vat, message: {countryCode: params[:country_code], vatNumber: params[:vat]})
        render json: { valid: response.body[:check_vat_response][:valid] }, status: :ok
      end