Валидация номера НДС VIES
Кто-нибудь знает способ включения формы на наш веб-сайт для проверки VIES? Я нахожу информацию для подтверждения ее через веб-сайт Европейского Союза.
http://ec.europa.eu/taxation_customs/vies/vieshome.do
И что меня интересует, это прямое подтверждение формы оплаты с моего сайта.
Спасибо.
Ответы
Ответ 1
Эти веб-сайты отправляют обычную 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;
Ответ 2
Фактически, база данных 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 реагирует медленно, поэтому требуется больше времени для возврата ответа. Это необходимо учитывать при разработке вашего приложения.
Ответ 3
Если по каким-либо причинам вы не можете использовать SOAP на своем сервере (нет доступных, независимо), то file_get_contents - ваш друг.
Реализация ниже не зависит от SOAP, Curl, XMLParser (простой или нет). Это стандартный PHP-код, который должен работать на любой PHP-версии, которую вы можете иметь.
Функция возвращает следующие элементы:
- COUNTRYCODE
- VATNUMBER
- 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' ) );
?>
Ответ 4
Вот полная проверка валидации на основе javascript script с регулярным выражением + по модулю для каждой страны:
http://www.braemoor.co.uk/software/vat.shtml
Ссылка для скачивания:
http://www.braemoor.co.uk/software/downloads/jsvat.zip
Использование веб-сервисов иногда не является вариантом.
Также см. PHP-порты для валидации НДС ЕС:
Ответ 5
Теперь вы можете использовать js lib для европейской проверки валидации:
jsvat - небольшая библиотека для проверки действительности номера НДС ЕС
На основе braemoor vat lib, но перепишите с помощью современных js-стандартов (braemoor, для использования exapmpe stil .eval()
) и добавьте к bower и npm.
Также с модульными тестами.
bower i jsvat --save
или
npm i jsvat --save
Ответ 6
Мне это нужно в ruby, вот мой код
- 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
Ответ 7
Я использовал службу REST на http://vatid.eu, но так как они были заблокированы VIES (я думаю, из-за большого объема запросов), Я переключился на http://apilayer.net/.
Бесплатный план составляет 100 запросов в месяц, поэтому я реализовал небольшой кеш, и я генерирую собственную таблицу действительных номеров НДС (каждый год возобновляемый), поэтому я не трачу запросы, проверяя один и тот же номер НДС более одного раза,
Соответствует моим потребностям;)
Ответ 8
Существует также API для базы данных VIES. https://vatlayer.com/documentation.
Я ищу работу для разделения адресной информации. Теперь вы можете получить его, но это одна строка.
Ответ 9
Это композитный пакет, который обертывает VIES WebService. Вы можете использовать это быстро и просто:
https://github.com/drahosistvan/vatvalidation