Composant utilisant le système d'échange d'informations sur la TVA (VIES) de la Commission européenne (CE) pour vérifier et valider les numéros d'immatriculation à la TVA dans l'UE, à l'aide de PHP et Composer.
La classe Vies
fournit des fonctionnalités pour effectuer un appel SOAP à VIES et renvoie un objet CheckVatResponse
contenant les informations suivantes :
Code du pays (chaîne) : une notation à 2 caractères du code du pays
Numéro d'immatriculation à la TVA (chaîne) : contient le numéro d'immatriculation complet sans le code du pays
Date de la demande (DateTime) : la date à laquelle la demande a été faite
Valid (booléen) : flag indiquant que le numéro d'enregistrement était valide (TRUE) ou non (FALSE)
Nom (chaîne) : nom de l'entreprise enregistrée (si fourni par l'État membre de la CE)
Adresse (chaîne) : adresse enregistrée de l'entreprise (si fournie par l'État membre de la CE)
Indiqué sur le site Web de la Commission européenne :
Pour effectuer une livraison intracommunautaire sans facturer la TVA, vous devez vous assurer que la personne à qui vous livrez les biens est un assujetti dans un autre État membre et que les biens en question ont quitté ou quitteront votre État membre vers un autre État membre. MS. Le numéro de TVA doit également figurer sur la facture.
Plus d'informations sur http://ec.europa.eu/taxation_customs/vies/faqvies.do#item16
Le 25 mai 2018, le règlement général sur la protection des données ou RGPD entre en vigueur dans les 28 États membres européens. Cet ensemble de services VIES sera-t-il conforme au RGPD ?
En bref : oui.
La réponse la plus longue est que ce package VIES interagit uniquement avec le service de vérification du numéro de TVA fourni par la Commission européenne. La validation de la TVA est obligatoire dans les pays européens et ce service est donc autorisé comme base légale. Veuillez en savoir plus à ce sujet dans le DPO-3816.1 européen. Ce service ne stocke aucune donnée lui-même et ne collecte pas plus d'informations que ce qui est strictement requis par la loi et fourni par le service EC VIES.
Lorsque vous avez implémenté ce package de services dans votre propre projet, assurez-vous de stocker uniquement le numéro de TVA, l'horodatage de validation, le résultat de la validation et éventuellement l'identifiant de validation fourni par le service EC VIES. .
Version PHP minimale : 7.3
Version PHP recommandée : 7.4
Extension : savon
Extension : pcntl
Extension : ctype
Veuillez lire les notes de version pour plus de détails.
Ce projet est sur Packagist !
Pour installer la dernière version stable, utilisez composer require dragonbe/vies
.
Pour installer spécifiquement une version (par exemple 2.2.0), ajoutez-la simplement à la commande ci-dessus, par exemple composer require dragonbe/vies:2.2.0
Voici un exemple d'utilisation que vous pouvez exécuter immédiatement sur la ligne de commande (ou dans cron, worker ou autre), car ce sera probablement votre cas d'utilisation le plus courant.
<?phpuse DragonBeViesVies;use DragonBeViesViesException;use DragonBeViesViesServiceException;require_once dirname(__DIR__) . '/vendor/autoload.php';$vies = new Vies();
if (false === $vies->getHeartBeat()->isAlive()) {echo 'Le service n'est pas disponible pour le moment, veuillez réessayer plus tard.' . PHP_EOL;sortie(1); }
$vies = new Vies();$options = ['proxy_host' => '127.0.0.1','proxy_port' => '8888', ];$vies->setOptions($options);$heartBeat = new DragonBeViesHeartBeat('tcp://' . $options['proxy_host'], $options['proxy_port']);$vies->setHeartBeat($heartBeat );$isAlive = $vies->getHeartBeat()->isAlive();
Maintenant que nous savons que le service est opérationnel, nous pouvons commencer à valider les numéros de TVA.
$vatResult = $vies->validateVat('BE', // Code pays du commerçant '0203430576', // Numéro de TVA du commerçant 'BE', // Code pays du demandeur '0811231190' // Numéro de TVA du demandeur) ;
$vatResult = $vies->validateVat('BE', // Code pays du commerçant '0203430576', // Numéro de TVA du commerçant 'BE', // Code pays du demandeur '0811231190' // Numéro de TVA du demandeur 'B-Rail', // Nom du commerçant 'NV', // Type de société du commerçant 'Frankrijkstraat 65', // Adresse postale du commerçant '1060', // Code postal du commerçant'Sint-Gillis' // Ville du commerçant );
La fonctionnalité la plus importante est de voir si le numéro de TVA est valide
echo ($vatResult->isValid() ? 'Valide' : 'Non valide') . PHP_EOL;// Résultat : Valide
echo 'Identifiant : ' . $vatResult->getIdentifier() . PHP_EOL;// Résultat : Identifiant : WAPIAAAAWaXGj4Ra
Remarque : le service VIES renvoie la date et le fuseau horaire, mais pas l'heure.
echo 'Date et heure : ' . $vatResult->getRequestDate()->format('r') . PHP_EOL;// Résultat : Date et heure : Samedi 31 août 2019 00:00:00 +0200
echo 'Nom de l'entreprise : ' . $vatResult->getName() . PHP_EOL;// Résultat : Raison sociale : NV OR NATIONALE MAATSCHAPPIJ DER BELGISCHE SPOORWEGEN
echo 'Adresse de l'entreprise : ' . $vatResult->getAddress() . PHP_EOL;// Résultat : Adresse de la société : FRANKRIJKSTRAAT 56 1060 SINT-GILLIS (BIJ-BRUSSEL)
echo 'Correspondance du nom du commerçant : ' . $vatResult->getNameMatch() . PHP_EOL;// Résultat : Correspondance du nom du commerçant :
echo 'Correspondance du type de société commerciale : ' . $vatResult->getCompanyTypeMatch() . PHP_EOL;// Résultat : Correspondance du type de société commerçant :
echo 'Match de rue des commerçants : ' . $vatResult->getStreetMatch() . PHP_EOL;// Résultat : Trader street match :
echo 'Correspondance du code postal du commerçant : ' . $vatResult->getPostcodeMatch() . PHP_EOL;// Résultat : correspondance du code postal du commerçant :
echo 'Match de la ville commerçante : ' . $vatResult->getCityMatch() . PHP_EOL;// Résultat : Correspondance des villes commerçantes :
<?phpuse DragonBeViesVies;use DragonBeViesViesException;use DragonBeViesViesServiceException;require_once dirname(__DIR__) . '/vendor/autoload.php';$vies = new Vies();$company = [ 'country_code' => 'BE', 'vat_id' => '0203430576', 'trader_name' => 'B-Rail', 'trader_company_type' => 'NV', 'trader_street' => 'Frankrijkstraat 65', 'trader_postcode' => '1060', 'trader_city' => 'Saint-Gilles', ];essayez {$vatResult = $vies->validateVat($company['country_code'], // Code pays de l'opérateur$company['vat_id'], // ID TVA de l'opérateur'BE', // Code pays du demandeur (votre code pays)'0811231190', // Numéro de TVA du demandeur (votre numéro de TVA)$company['trader_name'], // Trader nom$company['trader_company_type'], // Type de société du commerçant$company['trader_street'], // Adresse postale du commerçant$company['trader_postcode'], // Code postal du commerçant$company['trader_city'] // Ville du commerçant ); } catch (ViesException $viesException) {echo 'Impossible de traiter la validation de la TVA : ' . $viesException->getMessage();exit (2); } catch (ViesServiceException $viesServiceException) {echo 'Impossible de traiter la validation de la TVA : ' . $viesServiceException->getMessage();exit (2); }echo ($vatResult->isValid() ? 'Valide' : 'Non valide') . PHP_EOL;echo 'Identifiant : ' . $vatResult->getIdentifier() . PHP_EOL;echo 'Date et heure : ' . $vatResult->getRequestDate()->format('d/m/Y H:i') . PHP_EOL;echo 'Nom de la société : ' . $vatResult->getName() . PHP_EOL;echo 'Adresse de l'entreprise : ' . $vatResult->getAddress() . PHP_EOL;echo 'Correspondance du nom du commerçant : ' . $vatResult->getNameMatch() . PHP_EOL;echo 'Correspondance du type de société de négociant : ' . $vatResult->getCompanyTypeMatch() . PHP_EOL;echo 'Match de rue des traders : ' . $vatResult->getStreetMatch() . PHP_EOL;echo 'Correspondance du code postal du commerçant : ' . $vatResult->getPostcodeMatch() . PHP_EOL;echo 'Correspondance avec la ville commerçante : ' . $vatResult->getCityMatch() . PHP_EOL;écho PHP_EOL;
Lorsque vous exécutez ceci, vous obtiendrez le résultat suivant :
Valid Identifier: WAPIAAAAWaYR0O8D Date and time: 21/10/2018 02:00 Company name: NV OR NATIONALE MAATSCHAPPIJ DER BELGISCHE SPOORWEGEN Company address: FRANKRIJKSTRAAT 56 1060 SINT-GILLIS (BIJ-BRUSSEL) Trader name match: Trader company type match: Trader street match: Trader postcode match: Trader city match:
Voici une liste de produits ou de projets qui ont inclus ce package VIES
Offre groupée Symfony par MyOnlineStore
paquet sandwich/vies
Si vous avez un produit ou un projet qui utilise ce package et que vous souhaitez une attribution pour votre travail, envoyez-moi un e-mail ou envoyez-moi un ping sur Twitter ou Facebook.
Si vous aimez disposer de conteneurs Docker, vous pouvez désormais utiliser un conteneur conçu à cet effet.
docker run --rm -d -p 8000:18080 dragonbe/vies-web
Pointez votre navigateur sur localhost:8000 pour utiliser l'interface Web de validation de la TVA.
Microsoft Dynamics GP - Validation du numéro d'enregistrement fiscal européen en temps réel à l'aide de VIES
Projets européens populaires sur la loi RIA
Exemples de code PHP - HotExamples.com
Pour la Grèce, le code ISO international du pays est GR , mais pour les IDN TVA, ils utilisent le préfixe EL . Merci à Johan Wilfer pour ce rapport.
Depuis le 1er janvier 2021, le Royaume-Uni n'est plus membre de l'Union européenne et, par conséquent, le service VIES fourni par la Commission européenne ne valide plus les numéros de TVA pour le Royaume-Uni. Il existe cependant une exception : l'Irlande du Nord (XI) pour laquelle les numéros de TVA peuvent être validés à l'aide de cette bibliothèque et du service EC VIES.
DragonBeVies est publié sous licence MIT. Consultez le fichier LICENSE fourni pour plus de détails.