1. Go to this page and download the library: Download netresearch/sdk-eu-vat library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
netresearch / sdk-eu-vat example snippets
use Netresearch\EuVatSdk\Factory\VatRetrievalClientFactory;
use Netresearch\EuVatSdk\DTO\Request\VatRatesRequest;
// Create client
$client = VatRetrievalClientFactory::create();
// Request VAT rates for Germany
$request = new VatRatesRequest(
memberStates: ['DE'],
situationOn: new DateTime('2024-01-01')
);
try {
$response = $client->retrieveVatRates($request);
foreach ($response->getResults() as $result) {
echo sprintf(
"VAT rate for %s: %s%%\n",
$result->getMemberState(),
$result->getVatRate()->getValue()->__toString()
);
}
} catch (\Netresearch\EuVatSdk\Exception\VatServiceException $e) {
echo "Error: " . $e->getMessage() . "\n";
}
$request = new VatRatesRequest(
memberStates: ['DE', 'FR', 'IT', 'ES'],
situationOn: new DateTime('2024-01-01')
);
$response = $client->retrieveVatRates($request);
// Group results by country
foreach ($response->getResults() as $result) {
printf(
"%s: %s%% (%s rate)\n",
$result->getMemberState(),
$result->getVatRate()->getValue()->__toString(),
$result->getVatRate()->getType()
);
}
use Netresearch\EuVatSdk\Client\ClientConfiguration;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
// Create custom logger
$logger = new Logger('vat-service');
$logger->pushHandler(new StreamHandler('vat-service.log', Logger::INFO));
// Configure client
$config = ClientConfiguration::production($logger)
->withTimeout(30)
->withDebug(true);
$client = VatRetrievalClientFactory::create($config);
use Netresearch\EuVatSdk\Exception\{
InvalidRequestException,
ServiceUnavailableException,
ConfigurationException,
VatServiceException
};
try {
$response = $client->retrieveVatRates($request);
} catch (InvalidRequestException $e) {
// Client-side validation errors (invalid country codes, dates)
echo "Invalid request: " . $e->getMessage();
} catch (ServiceUnavailableException $e) {
// Service is down or network issues
echo "Service unavailable: " . $e->getMessage();
} catch (ConfigurationException $e) {
// Invalid SDK configuration
echo "Configuration error: " . $e->getMessage();
} catch (VatServiceException $e) {
// Any other SDK-related error
echo "VAT service error: " . $e->getMessage();
}
# config/services.yaml
services:
# Configure the ClientConfiguration service first, injecting the logger here
Netresearch\EuVatSdk\Client\ClientConfiguration:
factory: ['Netresearch\EuVatSdk\Client\ClientConfiguration', 'production']
arguments:
- '@?logger' # Pass the logger, if it exists
# The client service now only needs the pre-configured configuration service
Netresearch\EuVatSdk\Client\VatRetrievalClientInterface:
factory: ['Netresearch\EuVatSdk\Factory\VatRetrievalClientFactory', 'create']
arguments:
- '@Netresearch\EuVatSdk\Client\ClientConfiguration'
// config/app.php
'providers' => [
// ...
App\Providers\VatServiceProvider::class,
];
// app/Providers/VatServiceProvider.php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Netresearch\EuVatSdk\Client\ClientConfiguration;
use Netresearch\EuVatSdk\Client\VatRetrievalClientInterface;
use Netresearch\EuVatSdk\Factory\VatRetrievalClientFactory;
use Psr\Log\LoggerInterface;
class VatServiceProvider extends ServiceProvider
{
public function register(): void
{
$this->app->singleton(VatRetrievalClientInterface::class, function ($app) {
$logger = $app->make(LoggerInterface::class);
return VatRetrievalClientFactory::create(
ClientConfiguration::production($logger)
);
});
}
}