【问题标题】:How to gather company data from VIES database via SOAP如何通过 SOAP 从 VIES 数据库中收集公司数据
【发布时间】:2016-08-08 20:34:48
【问题描述】:

我正在使用 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();
}
?>

我收到了:

stdClass Object (
    [countryCode] => PL
    [vatNumber] => 5242106963
    [requestDate] => 2015-02-20+01:00
    [valid] => 1
    [name] => COCA-COLA HBC POLSKA SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ
    [address] => ANNOPOL 20 03-236 WARSZAWA
)

但我需要这样的地址:

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

另外请记住,对于其他公司,街道名称或城市可以有多个单词,例如“New York”,因此基于单词之间的空格划分数据的简单解决方案对我不起作用.

【问题讨论】:

  • 第一个链接没有指向任何显示“将...全部作为一个文本”的示例的内容。您可以删除链接并添加示例记录吗?
  • 如果您想接收结构化数据,SOAP 是一个不错的方法。他们的欧盟站点是否有手册或开发人员专区来向您展示如何对他们的服务进行 SOAP 调用?您的问题可能会被搁置,因为没有代码可以帮助,而且它相当广泛。如果您因此可以尝试一下,那将为读者提供一些建议。

标签: php soap wsdl


【解决方案1】:

正如您所说,邮政编码将采用99-999 格式并假设街道编号(+ 任何平面标识)总是以数字开头,您可以使用 preg_match 来解析地址字符串:

$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

【讨论】:

  • 非常有趣的解决方案,但是我不确定这是否通用。例如来自 VIES 的另一个数据:Wita Stwosza 15 M5 31-042 Kraków 所以我们总是采用如下格式:街道号码邮政编码城市重要的是 Posctode 始终是 2 吉特、破折号和 3 位数字。 Ex 12-345 唯一的问题是街道名称和号码。在这个场景中,“Wita Stwosza”是一条街道,“15 M5”是一个数字和平面。 ..但即使是带有数字的街道名称也可以。那么如何通过街道+号码、邮政编码、城市来拆分“Wita Stwosza 15 M5 31-042 Kraków”
  • Wita Stwosza 15 M5 31-042 克拉科夫
【解决方案2】:

据我所知,VIES 数据已经在结果中内置了换行符。因此,您应该能够根据换行符进行爆炸。然后就可以确定邮政编码是最后一个还是城市。

确认我的意思:

echo nl2br($result->address);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多