Intereting Posts

Валидация номера НДС VIES

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

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

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

Благодарю.

Эти веб-сайты отправляют обычную 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; 

Фактически, база данных 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 реагирует медленно, поэтому требуется больше времени для возврата ответа. Это следует учитывать при разработке вашего приложения.

Если по каким-либо причинам вы не можете использовать 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' ) ); ?> 

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

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

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

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

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

Теперь вы можете использовать js lib для проверки валового внутреннего продукта в Европе:

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

Основываясь на vat libbemoor , но переписывайте их с помощью современных js-стандартов (braemoor, для использования .eval() использовать .eval() ) и добавьте в реестр .eval() и npm . Также с модульными испытаниями.

bower i jsvat --save

или

npm i jsvat --save

Мне это нужно в рубине, вот мой код

  • gem install 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 

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

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

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

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

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