Проверка номера НДС VIES


Кто-нибудь знает способ включить форму на нашем веб-сайте для подтверждения заявок? Я нахожу информацию, подтверждающую это, на веб-сайте Европейского союза.

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

И что меня интересует, так это проверка непосредственно из формы платежных данных с моего веб-сайта.

Спасибо.

Author: Minucioso, 2012-02-06

9 answers

Этот веб-сайт отправляет обычную 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
Author: Mariusz Jamro, 2012-02-06 10:02:30

На самом деле, база данных 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, которые основаны на оригинальном, но предоставляют его с использованием разных протоколов. Проще говоря, они действуют как переводчики - используют json с вашим приложением и подключитесь с помощью SOAP к исходному API. У них есть серьезная проблема с таймаутом соединения.

Бывают случаи, когда база данных VIES отвечает медленно, что требует больше времени для возврата ответа. Это следует учитывать при разработке вашего приложения.

 84
Author: Nikola Petkanski, 2014-06-18 16:44:57

Если по каким-то причинам вы не можете использовать SOAP на своем сервере (недоступно, что угодно), то file_get_contents ваш друг.

Реализация ниже не зависит от SOAP, Curl, XMLParser (простой или нет). Это стандартный PHP-код, который должен работать на любой версии PHP, которая у вас может быть.

Функция возвращает следующее пункты:

  • Код страны
  • Номер НДС
  • Дата запроса
  • действительный
  • имя
  • адрес

Ну, я надеюсь, что это поможет:-)

<?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' ) );
?>
 19
Author: Eugen Mihailescu, 2015-04-29 22:48:24

Вот сценарий проверки полного стека на основе javascript с регулярным выражением + по модулю для каждой страны:

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

Ссылка для скачивания: http://www.braemoor.co.uk/software/downloads/jsvat.zip

Использование веб-сервисов иногда не является вариантом.

Также смотрите порты PHP для НДС ЕС проверка:

 2
Author: lubosdz, 2014-07-03 14:00:22

Теперь вы можете использовать js lib для европейской проверки НДС:

Jsvat - небольшая библиотека для проверки действительности номера НДС ЕС

На основе библиотеки ндс Бремура , но переписать с использованием современных стандартов js (бремур, для примера, все еще использует .eval()) и добавить в bower и npm реестр. Также с модульными тестами.

bower i jsvat --save

Или

npm i jsvat --save

 1
Author: Sergei Panfilov, 2016-02-18 04:18:15

Мне это было нужно в ruby, так что вот мой код

  • драгоценный камень установить 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
Author: Ivan Stojkovic, 2016-05-21 11:50:31

Я воспользовался сервисом REST в http://vatid.eu , но так как они были заблокированы VIES (я думаю, из-за большого количества запросов), я переключился на http://apilayer.net/.

Бесплатный план составляет 100 запросов в месяц, поэтому я внедрил небольшой кэш и создаю свою собственную таблицу действительных номеров НДС (обновляемую каждый год), поэтому я не трачу запросы на проверку одного и того же номера НДС более одного раза. Соответствует моим потребностям;)

 1
Author: Tarrakis, 2017-02-15 13:50:05

Существует также API для базы данных VIES. https://vatlayer.com/documentation.

Я ищу обходной путь для разделения адресной информации. Теперь вы можете получить его, но это одна строка.

 0
Author: Wouter Schoofs, 2016-12-27 08:11:09

Это пакет composer, который обертывает веб-сервис VIES. Вы можете использовать это быстро и легко: https://github.com/drahosistvan/vatvalidation

 0
Author: ISTI, 2017-11-04 19:51:53