Programovacie knižnice VIES

Programovanie knižníc umožňuje vyhľadávať údaje podnikateľov na základe zadaného IČ DPH EÚ. V súčasnosti sú knižnice API dostupné pre nasledujúce programovacie jazyky:

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

API poskytuje nasledujúce funkcie:

  • getVIESData – funkcia na potvrdenie činnosti IČ DPH EÚ prideleného ktorýmkoľvek členským štátom Európskej únie,
  • getVIESDataParsedfunkcia potvrdiť činnosť IČ DPH EÚ prideleného ktorýmkoľvek členským štátom Európskej únie a vrátiť analyzovanú adresu obchodníka,
  • getVIESDataAsync – asynchrónna funkcia, ktorá na základe odoslanej dávky IČ DPH umožňuje získať aktuálny stav DPH v EÚ a údaje obchodníka.
  • getVIESDataAsyncResult – funkcia vám umožňuje získať dávkové výsledky na základe tokenu vráteného funkciou getVIESDataAsync
  • getAccountStatus – funkcia pre získanie aktuálnych informácií o používateľskom účte.

integrácia

Všetky knižnice so zdrojovými kódmi sú k dispozícii na stiahnutie na Stiahnuť ▼ stránku. Okrem toho je zdrojový kód knižníc dostupný aj v našom oficiálnom úložisku na Github.

Spôsob integrácie knižnice závisí od zvoleného programovacieho jazyka. Pre tie jazyky, ktoré podporujú správu knižníc založenú na centrálnom úložisku, je možné ho použiť.

// 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

Overenie

Aby bolo možné vykonať správnu autentifikáciu, správne hodnoty id a key parametre by mali byť poskytnuté počas výstavby objektu klienta. The id parameter by mal obsahovať platný identifikátor kľúča používaný na autorizáciu. The key parameter by mal obsahovať platnú hodnotu kľúča použitého na autorizáciu. Identifikátor kľúča a kľúč vygeneruje užívateľ po prihlásení sa do svojho účtu na viesapi.eu portál. Proces generovania kľúčov a identifikátorov bol podrobne popísaný vyššie.

Nasledujúci príklad ilustruje, ako používať funkcie knižnice:

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"

Pozornosť! Počas procesu autentifikácie sa používa aktuálny čas počítača klienta. Preto v prípade problémov s autentifikáciou pri pokuse o pripojenie do systému viesapi.eu sa najprv uistite, že počítač alebo server, z ktorého je spojenie nadviazané, má správny aktuálny čas a časové pásmo. Viac informácií o metóde, ktorú systém viesapi.eu používa na autentifikáciu dopytov, nájdete tu tu.

Kontrola IČ DPH EÚ

Číslo DPH EÚ sa potvrdí zavolaním na číslo getVIESData funkciu, ktorej parametrom je IČ DPH EÚ, ktoré chceme overiť. Funkcia umožňuje overenie IČ DPH EÚ vydaných všetkými členskými štátmi Európskej únie.

Nasledujúci príklad ilustruje, ako sa funkcie používajú v knižniciach:

// 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

Podrobný popis vrátených atribútov:

  • uid – jedinečný identifikátor dopytu vygenerovaný viesapi.eu,
  • countryCode – kód krajiny, v ktorej je registrovaná spoločnosť spojená s EÚ IČ DPH uvedeným v dopyte,
  • vatNumber – IČ DPH overenej spoločnosti v EÚ uvedené v dopyte,
  • valid – odpoveď zo služby VIES, informujúca o aktuálnom stave EÚ DPH kontrolovaného subjektu:
    • true – je platné EÚ IČ DPH uvedené v dopyte,
    • false – IČ DPH EÚ uvedené v dopyte nie je platné,
  • traderName - obchodné meno spoločnosti,
  • traderCompanyType – vždy vrátil reťazec znakov „-“,
  • traderAddress - adresa spoločnosti, kde je spoločnosť registrovaná,
  • id – jedinečný identifikátor dopytu vygenerovaný systémom VIES (Consultation Number)
  • date – dátum vykonania dotazu
  • source – zdroj údajov, vždy: http://ec.europa.eu

