VIES-programmeringsbibliotek

Med programmeringsbibliotek kan du söka efter företagardata baserat på det angivna EU-momsnumret. För närvarande finns API-bibliotek tillgängliga för följande programmeringsspråk:

  • .NET (C#, Visual Basic)
  • Java
  • JavaScript (Node.js)
  • PHP
  • Pytonorm
  • C/C++

API tillhandahåller följande funktioner:

  • getVIESData – funktion för att bekräfta aktiviteten för det EU-momsnummer som tilldelats av någon av Europeiska unionens medlemsstater,
  • getVIESDataParsedfunktion för att bekräfta aktiviteten för det EU-momsnummer som tilldelats av någon av Europeiska unionens medlemsstater och returnera den analyserade handlaradressen,
  • getVIESDataAsync – asynkron funktion, som, baserat på den skickade batchen av momsnummer, låter dig få aktuell EU-momsstatus och näringsidkardata.
  • getVIESDataAsyncResult – funktionen låter dig hämta batchresultat baserat på token som returneras av getVIESDataAsync-funktionen
  • getAccountStatus – funktion för att hämta aktuell information om användarkontot.

Integration

Alla bibliotek med källkoder är tillgängliga för nedladdning på Ladda ner sida. Dessutom finns källkoden för biblioteken också tillgänglig i vårt officiella arkiv på Github.

Sättet att integrera biblioteket beror på det valda programmeringsspråket. För de språk som stöder bibliotekshantering baserat på ett centralt arkiv är det möjligt att använda det.

// NuGet Gallery
// https://www.nuget.org/packages/VIESAPI.VIESAPIClient

PM> Install-Package VIESAPI.VIESAPIClient
// No central repository support
// Maven
// https://viesapi.eu/maven/

<repository>
    <id>viesapi</id>
    <url>https://viesapi.eu/maven/releases</url>
</repository>

<dependency>
    <groupId>eu.viesapi</groupId>
    <artifactId>viesapi-client</artifactId>
    <version>1.2.6</version>
</dependency>
// NPM
// https://www.npmjs.com/package/viesapi-client

npm install viesapi-client
// Packagist (Composer)
// https://packagist.org/packages/viesapi/client

composer require viesapi/client
# No central repository support

pip install viesapi-python-client-1.2.6.zip
' No central repository support

Autentisering

För att utföra korrekt autentisering, de korrekta värdena för id och key parametrar bör tillhandahållas under konstruktionen av klientobjektet. De id parametern bör innehålla en giltig nyckelidentifierare som används för auktorisering. De key parametern bör innehålla ett giltigt värde för nyckeln som används för auktorisering. Nyckelidentifieraren och nyckeln genereras av användaren efter att ha loggat in på sitt konto på viesapi.eu portal. Processen att generera nycklar och identifierare har beskrivits i detalj ovan.

Följande exempel illustrerar hur du använder biblioteksfunktionerna:

using viesapiLibrary.dll;

// Create the service client object
// id - a string representing the API key identifier
// key - a string representing the API key
VIESAPIClient viesapi = new VIESAPIClient("id", "key");
#include "viesapi.h"

// Create the service client object
// id - a string representing the API key identifier
// key - a string representing the API key
VIESAPIClient* viesapi = NULL;
viesapi_new_prod(&viesapi, "id", "key");
import pl.viesapi.client.*;

// Create the service client object
// id - a string representing the API key identifier
// key - a string representing the API key
VIESAPIClient viesapi = new VIESAPIClient("id", "key");
var VIESAPI = require('viesapiclient');

// Create the service client object
// id - a string representing the API key identifier
// key - a string representing the API key
var viesapi = new VIESAPI.VIESAPIClient('id', 'key');
require_once 'VIESAPI/VIESAPIClient.php';

\VIESAPI\VIESAPIClient::registerAutoloader();

// Create the service client object
// id - a string representing the API key identifier
// key - a string representing the API key
$viesapi = new \VIESAPI\VIESAPIClient('id', 'key');
from viesapi import *
from pprint import pprint

// Create the service client object
// id - a string representing the API key identifier
// key - a string representing the API key
viesapi = VIESAPIClient('id', 'key')
' Create the service client object
' id - a string representing the API key identifier
' key - a string representing the API key
Dim viesapi As New VIESAPIClient
viesapi.URL = "https://www.viesapi.eu/api"
viesapi.Id = "id"
viesapi.Key = "key"

Uppmärksamhet! Den aktuella tiden för klientens dator används under autentiseringsprocessen. I händelse av autentiseringsproblem när du försöker ansluta till viesapi.eu-systemet, se därför först till att datorn eller servern från vilken anslutningen upprättas har rätt aktuell tid och tidszon. Mer information om metoden som används av viesapi.eu-systemet för att autentisera förfrågningar finns här.

Kontrollera EU-momsnummer

EU-momsnumret bekräftas genom att ringa till getVIESData funktion, vars parameter är det EU-momsnummer som vi vill verifiera. Funktionen möjliggör verifiering av EU-momsnummer utfärdade av alla EU-medlemsstater.

Följande exempel illustrerar hur funktioner används i bibliotek:

// A call to a method that returns data from a VIES system
VIESData vies = viesapi.GetVIESData("PL1234567890");

if (vies != null) {
	Console.WriteLine(vies);
}
else {
	Console.WriteLine("Error: " + viesapi.LastError + " (code: " + viesapi.LastErrorCode + ")");
}
// A call to a method that returns data from a VIES system
VIESData* vies = viesapi_get_vies_data(viesapi, "PL1234567890");

if (vies != NULL) {
	printf("Kraj: %s\n", vies->CountryCode);
	printf("VAT ID: %s\n", vies->VATNumber);
	printf("Aktywny: %d\n", vies->Valid);
}
else {
	printf("Error: %s (code: %d)\n", viesapi_get_last_err(viesapi), viesapi_get_last_err_code(viesapi));
}
// A call to a method that returns data from a VIES system
VIESData vies = viesapi.getVIESData("PL1234567890");

if (vies != null) {
	System.out.println(vies);
}
else {
	System.out.println("Error: " + viesapi.getLastError() + " (code: " + viesapi.getLastErrorCode() + ")");
}
// A call to a method that returns data from a VIES system
viesapi.getVIESData('PL1234567890').then((vies) => {
	console.log(vies.toString());
}).catch((e) => {
	console.log(e.message);
});
// A call to a method that returns data from a VIES system
$vies = $viesapi->get_vies_data('PL1234567890');

if ($vies) {
	print_r($vies);
}
else {
	echo '<p>Error: ' . $viesapi->get_last_error() . '</p>';
}
# A call to a method that returns data from a VIES system
vies = viesapi.get_vies_data('PL1234567890')

if vies:
    pprint(vars(vies))
else:
    print('Error: ' + viesapi.get_last_error() + ' (code: ' + str(viesapi.get_last_error_code()) + ')')
' A call to a method that returns data from a VIES system
Dim vies As VIESData
Set vies = viesapi.GetVIESData("PL1234567890")

If vies Is Nothing Then
	Console.WriteLine("Error: {0}", viesapi.LastError)
Else
	Console.WriteLine(vies.ToString())
End If

Detaljerad beskrivning av returnerade attribut:

  • uid – unik frågeidentifierare genererad av viesapi.eu,
  • countryCode – landskod där det företag som är kopplat till det EU-momsnummer som anges i förfrågan är registrerat,
  • vatNumber – EU-momsnummer för det verifierade företaget som anges i förfrågan,
  • valid – svar från VIES-tjänsten, som informerar om den kontrollerade enhetens aktuella EU-momsstatus:
    • true – EU-momsnummer som anges i förfrågan är giltigt,
    • false – EU-momsnumret som anges i förfrågan är inte giltigt,
  • traderName – företagets handelsnamn,
  • traderCompanyType – returnerade alltid en sträng med "-"-tecken,
  • traderAddress – företagsadress där företaget är registrerat,
  • id – unik frågeidentifierare genererad av VIES-systemet (konsultationsnummer)
  • date – datum för utförande av frågan
  • source – datakälla, alltid: http://ec.europa.eu

Kontrollera EU-momsnummer med analyserad näringsidkaradress

Du kan också bekräfta EU-momsnumret genom att ringa getVIESDataParsed funktion, vars parameter är det EU-momsnummer som vi vill verifiera. Genom att anropa denna funktion får du, förutom information om status som momsbetalare, även den analyserade näringsidkaradressen.

Notera! På grund av bristen på data som returneras av VIES för handlare från Tyskland och Spanien gör funktionen det inte återvända en analyserad handlaradress (traderAddressComponent) för dessa länder.

Viktig ansvarsfriskrivning

Parsningsfunktionen använder externa AI-algoritmer och API:er för att automatiskt extrahera attribut som: stad, postnummer, gata med gatunummer (byggnadsnummer) och husnummer, så vi kan inte garantera att dess 100% fungerar korrekt.

Följande exempel illustrerar hur funktioner används i bibliotek:

// A call to a method that returns data from a VIES system
VIESData vies = viesapi.GetVIESDataParsed("PL1234567890");

if (vies != null) {
	Console.WriteLine(vies);
}
else {
	Console.WriteLine("Error: " + viesapi.LastError + " (code: " + viesapi.LastErrorCode + ")");
}
// A call to a method that returns data from a VIES system
VIESData* vies = viesapi_get_vies_data_parsed(viesapi, "PL1234567890");

if (vies != NULL) {
	printf("Kraj: %s\n", vies->CountryCode);
	printf("VAT ID: %s\n", vies->VATNumber);
	printf("Aktywny: %d\n", vies->Valid);
}
else {
	printf("Error: %s (code: %d)\n", viesapi_get_last_err(viesapi), viesapi_get_last_err_code(viesapi));
}
// A call to a method that returns data from a VIES system
VIESData vies = viesapi.getVIESDataParsed("PL1234567890");

if (vies != null) {
	System.out.println(vies);
}
else {
	System.out.println("Error: " + viesapi.getLastError() + " (code: " + viesapi.getLastErrorCode() + ")");
}
// A call to a method that returns data from a VIES system
viesapi.getVIESDataParsed('PL1234567890').then((vies) => {
	console.log(vies.toString());
}).catch((e) => {
	console.log(e.message);
});
// A call to a method that returns data from a VIES system
$vies = $viesapi->get_vies_data_parsed('PL1234567890');

if ($vies) {
	print_r($vies);
}
else {
	echo '<p>Error: ' . $viesapi->get_last_error() . '</p>';
}
# A call to a method that returns data from a VIES system
vies = viesapi.get_vies_data_parsed('PL1234567890')

if vies:
    pprint(vars(vies))
else:
    print('Error: ' + viesapi.get_last_error() + ' (code: ' + str(viesapi.get_last_error_code()) + ')')
' A call to a method that returns data from a VIES system
Dim vies As VIESData
Set vies = viesapi.GetVIESDataParsed("PL1234567890")

If vies Is Nothing Then
	Console.WriteLine("Error: {0}", viesapi.LastError)
Else
	Console.WriteLine(vies.ToString())
End If

Detaljerad beskrivning av returnerade attribut:

  • uid – unik frågeidentifierare genererad av viesapi.eu,
  • countryCode – landskod där det företag som är kopplat till det EU-momsnummer som anges i förfrågan är registrerat,
  • vatNumber – EU-momsnummer för det verifierade företaget som anges i förfrågan,
  • valid – svar från VIES-tjänsten, som informerar om den kontrollerade enhetens aktuella EU-momsstatus:
    • true – EU-momsnummer som anges i förfrågan är giltigt,
    • false – EU-momsnumret som anges i förfrågan är inte giltigt,
  • traderName – företagets handelsnamn,
  • traderCompanyType – returnerade alltid en sträng med "-"-tecken,
  • traderAddress – företagsadress där företaget är registrerat (originalformat)
  • traderAddressComponentadressuppgifter för komponentgruppering
    • country – Namnet på näringsidkarens land på dess nationella språk
    • postalCode – postnummer för näringsidkarens adress
    • city – orten för näringsidkarens adress
    • street -gatan till näringsidkarens adress
    • streetNumber – gatunummer för näringsidkarens adress
    • houseNumber – husnummer för näringsidkarens adress
  • id – unik frågeidentifierare genererad av VIES-systemet (konsultationsnummer)
  • date – datum för utförande av frågan
  • source – datakälla, alltid: http://ec.europa.eu

Batch (asynkron) kontroll av EU-momsnummer

getVIESDataAsync – asynkron funktion, som, baserat på den skickade batchen av momsnummer, låter dig få aktuell EU-momsstatus och näringsidkardata.
Som en parameter, tillhandahåll en strängmatris som innehåller EU-momsnummer för vilka EU:s momsbetalares status ska kontrolleras och beträdarens data ska laddas ner.

Det minsta antalet EU-momsnummer som skickas är 2 och det maximala är 99.

En korrekt anropad funktion returnerar en token, som är nödvändig för att hämta förfrågningsresultaten. Följande exempel illustrerar hur funktioner används i bibliotek:

// Upload batch of VAT numbers and get their current VAT statuses and traders data
List numbers = new List {
	"PL1234567890,
	"DK64839576",
	"CZ8475630234"
};

string token = viesapi.GetVIESDataAsync(numbers);

if (token != null) {
	Console.WriteLine("Batch token: " + token);
} else {
	Console.WriteLine("Error: " + viesapi.LastError + " (code: " + viesapi.LastErrorCode + ")");
}
// Upload batch of VAT numbers and get their current VAT statuses and traders data
char* numbers[] = {
	"PL1234567890,
	"DK64839576",
	"CZ8475630234"
};

token = viesapi_get_vies_data_async(viesapi, numbers, 3);

if (token != NULL) {
	printf("Batch token:  %s\n", token);
} else {
	printf("Error: %s (code: %d)\n", viesapi_get_last_err(viesapi), viesapi_get_last_err_code(viesapi));
}
// Upload batch of VAT numbers and get their current VAT statuses and traders data
List numbers = new ArrayList<>();
numbers.add("PL1234567890");
numbers.add("DK64839576");
numbers.add("CZ8475630234");

String token = viesapi.getVIESDataAsync(numbers);

if (token != null) {
	System.out.println("Batch token: " + token);
} else {
	System.out.println("Error: " + viesapi.getLastError() + " (code: " + viesapi.getLastErrorCode() + ")");
}
// Upload batch of VAT numbers and get their current VAT statuses and traders data
const numbers = [
	'PL1234567890',
	'DK64839576',
	'CZ8475630234'
];

viesapi.getVIESDataAsync(numbers).then((token) => {
	console.log('Batch token: ' + token);
}).catch((e) => {
	console.log(e.message);
});
// Upload batch of VAT numbers and get their current VAT statuses and traders data
$numbers = array(
	'PL1234567890',
	'DK64839576',
	'CZ7710043187'
);

$token = $viesapi->get_vies_data_async($numbers);

if ($token) {
	echo '<pre>Batch token: ' . $token . '</pre>';
} else {
	echo '<p>Error: ' . $viesapi->get_last_error() . ' (code: ' . $viesapi->get_last_error_code() . ')</p>';
}
# Upload batch of VAT numbers and get their current VAT statuses and traders data
numbers = [
    'PL1234567890',
    'DK64839576',
    'CZ7710043187'
]

token = viesapi.get_vies_data_async(numbers)

if token:
    print('Batch token: ' + token)
else:
    print('Error: ' + viesapi.get_last_error() + ' (code: ' + str(viesapi.get_last_error_code()) + ')')
' Not supported yet

På grund av funktionens asynkrona karaktär kan resultaten hämtas efter cirka 2-3 minuter. Det spelar ingen roll om 2 eller 99 EU-momsnummer skickades i begäran.

Om minst ett EU-momsnummer som skickats i begäran har ett felaktigt format, returnerar systemet ett felmeddelande "VAT-numret är ogiltigt".

För att hämta resultaten för den skickade förfrågan, ring getVIESDataAsyncResult funktion, vilket ger tokenvärdet som indataparameter.

Viktig anmärkning!

  1. Funktionen förbereddes som en lösning för felet som returnerades av VIES-systemet: "The maximum number of concurrent requests has been reached” (MS_MAX_CONCURRENT_REQ). Vi rekommenderar att du använder den när du skickar förfrågningar om Tyskland (DE) och Frankrike (FR), som returnerade det ovan nämnda felet.
  2. Tills processen att kontrollera alla EU-momsnummer som skickats i begäran är klar, kommer alla efterföljande försök att avvisas och felet kommer att rättas till "The maximum number of batch request has been reached, please re-submit your request later“.

getVIESDataAsyncResult– funktionen låter dig hämta batchresultat baserat på token som returneras av getVIESDataAsync fungera.

Följande exempel illustrerar hur funktioner används i bibliotek:

// Check batch result and download data (at production it usually takes 2-3 min for result to be ready)
BatchResult result;

while ((result = viesapi.GetVIESDataAsyncResult(token)) == null) {
	if (viesapi.LastErrorCode != Error.BATCH_PROCESSING) {
		Console.WriteLine("Error: " + viesapi.LastError + " (code: " + viesapi.LastErrorCode + ")");
		return;
	}

	Console.WriteLine("Batch is still processing, waiting...");
	Thread.Sleep(30000);
}

// Batch result is ready
Console.WriteLine(result);
// Check batch result and download data (at production it usually takes 2-3 min for result to be ready)
while ((result = viesapi_get_vies_data_async_result(viesapi, token)) == NULL) {
	if (viesapi_get_last_err_code(viesapi) != VIESAPI_ERR_BATCH_PROCESSING) {
		printf("Error: %s (code: %d)\n", viesapi_get_last_err(viesapi), viesapi_get_last_err_code(viesapi));
		return;
	}

	printf("Batch is still processing, waiting...\n");
	Sleep(30000);
}

// Batch result is ready
for (i = 0; i < result->NumbersCount; i++) {
	printf("Country:  %s\n", result->Numbers[i]->CountryCode);
	printf("VAT ID:   %s\n", result->Numbers[i]->VATNumber);
	printf("Is valid: %d\n", result->Numbers[i]->Valid);
	printf("\n");
}

for (i = 0; i < result->ErrorsCount; i++) {
	printf("Country:  %s\n", result->Errors[i]->CountryCode);
	printf("VAT ID:   %s\n", result->Errors[i]->VATNumber);
	printf("Error:    %s\n", result->Errors[i]->Error);
	printf("\n");
}
// Check batch result and download data (at production it usually takes 2-3 min for result to be ready)
BatchResult result;

while ((result = viesapi.getVIESDataAsyncResult(token)) == null) {
	if (viesapi.getLastErrorCode() != eu.viesapi.client.Error.BATCH_PROCESSING) {
		System.out.println("Error: " + viesapi.getLastError() + " (code: " + viesapi.getLastErrorCode() + ")");
		return;
	}

	System.out.println("Batch is still processing, waiting...");
	Thread.sleep(30000);
}

// Batch result is ready
System.out.println(result);
// Check batch result and download data (at production it usually takes 2-3 min for result to be ready)
const looper = setInterval(() => {
	viesapi.getVIESDataAsyncResult(token).then((result) => {
		// Batch result is ready
		console.log(result);
		clearInterval(looper);
	}).catch((e) => {
		console.log(e.message);
	});
}, 30000);
// Check batch result and download data (at production it usually takes 2-3 min for result to be ready)
while (($result = $viesapi->get_vies_data_async_result($token)) === false) {
	if ($viesapi->get_last_error_code() !== \VIESAPI\Error::BATCH_PROCESSING) {
		echo '<p>Error: ' . $viesapi->get_last_error() . ' (code: ' . $viesapi->get_last_error_code() . ')</p>';
		die();
	}

	echo '<p>Batch is still processing, waiting...</p>';
	sleep(30);
}

// Batch result is ready
echo '<pre>' . print_r($result, true) . '</pre>';
# Upload batch of VAT numbers and get their current VAT statuses and traders data
numbers = [
    'PL1234567890',
    'DK64839576',
    'CZ7710043187'
]

token = viesapi.get_vies_data_async(numbers)

if token:
    print('Batch token: ' + token)
else:
    print('Error: ' + viesapi.get_last_error() + ' (code: ' + str(viesapi.get_last_error_code()) + ')')
' Not supported yet

För varje EU-momsnummer som skickas i batchanropet, attribut som överensstämmer med svaret på getVIESData funktion returneras.

Hämtar information om användarens kontostatus

Funktionen låter dig ladda ner all grundläggande information om användarkontot, som visas efter att du loggat in på kontot på viesapi.eu-portalen. Funktionen returnerar också information om det maximala antalet förfrågningar som är tillgängliga under den valda planen (t.ex. 5 000 för affärsplanen) och det totala antalet förfrågningar gjorda under den aktuella månaden på användarens konto.

Uppmärksamhet! Att anropa funktionen gör det inte öka antalet gjorda frågor.

Följande exempel illustrerar hur du använder biblioteksfunktionerna.

// Get current account status
AccountStatus account = viesapi.GetAccountStatus();

if (account != null) {
     Console.WriteLine(account);
}
else {
     Console.WriteLine("Error: " + viesapi.LastError);
}
// Get current account status
AccountStatus* account = viesapi_get_account_status(viesapi);

if (account != NULL) {
	printf("Plan name: %s\n", account->BillingPlanName);
	printf("Price: %.2f\n", account->SubscriptionPrice);
	printf("Number of queries: %d\n", account->TotalCount);
}
else {
	printf("Error: %s\n", viesapi_get_last_err(viesapi));
}
// Get current account status
AccountStatus account = viesapi.getAccountStatus();

if (account != null) {
     System.out.println(account);
}
else {
     System.err.println("Error: " + viesapi.getLastError());
}
// Get current account status
viesapi.getAccountStatus().then((account) => {
	console.log(account.toString());
}).catch((e) => {
	console.log(e.message);
});
// Get current account status
$account = $viesapi->get_account_status();

if ($account) {
     echo '<p>' . print_r($account, true) . '</p>';
}
else {
     echo '<p>Error: ' . $viesapi->get_last_error() . '</p>';
}
# Get current account status
account = viesapi.get_account_status()

if account:
    pprint(vars(account))
else:
    print u'Error: ' + viesapi.get_last_error()
'Get current account status
Dim account As AccountStatus
Set account = viesapi.GetAccountStatus()

If account Is Nothing Then
	Console.WriteLine("Error: {0}", viesapi.LastError)
Else
	Console.WriteLine(account.ToString())
End If

Registrera ett .NET-bibliotek som ett COM-objekt

De viesapiLibrary.dll bibliotek kan registreras i Windows-systemet som den sk COM objekt. Då kan bibliotekets funktioner refereras från många olika programmeringsspråk och färdiga applikationer, inkl. Microsoft Excel, Access, SQL Server, Dynamics eller Visual FoxPro.

För att registrera ett bibliotek som ett COM-objekt, följ dessa steg:

  1. Ladda ner .NET-bibliotek arkivera och packa upp den på en lokal disk till valfri plats.
  2. Gå till katalogen med uppackade biblioteksfiler och hitta com-register.bat fil.
  3. Välj com-register.bat fil med musen och välj Run as administrator kommandot från snabbmenyn.

Använda .NET-biblioteket i MS Excel

Funktionerna i biblioteket viesapiLibrary.dll kan användas i MS Excel-applikationen för att skriva dina egna funktioner och procedurer i Visual Basic språk. För att göra det möjligt är det nödvändigt att:

  1. Registrera de viesapiLibrary.dll bibliotek som en COM objekt på Windows.
  2. Starta Excel-applikationen. Välj DEVELOPER fliken på menyfliksområdet och klicka sedan på Visual Basic knapp.
  3. I den Visual Basic for Application fönster, välj Tools och då References från menyn. I den Available References lista, hitta och välj VIESAPI Service Client for .NET Framework (C#). Bekräfta ditt val med OK knapp.
  4. Från Insert meny, välj Module och klistra in funktionskoden som presenteras i exemplen för Visual Basic i det nya fönstret.
  5. Slutligen, lämpliga värden på w för viesapi.ID och viesapi.Key bör ställas in. Metoden för att erhålla nyckeln och åtkomstnyckeln beskrivs i kapitlet Genererar identifierare och åtkomstnyckel