【问题标题】:webservice (checkVatService) powershell网络服务(checkVatService)PowerShell
【发布时间】:2017-02-17 14:48:17
【问题描述】:

我想使用这个网络服务:

http://ec.europa.eu/taxation_customs/vies/services/checkVatService 方法:POST Content-Type application/xml

这是我的要求:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:ec.europa.eu:taxud:vies:services:checkVat:types">
<soapenv:Header/>
<soapenv:Body>
    <urn:checkVat>
        <urn:countryCode>ES</urn:countryCode>
        <urn:vatNumber>A28017895</urn:vatNumber>
    </urn:checkVat>
</soapenv:Body>

wsdl 在这里:http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl

如何使用 powershell 发送 xml 请求并获得响应?

提前谢谢你。

【问题讨论】:

    标签: xml web-services powershell wsdl


    【解决方案1】:

    您应该可以使用Invoke-Webrequest 来处理它。只需将-Method 开关设置为 POST 并提供您的 xml 作为正文

    【讨论】:

    • 当我尝试这个时,我得到这个错误:Invoke-WebRequest:无法解析响应内容,因为 Internet Explorer 引擎不可用,或者 Internet Explorer 的首次启动配置不完整。指定 UseBasicParsing 参数,然后重试。
    • 根据This Link 使用-UseBasicParsing 开关作为错误状态应该可以解决此问题。似乎也可以打开 IE 并完成初始设置。
    【解决方案2】:

    您也可以使用New-WebServiceProxy,在我看来这是一个更优雅的解决方案。你不需要自己构造envelope。

    Function Get-ViesVatNumber {
    [CmdletBinding()]
        param (
            [Parameter(Mandatory=$true,
                       Position=0)]
            $CountryCode,
    
            [Parameter(Mandatory=$true,
                       Position=1)]
            $VatNumber
        )
    
        $Vies = New-WebServiceProxy -Uri "http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl" -Class "checkVat"
    
        $Valid = $false
        $Name = ""
        $Address = ""
    
        $DateChecked = $Vies.checkVat([ref]$CountryCode, [ref]$VatNumber, [ref]$Valid, [ref]$Name, [ref]$Address)
    
        $Properties = @{
            'CountryCode'   = $CountryCode
            'VatNumber'     = $VatNumber
            'Valid'         = $Valid
            'Name'          = $Name
            'Address'       = $Address
            'DateChecked'   = $DateChecked
        }
    
        $Company = New-Object -TypeName PSCustomObject -Property $Properties
    
        Write-Output $Company
    }
    

    具有有效增值税的示例

    Get-ViesVatNumber -CountryCode "BE" -VatNumber "0420429375"
    
    DateChecked : 02/08/2018 00:00:00
    Name        : Comm.VA ALPRO
    VatNumber   : 0420429375
    Address     : VLAMINGSTRAAT 28
                  8560 WEVELGEM
    Valid       : True
    CountryCode : BE
    

    无效增值税示例

    Get-ViesVatNumber -CountryCode "BE" -VatNumber "0420429335"
    
    DateChecked : 02/08/2018 00:00:00
    Name        : ---
    VatNumber   : 0420429335
    Address     : ---
    Valid       : False
    CountryCode : BE
    

    【讨论】:

      【解决方案3】:

      为了让它变得更好:在 VIES 检查网站上输入您自己的增值税号时,您将收到一个咨询号(用于管理目的,证明您检查该号码时该号码是有效的)。

      您也可以通过调用“checkVatApprox”网络服务而不是“checkVat”来请求此咨询号码。通过这样做,您需要进行以下修改(很多参数):

              $Valid = $false
              $Name = ""
              $Address = ""
              $Identifier = ""
              $TraderCompanyType = ""
              $TraderStreet = ""
              $TraderPostcode = "" 
              $TraderCity = ""
              $TraderNameMatch = 1
              $TraderNameMatchSpecified = $false
              $TraderCompanyTypeMatch = 1
              $TraderCompanyTypeMatchSpecified = $false
              $TraderStreetMatch =1
              $TraderStreetMatchSpecified = $false
              $TraderPostcodeMatch = 1
              $TraderPostcodeMatchSpecified = $false
              $TraderCityMatch = 1
              $TraderCityMatchSpecified = $false
              $RequesterCountryCode = "YourCountryCode"
              $RequesterVatNumber = "YourVATNumber"
      
              $DateChecked = $Vies.checkVatApprox([ref]$CountryCode, [ref]$VatNumber, [ref]$Name, [ref]$TraderCompanyType, [ref]$TraderStreet, [ref]$TraderPostcode, [ref]$TraderCity, $RequesterCountryCode, $RequesterVatNumber, [ref]$Valid, [ref]$Address, [ref]$TraderNameMatch, [ref]$TraderNameMatchSpecified, [ref]$TraderCompanyTypeMatch, [ref]$TraderCompanyTypeMatchSpecified, [ref]$TraderStreetMatch, [ref]$TraderStreetMatchSpecified, [ref]$TraderPostcodeMatch, [ref]$TraderPostcodeMatchSpecified, [ref]$TraderCityMatch, [ref]$TraderCityMatchSpecified, [ref]$Identifier)
      

      请注意,$RequesterCountryCode 和 $RequesterVatNumber 不需要 [ref]。这让我在注意到之前寻找了这个请求的年龄。

      现在一切正常,如果你添加这个:

           $Properties = @{
          'CountryCode'   = $CountryCode
          'VatNumber'     = $VatNumber
          'Valid'         = $Valid
          'Name'          = $Name
          'Address'       = $Address
          'DateChecked'   = $DateChecked
          'Consultation'  = $Identifier
           }
      

      您将得到以下响应:

      Get-ViesVatNumber -CountryCode "BE" -VatNumber "0420429375"
      
      DateChecked : 8/13/2019 10:00:00 PM
      Name        : Comm.VA ALPRO
      VatNumber   : 0420429375
      Address     : VLAMINGSTRAAT 28
                    8560 WEVELGEM
      Valid       : True
      CountryCode : BE
      Consultation: WAPIAAAAWyQb9ELI
      

      其他字段,例如 TraderNameMatch,您也可以将它们用作响应,但据我所知,只有西班牙支持输入地址以进行验证。其他国家没有。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-16
        • 2013-01-20
        • 2011-09-15
        • 2020-05-30
        • 2018-02-05
        相关资源
        最近更新 更多