Kontrola IČ DPH EÚ pomocou analyzovanej adresy obchodníka

Číslo DPH EÚ môžete potvrdiť aj zavolaním na číslo getVIESDataParsed funkciu, ktorej parametrom je IČ DPH EÚ, ktoré chceme overiť. Zavolaním tejto funkcie získate okrem informácií o stave platiteľa DPH aj analyzovanú adresu obchodníka.

Poznámka! Vzhľadom na nedostatok údajov vrátených systémom VIES pre obchodníkov z Nemecka a Španielska táto funkcia funguje nevrátiť sa analyzovaná adresa obchodníka (traderAddressComponent) pre tieto krajiny.

Dôležité upozornenie

Funkcia analýzy používa externé algoritmy AI a rozhrania API na automatické extrahovanie atribútov, ako sú: mesto, poštové smerovacie číslo, ulica s číslom ulice (číslo budovy) a číslo domu, takže nemôžeme zaručiť správnu činnosť 100%.

Nasledujúci príklad ilustruje, ako sa funkcie používajú v knižniciach:

// 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

Podrobný popis vrátených atribútov:

  • uid – jedinečný identifikátor dopytu vygenerovaný viesapi.eu,
  • countryCode – kód krajiny, v ktorej je registrovaná spoločnosť spojená s EÚ IČ DPH uvedeným v dopyte,
  • vatNumber – IČ DPH overenej spoločnosti v EÚ uvedené v dopyte,
  • valid – odpoveď zo služby VIES, informujúca o aktuálnom stave EÚ DPH kontrolovaného subjektu:
    • true – je platné EÚ IČ DPH uvedené v dopyte,
    • false – IČ DPH EÚ uvedené v dopyte nie je platné,
  • traderName - obchodné meno spoločnosti,
  • traderCompanyType – vždy vrátil reťazec znakov „-“,
  • traderAddress – adresa spoločnosti, kde je spoločnosť registrovaná (originálny formát)
  • traderAddressComponentpodrobnosti adresy zoskupenia komponentov
    • country – názov krajiny obchodníka v jej národnom jazyku
    • postalCode – PSČ adresy obchodníka
    • city – mesto adresy obchodníka
    • street - ulica adresy obchodníka
    • streetNumber – číslo ulice adresy obchodníka
    • houseNumber – číslo domu adresy obchodníka
  • id – jedinečný identifikátor dopytu vygenerovaný systémom VIES (Consultation Number)
  • date – dátum vykonania dotazu
  • source – zdroj údajov, vždy: http://ec.europa.eu

Dávková (asynchrónna) kontrola IČ DPH EÚ

getVIESDataAsync – asynchrónna funkcia, ktorá na základe odoslanej dávky IČ DPH umožňuje získať aktuálny stav DPH v EÚ a údaje obchodníka.
Ako parameter uveďte pole reťazcov obsahujúce IČ DPH EÚ, pre ktoré sa má skontrolovať status platiteľa DPH v EÚ a stiahnuť údaje obchodníka.

Minimálny počet odoslaných IČ DPH EÚ je 2 a maximálny 99.

Správne volaná funkcia vráti token, ktorý je potrebný na získanie výsledkov požiadavky. Nasledujúci príklad ilustruje, ako sa funkcie používajú v knižniciach:

// 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

Vzhľadom na asynchrónny charakter funkcie je možné výsledky získať približne po 2-3 minútach. Nezáleží na tom, či boli v žiadosti zaslané 2 alebo 99 IČ DPH EÚ.

Ak má aspoň jedno IČ DPH zadané v žiadosti nesprávny formát, systém vráti chybu „DIČ je neplatné“.

