我尝试使用PowerShell(使用5.0版)使用VIES Soap网络服务检查增值税号。
我收到以下错误:
'Cannot find an overload for "checkVat" and the argument count: "2".'
从我在wsdl文件中看到的内容,checkVat
函数接受两个字符串值countryCode
和vatNumber
。
这是我使用的代码:
$proxy = New-WebServiceProxy -Uri "http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl"
Try{
$response = $proxy.checkVat("ES","A28017895")
$response
}Catch{
$_.Exception.Message
}
造成错误的原因是什么?
答案 0 :(得分:0)
好吧,checkVat函数需要更多参数,您还需要使用[ref]
关键字。这是一个有效的例子:
$proxy.checkVat([ref]"ES",[ref]"A28017895", [ref]$true, [ref]"", [ref]"")
答案 1 :(得分:0)
我最近在阅读this article,并想使用PowerShell测试Vies数据库并发现这篇文章。
基本上,单词[ref]
代表通过引用传递的值。这意味着,如果您定义一个本地对象,并将其传递给新方法,它将指向已定义的本地对象,并且所做的任何更改都会反映出来。默认情况下,该对象按值传递,并且在方法中进行的任何更改都不会更改本地对象。
请参见下面的脚本和输出示例:
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