65.9K
CodeProject 正在变化。 阅读更多。
Home

VIES - 增值税号检查器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.82/5 (19投票s)

2010年7月28日

CPOL

4分钟阅读

viewsIcon

143208

downloadIcon

4025

使用欧洲委员会税务关务总司提供的 VIES 增值税号验证服务。

引言

在开发电子商务和电子支付领域的应用程序时,尤其是在供欧盟客户使用时,您会遇到商业客户增值税号验证的问题。本文将介绍如何使用官方 Web 服务进行增值税查询。

背景

VAT 号码的验证是必需的,因为欧盟税收法律规定了一项名为“反向收费制度”的法规,如果客户位于另一个欧盟国家并能提供有效的 VAT 号码,表明他们确实是商业客户,则 VAT 税率可以转嫁给客户。更多信息可在此处找到。

欧洲委员会税务关务总司为此提供了一个 Web 服务,该服务可在以下地址访问:http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl

借助 Visual Studio 和 .NET SDK,使用此 Web 服务非常简单。

创建 Web 服务代理类

首先,打开 Visual Studio 命令提示符。您可以在“开始”菜单的 Microsoft Visual Studio 2010/Visual Studio Tools 条目下找到它。浏览到您要创建代理类的目录,然后键入

wsdl http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl

在命令提示符中。

您现在应该会看到以下屏幕

wsdlCreateShot.jpg

这将创建一个名为 checkVatServices.cs 的文件,该文件使用欧盟发布的 .wsdl 文件实现了 Web 服务代理。现在,我们基本上完成了 Web 服务代理类的创建。开发速度快,不是吗?

要使用此类,只需将其导入您的项目,并添加对 System.Web.Services.dll 库的引用,该库是 .NET SDK 的一部分。现在,您可以创建 checkVatService 类的实例并调用其 checkVat(...) 方法。

创建的文件实现了类对象,其中包含 .wsdl XML 定义文件中定义的各种方法。此外,您还将找到在应用程序中实现 Web 服务异步的方法。有关 Web 服务异步使用的更多信息,您可以阅读这篇有趣的 CodeProject 文章

使用该服务时,请注意,奥地利的 VAT 号码必须以大写字母“U”开头(VIES FAQ 的 Q19)。

为了方便使用此 Web 服务,我还实现了一个包装器类以及一个演示项目来通过示例展示其用法。

包装器类

在本文附带的 zip 文件中,您可以找到一个名为 ViesVatCheck 的小型包装器类,当调用其 CheckVat() 方法时,它会为奥地利 VAT 号添加一个前导字符。

ViesVatCheck 类实现了两个输入属性和四个输出属性,如下表所示

Attribute 描述 方向
CountryCode 待查 VAT 号的国家代码 输入
VATNumber 待查的 VAT 号 输入
名称 VAT 号所属公司的名称 输出
地址 公司地址 输出
IsValid true 表示 VAT 号已成功验证,否则为 false 输出
RetDate Web 服务返回的请求日期 输出

第一个输入属性是待查 VAT 号的国家代码。此属性可以是以下国家代码之一

国家 国家代码
奥地利 AT
比利时 BE
保加利亚 BG
塞浦路斯 CY
捷克共和国 CZ
德国 DE
丹麦 DK
爱沙尼亚 EE
希腊 EL
西班牙 ES
芬兰 FI
法国 FR
英国 GB
匈牙利 HU
爱尔兰 IE
意大利 IT
立陶宛 LT
卢森堡 LU
马耳他 MT
荷兰 NL
波兰 PL
葡萄牙 PT
罗马尼亚 RO
瑞典 SE
斯洛文尼亚 SI
斯洛伐克 SK

如果您仔细查看欧盟发布的增值税服务 FAQ,您会发现其中一些国家并非总是可以查询 VAT 号码,如 FAQ 的 Q11 所述。因此,此服务可用于预先检查 VAT 号码,但对于无效的 VAT 号码,仍可能需要手动检查。

包装器类的第二个属性是 VAT 号本身。您无需添加前导 U 字符(用于奥地利 VAT),因为包装器类已为您完成此操作。

调用 CheckVat 成员方法后,即可获得类的输出属性。

使用包装器类

要使用包装器类,只需下载 zip 文件并生成 VATChecker 项目。这将创建一个您可以在项目内使用的程序集。此外,演示项目包含一个小型 WPF 项目,该项目使用了 ViesVatChecker 类。

您可以在下图看到演示应用程序的屏幕

VatCheckerShot.jpg

添加程序集文件后,即可在演示应用程序中使用包装器类,您可以在其中找到 Validate 按钮的事件处理程序背后的代码

private void button1_Click(object sender, RoutedEventArgs e)
{
    if (comboBoxCountries.SelectedItem == null)
    {
        comboBoxCountries.Focus();
        return;
    }

    if (string.IsNullOrEmpty(textBoxVatNumber.Text))
    {
        textBoxVatNumber.Focus();
        return;
    }

    ViesVatCheck check = new ViesVatCheck();
    check.VATNumber = textBoxVatNumber.Text;
    check.CountryCode = ((ComboBoxItem)comboBoxCountries.SelectedItem).Tag.ToString();
            
    bool bValid = check.CheckVat();

    if (bValid)
    {
        imageValid.Visibility = System.Windows.Visibility.Visible;
        imageInvalid.Visibility = System.Windows.Visibility.Hidden;

        labelAddress.Visibility = System.Windows.Visibility.Visible;
        labelCompanyName.Visibility = System.Windows.Visibility.Visible;
        labelRequestDate.Visibility = System.Windows.Visibility.Visible;
                

        labelAddress.Content = check.Address;
        labelCompanyName.Content = check.Name;
        labelRequestDate.Content = check.RetDate.ToShortDateString();
        textBoxVatNumber.Text = check.VATNumber;
    }
    else
    {
        imageValid.Visibility = System.Windows.Visibility.Hidden;
        imageInvalid.Visibility = System.Windows.Visibility.Visible;

        labelAddress.Visibility = System.Windows.Visibility.Hidden;
        labelCompanyName.Visibility = System.Windows.Visibility.Hidden;
        labelRequestDate.Visibility = System.Windows.Visibility.Hidden;
    }
}

该项目使用 Visual Studio 2010 和 .NET 4 创建和构建。如果您使用的是以前版本的 .NET Framework,请按照上述步骤创建您自己的 VIES Web 服务代理类。

© . All rights reserved.