Ak chcete získať výsledky pre odoslanú žiadosť, zavolajte na getVIESDataAsyncResult funkciu poskytujúcu hodnotu tokenu ako vstupný parameter.

Dôležitá poznámka!

  1. Funkcia bola pripravená ako riešenie chyby vrátenej systémom VIES: “The maximum number of concurrent requests has been reached“ (MS_MAX_CONCURRENT_REQ). Odporúčame ho použiť pri odosielaní žiadostí o Nemecko (DE) a Francúzsko (FR), ktorá vrátila vyššie uvedenú chybu.
  2. Kým sa nedokončí proces kontroly všetkých IČ DPH zaslaných v žiadosti, všetky nasledujúce pokusy budú zamietnuté a chyba bude opravená “The maximum number of batch request has been reached, please re-submit your request later“.

getVIESDataAsyncResult– funkcia vám umožňuje získať výsledky dávky na základe tokenu vráteného serverom getVIESDataAsync funkciu.

Nasledujúci príklad ilustruje, ako sa funkcie používajú v knižniciach:

// 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

Pre každé číslo DPH EÚ odovzdané v dávkovom volaní atribúty konzistentné s odpoveďou na getVIESData funkcie sa vrátia.

Získavanie informácií o stave používateľského účtu

Funkcia umožňuje stiahnuť si všetky základné informácie o užívateľskom účte, ktoré sa zobrazujú po prihlásení sa do účtu na portáli viesapi.eu. Funkcia tiež vracia informáciu o maximálnom počte dopytov dostupných v rámci zvoleného plánu (napr. 5 000 pre Biznis plán) a celkovom počte všetkých dopytov uskutočnených v aktuálnom mesiaci na účte užívateľa.

Pozornosť! Volanie funkcie áno nezvýšiť počet uskutočnených dopytov.

Nasledujúci príklad ilustruje, ako používať funkcie knižnice.

// 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

Registrácia knižnice .NET ako objektu COM

The viesapiLibrary.dll knižnicu je možné zaregistrovať v systéme Windows ako tzv COM objekt. Potom je možné na funkcie knižnice odkazovať z mnohých rôznych programovacích jazykov a hotových aplikácií, vrátane. Microsoft Excel, Access, SQL Server, Dynamics alebo Visual FoxPro.

Ak chcete zaregistrovať knižnicu ako objekt COM, postupujte takto:

  1. Stiahnite si .NET knižnica archivovať a rozbaliť na lokálnom disku na ľubovoľné miesto.
  2. Prejdite do adresára s rozbalenými súbormi knižnice a nájdite súbor com-register.bat súbor.
  3. Vyberte com-register.bat súbor pomocou myši a vyberte súbor Run as administrator príkaz z kontextového menu.

Používanie knižnice .NET v MS Excel

Funkcie knižnice viesapiLibrary.dll je možné použiť v aplikácii MS Excel na písanie vlastných funkcií a procedúr v Visual Basic Jazyk. Aby to bolo možné, je potrebné:

  1. Registrovať a viesapiLibrary.dll knižnica ako a COM objekt na Windows.
  2. Spustite aplikáciu Excel. Vyberte DEVELOPER na páse s nástrojmi a potom kliknite na Visual Basic tlačidlo.
  3. V Visual Basic for Application okno, vyberte Tools a potom References z menu. V Available References zoznam, nájdite a vyberte VIESAPI Service Client for .NET Framework (C#). Svoj výber potvrďte pomocou OK tlačidlo.
  4. Z Insert menu, vyberte si Module a prilepte kód funkcie uvedený v príkladoch pre Visual Basic do nového okna.
  5. Nakoniec vhodné hodnoty w pre viesapi.ID a viesapi.Key by mala byť nastavená. Spôsob získania kľúča a prístupového kľúča je popísaný v kapitole Generovanie identifikátora a prístupového kľúča