web-dev-qa-db-ja.com

VIES VAT番号の検証

誰でも私たちのウェブサイトにフォームを組み込んでVIESを検証する方法を知っていますか?欧州連合のウェブサイトでそれを検証する情報を見つけました。

http://ec.europa.eu/taxation_customs/vies/vieshome.do

そして、私が興味を持っているのは、私のウェブサイトからの支払いデータのフォームから直接検証することです。

ありがとう。

25
Minucioso

このWebサイトは、通常のHTMLフォームをサーバーに送信します。

最も簡単な解決策は、URLでパラメーターを渡し、応答を取得するために file_get_contents を使用することです。

その後、応答を解析して、必要な情報を抽出できます。テストされていませんが、アイデアを示しています:

$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;
5
Mariusz Jamro

実際、VIESデータベースはAPIを介して照会できます。
これらはSOAPプロトコルのみをサポートしていますが、これで十分です。

以下に簡単な例を示します。

$client = new SoapClient("http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl");
var_dump($client->checkVat(array(
  'countryCode' => $countryCode,
  'vatNumber' => $vatNo
)));

WSDLは次のとおりです。 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl

元のAPIに基づいたAPIのプロバイダーは複数ありますが、異なるプロトコルを使用して提供します。簡単に言えば、彼らは翻訳者のように振る舞います-アプリケーションでjsonを使用し、SOAP=を使用して元のAPIに接続します。これらは接続タイムアウトに大きな問題があります。

VIESデータベースの応答が遅いため、応答を返すのに時間がかかる場合があります。これは、アプリケーションの設計時に考慮する必要があります。

91

何らかの理由で、サーバーでSOAPを使用できない場合(使用できないものは何でも))ができない場合、file_get_contentsが友達。

以下の実装依存しない SOAP、Curl、XMLParser(シンプルかどうか)。これは、標準のPHPコードであり、任意のPHPバージョンで動作するはずです。

この関数は次のアイテムを返します。

  • countryCode
  • vAT番号
  • requestDate
  • 有効
  • 名前
  • アドレス

まあ、私はそれが役立つことを願っています:-)

<?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]*)<\/\1/';
    $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' ) );
?>
23

以下は、regex +国ごとのモジュロを使用したJavaScriptベースの完全なスタック検証スクリプトです。

http://www.braemoor.co.uk/software/vat.shtml

ダウンロードリンク: http://www.braemoor.co.uk/software/downloads/jsvat.Zip

Webサービスの使用は、オプションではない場合があります。

EU VAT検証のためのPHP ports:

3
lubosdz

欧州のVAT検証にjs libを使用できるようになりました。

jsvat-EU VAT番号の有効性をチェックする小さなライブラリ

braemoor's vat lib に基づいていますが、現代のjs標準(braemoor、exapmpeの場合は.eval()を使用)に書き換え、 bower および npm レジストリ。単体テストでも。

bower i jsvat --save

または

npm i jsvat --save

2
Sergei Panfilov

Rubyでこれが必要だったので、ここに私のコードがあります

  • gemインストールsavon
  • このメソッドをコントローラーに追加します

    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
    
1
Ivan Stojkovic

これはcomposerパッケージで、VIES WebServiceをラップします。この高速で簡単に使用できます。 https://github.com/drahosistvan/vatvalidation

1
ISTI

http://vatid.eu でRESTサービスを使用しましたが、VIES(Iリクエストの量が多いためだと思います)、 http://apilayer.net/ に切り替えました。

無料プランは1か月あたり100リクエストであるため、小さなキャッシュを実装し、有効なVAT番号の独自のテーブル(毎年更新可能)を生成しているため、同じVAT番号をチェックするリクエストを複数回費やすことはありません。私のニーズに合っています;)

1
Tarrakis

VIESデータベース用のAPIもあります。 https://vatlayer.com/documentation

アドレス情報を分割するための回避策を探しています。これで取得できますが、1つの文字列です。

0
Wouter Schoofs