Php 如何通过SOAP从VIE数据库收集公司数据

Php 如何通过SOAP从VIE数据库收集公司数据,php,soap,wsdl,Php,Soap,Wsdl,我使用VIES数据库收集公司数据,基于我的PHP应用程序的欧洲增值税编号 我需要的是: 城市 街道名称 门牌号 邮政编码 公司名称 作为单独的数据,但VIES数据库将所有数据作为一个字符串提供给我 工作示例: <?php try { $opts = array( 'http' => array( 'user_agent' => 'PHPSoapClient' ) ); $context = st

我使用VIES数据库收集公司数据,基于我的PHP应用程序的欧洲增值税编号

我需要的是:

  • 城市
  • 街道名称
  • 门牌号
  • 邮政编码
  • 公司名称
作为单独的数据,但VIES数据库将所有数据作为一个字符串提供给我

工作示例:

<?php
try {
    $opts = array(
        'http' => array(
            'user_agent' => 'PHPSoapClient'
        )
    );
    $context = stream_context_create($opts);

    $client = new SoapClient(
        'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl',
        array('stream_context' => $context,
              'cache_wsdl'     => WSDL_CACHE_NONE)
    );

    $result = $client->checkVat(
        array(
            'countryCode' => 'PL',
            'vatNumber'   => '5242106963'
        )
    );
    print_r($result);
} catch (Exception $e) {
    echo $e->getMessage();
}
?>
但我需要这样的地址:

$street='ANNOPOL';
$number='20';
$city='WARSZAWA';
$postcode='03-236';

另外,请记住,对于其他公司,街道名称或城市可以有不止一个单词,如“纽约”,因此根据单词之间的空格划分数据的简单解决方案对我来说并不适用。

正如您所述,邮政编码将采用
99-999
格式,并假定街道编号(+任何平面标识)将始终以数字开头,您可以使用preg_匹配来解析地址字符串:

$result = new stdClass();
$result->address = 'Wita Stwosza 15 M5 31-042 Kraków';

preg_match(
    '#'
    . '(.*?)'             // Match as many chars as possible (street)
    . '\s+(\d+(?:.*?))'   // Space, then number and possibly flat (number)
    . '\s+(\d\d\-\d\d\d)' // Space, then digits/dash/digits (postcode)
    . '\s(.*)'            // Space, then everything after that (city)
    . '#',
    $result->address,
    $matches
);
list ($street, $number, $postcode, $city) = array_slice($matches, 1);

echo "Street:   $street", PHP_EOL;
echo "Number:   $number", PHP_EOL;
echo "Postcode: $postcode", PHP_EOL;
echo "City:     $city", PHP_EOL;
输出:

Street:   Wita Stwosza
Number:   15 M5
Postcode: 31-042
City:     Kraków

据我所知,VIE数据已经在结果中内置了换行符。因此,您应该能够根据换行符进行分解。然后,它将只是一个计算邮政编码是最后一个还是城市的例子

为了证实我刚才说的话:

echo nl2br($result->address);

第一个链接没有指向任何显示“将……所有这些作为一个文本”示例的内容。你能删除链接并添加一个示例记录吗?如果你想接收结构化数据,SOAP是一个很好的方法。他们的欧盟网站是否有手册或开发人员区域向你展示如何对他们的服务进行SOAP调用?你的问题可能会暂时搁置,因为没有代码可供帮助,而且范围相当广泛。如果你因此,我们可以试一试,这将给读者提供一些建议。非常有趣的解决方案,但我不确定这是否具有普遍性。例如,来自VIE的另一个数据:Wita Stwosza 15 M5 31-042 Kraków,因此我们的格式始终是:街道号码邮政编码城市重要的位置代码始终是2吉比特、破折号和3吉比特它的.ex12-345唯一的问题是街道名称和编号。在这个场景中,“Wita Stwosza”是一条街道,“15 M5”是一个数字和单位…但即使是带有数字的街道名称也可以。那么如何将“Wita Stwosza 15 M5 31-042 Kraków”按街道+编号、邮政编码、CityWita Stwosza 15 M5 31-042 Kraków拆分
echo nl2br($result->address);