marcOpera ha scritto:
Interrogare il VIES
Questo è uno snippet del codice che uso io in C++ per interrogare il servizio web ufficiale del VIES:
...
Grazie, molto utile.
Posto codice in vecchio vb6 usando INET control (MSINET.Ocx) .
Su form semplice, messo controllo INET di nome INet1, poi 2 text box una per nazione di nome txtNAZ (max 2 char) e uno per VAT di nome txtVAT e poi un semplice pulsante di nome Command
codice del pulsante:
Private Sub Command_Click()
Dim l_Sql As String, l_Url As String
If Len("" & txtNAZ.Text) < 2 Then Exit Sub
If Len("" & txtVAT.Text) < 2 Then Exit Sub
l_Url = "http://ec.europa.eu/taxation_customs/vies/services/checkVatService"
l_Sql = "<soapenv:Envelope"
l_Sql = l_Sql & " xmlns:soapenv=" & Chr$(34) & "http://schemas.xmlsoap.org/soap/envelope/" & Chr$(34) & ""
l_Sql = l_Sql & " xmlns:urn=" & Chr$(34) & "urn:ec.europa.eu:taxud:vies:services:checkVat:types" & Chr$(34) & ">"
l_Sql = l_Sql & " <soapenv:Header/>"
l_Sql = l_Sql & " <soapenv:Body>"
l_Sql = l_Sql & " <urn:checkVat>"
l_Sql = l_Sql & " <urn:countryCode>" & Left$(txtNAZ.Text, 2) & "</urn:countryCode>"
l_Sql = l_Sql & " <urn:vatNumber>" & txtVAT.Text & "</urn:vatNumber>"
l_Sql = l_Sql & " </urn:checkVat>"
l_Sql = l_Sql & " </soapenv:Body>"
l_Sql = l_Sql & "</soapenv:Envelope>" & vbCrLf
Inet1.RemoteHost = l_Url
Inet1.Protocol = icHTTP
Inet1.RequestTimeout = 10000
Inet1.Execute l_Url, "POST", l_Sql, "SOAPAction: " & Chr$(34) & Chr$(34) & vbCrLf
Codice evento change del INet1 con recupero name e address:
Private Sub Inet1_StateChanged(ByVal State As Integer)
Dim l_Str As String, l_name As String, l_addr As String, l_pos As Integer
Select Case State
Case 11: Debug.Print "icError............: Si è verificato un errore nella comunicazione con il PC host."
Case 12: Debug.Print "icResponseCompleted: La richiesta è stata completata con successo."
l_Str = Inet1.GetChunk(600)
If InStr(l_Str, "<valid>true</valid>") > 0 Then
l_pos = InStr(l_Str, "<name>")
If l_pos > 0 Then
l_name = Mid$(l_Str, l_pos + Len("<name>"))
l_pos = InStr(l_name, "</name>")
If l_pos > 0 Then l_name = Mid$(l_name, 1, l_pos - 1)
End If
l_pos = InStr(l_Str, "<address>")
If l_pos > 0 Then
l_addr = Mid$(l_Str, l_pos + Len("<address>"))
l_pos = InStr(l_addr, "</address>")
If l_pos > 0 Then l_addr = Mid$(l_addr, 1, l_pos - 1)
End If
MsgBox "Valido:" & vbCrLf & l_name & vbCrLf & l_addr
Else
MsgBox "NON valido!"
End If
'Debug.Print l_Str
End Select
End Sub
Provato con alcuni VAT tedeschi e funziona, non sempre da name e address (dipende se il proprietario del VAT non vuole pubblici questi dati)
Per VAT italiani funziona...ma: Di alcuni miei clienti okay, il mio -> NO (attivo dal 1996 !! ) Forse il mo VAT non è attivo per operazioni intracomunitarie ?!?
Quando si controlla su AdE PIVA italiana, c'e' avviso:
"ATTENZIONE - Per verificare se la partita Iva è di un soggetto autorizzato ad effettuare operazioni intracomunitarie deve essere utilizzato il servizio Controllo partite Iva comunitarie (Vies)."