Validation du numéro de TVA VIES
quelqu'un sait comment intégrer un formulaire sur notre site web pour valider les VIES? - Je trouver des informations permettant de le valider sur le site internet de l'Union Européenne.
http://ec.europa.eu/taxation_customs/vies/vieshome.do
et ce qui m'intéresse est de valider directement à partir de la forme des données de paiement de mon site web.
Merci.
9 réponses
ce site Web envoie un formulaire HTML ordinaire à un serveur.
la solution la plus simple est de passer les paramètres dans L'URL et d'utiliser file_get_contents pour obtenir la réponse.
la réponse peut alors être analysée pour extraire l'information que vous voulez. Pas testé, mais l'idée:
$country1 = 'PL';
$country2 = 'PL';
$vatnum1 = '123456';
$vatnum2 = '789012';
//Prepare the URL
$url = 'http://ec.europa.eu/taxation_customs/vies/viesquer.do?ms='.$country1.'&iso='.$country1.'&vat='.$vatnum1.'&name=&companyType=&street1=&postcode=&city=&requesterMs='.$country2.'&requesterIso='.$country2.'&requesterVat='.$vatnum2.'&BtnSubmitVat=Verify';
$response = file_get_contents($url);
// Do sth with the response
echo $response;
en fait, la base de données VIES peut être interrogée via leur API.
Ils ne soutiennent que le protocole SOAP, mais cela devrait être suffisant.
Voici un exemple simple:
$client = new SoapClient("http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl");
var_dump($client->checkVat(array(
'countryCode' => $countryCode,
'vatNumber' => $vatNo
)));
voici le WSDL:http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl
il y a plusieurs fournisseurs D'API qui sont basés sur l'original, mais le fournissent en utilisant des protocoles différents. Simplement dit, Ils agissent comme des traducteurs-en utilisant JSON avec votre application et connectez-vous avec SOAP à L'API d'origine. Ceux-ci ont un problème majeur avec le délai de connexion.
il y a des moments où la base de données VIES répond lentement, ce qui demande plus de temps pour retourner une réponse. Cela devrait être pris en considération lors de la conception de votre application.
Si, pour quelques raisons qui vous ne pouvez pas utiliser de SAVON sur votre serveur (pas disponible, peu importe), puis file_get_contents est votre ami.
La mise en œuvre ci-dessous ne dépend pas sur le SAVON, le Roulage, le parseur xml (Simple ou pas). C'est le code PHP standard qui devrait fonctionner sur N'importe quelle version PHP que vous pouvez avoir.
la fonction renvoie La suite articles:
- country code
- vatNumber
- requestDate
- valide
- nom
- adresse
eh Bien, j'espère que cela aide :-)
<?php
DEFINE ( 'VIES_URL', 'http://ec.europa.eu/taxation_customs/vies/services/checkVatService' );
/**
* VIES VAT number validation
*
* @author Eugen Mihailescu
*
* @param string $countryCode
* @param string $vatNumber
* @param int $timeout
*/
function viesCheckVAT($countryCode, $vatNumber, $timeout = 30) {
$response = array ();
$pattern = '/<(%s).*?>([\s\S]*)<\//';
$keys = array (
'countryCode',
'vatNumber',
'requestDate',
'valid',
'name',
'address'
);
$content = "<s11:Envelope xmlns:s11='http://schemas.xmlsoap.org/soap/envelope/'>
<s11:Body>
<tns1:checkVat xmlns:tns1='urn:ec.europa.eu:taxud:vies:services:checkVat:types'>
<tns1:countryCode>%s</tns1:countryCode>
<tns1:vatNumber>%s</tns1:vatNumber>
</tns1:checkVat>
</s11:Body>
</s11:Envelope>";
$opts = array (
'http' => array (
'method' => 'POST',
'header' => "Content-Type: text/xml; charset=utf-8; SOAPAction: checkVatService",
'content' => sprintf ( $content, $countryCode, $vatNumber ),
'timeout' => $timeout
)
);
$ctx = stream_context_create ( $opts );
$result = file_get_contents ( VIES_URL, false, $ctx );
if (preg_match ( sprintf ( $pattern, 'checkVatResponse' ), $result, $matches )) {
foreach ( $keys as $key )
preg_match ( sprintf ( $pattern, $key ), $matches [2], $value ) && $response [$key] = $value [2];
}
return $response;
}
print_r ( viesCheckVAT ( 'RO', '19386256' ) );
?>
voici un script de validation basé sur javascript avec regex + modulo par pays:
http://www.braemoor.co.uk/software/vat.shtml
lien de Téléchargement: http://www.braemoor.co.uk/software/downloads/jsvat.zip
utiliser webservices n'est parfois pas une option.
Voir aussi les ports PHP pour la TVA de L'UE validation:
vous pouvez utiliser maintenant js lib pour la validation européenne VAT:
jsvat-petite bibliothèque pour vérifier la validité du numéro de TVA de L'UE
basé sur braemoor vat lib, mais réécrire avec des standarts js modernes (braemoor, for exapmpe stil use .eval()
) et ajouté à bower et npm registre.
Aussi avec des tests unitaires.
bower i jsvat --save
ou
npm i jsvat --save
j'ai besoin de ruby, donc voici mon code
- gem install savon
ajouter cette méthode à votre contrôleur
def validateVAT # create a client for the service client = Savon.client(wsdl: 'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl') response = client.call(:check_vat, message: {countryCode: params[:country_code], vatNumber: params[:vat]}) render json: { valid: response.body[:check_vat_response][:valid] }, status: :ok end
I used the REST service at http://vatid.eu, mais puisqu'ils ont été bloqués par VIES( je suppose en raison du grand nombre de requêtes), Je suis passé à http://apilayer.net/.
le plan libre est de 100 demandes par mois, donc j'ai mis en place une petite cache et je génère ma propre table de numéros de TVA valides (renouvelable chaque année), donc je ne dépense pas les demandes vérifiant le même numéro de TVA plus d'une fois. Convient à mes besoins ;)
il y a aussi une API pour la base de données VIES. https://vatlayer.com/documentation.
je cherche un travail pour partager les informations d'adresse. Maintenant tu peux l'avoir mais c'est une corde.
il s'agit d'un paquet de compositeur, qui enveloppe le service web VIES. Vous pouvez utiliser ce rapide et facile: https://github.com/drahosistvan/vatvalidation