diff --git a/phpunit.xml b/phpunit.xml index 00d784e..71d9ec0 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -10,9 +10,6 @@ - - ./tests/Unit - ./tests/Integration diff --git a/src/Http/SearchMapperV2.php b/src/Http/SearchMapperV2.php new file mode 100644 index 0000000..c6c126b --- /dev/null +++ b/src/Http/SearchMapperV2.php @@ -0,0 +1,33 @@ +kvkNumber = $kvkNumber; @@ -82,6 +85,11 @@ public function setHuisnummer(string $huisnummer) $this->huisnummer = $huisnummer; } + public function setHuisnummerToevoeging(string $huisnummerToevoeging) + { + $this->huisnummerToevoeging = $huisnummerToevoeging; + } + public function setType(string $type) { $this->type = $type; @@ -113,6 +121,7 @@ public function toArray(): array 'plaats' => $this->plaats, 'postcode' => $this->postcode, 'huisnummer' => $this->huisnummer, + 'huisnummerToevoeging' => $this->huisnummerToevoeging, 'type' => $this->type, 'inclusiefinactieveregistraties' => $this->inclusiefinactieveregistraties, 'pagina' => $this->pagina, diff --git a/src/Http/SearchQueryV2.php b/src/Http/SearchQueryV2.php new file mode 100644 index 0000000..bf82930 --- /dev/null +++ b/src/Http/SearchQueryV2.php @@ -0,0 +1,140 @@ +kvkNummer = $kvkNummer; + } + + public function setRsin(string $rsin) + { + $this->rsin = $rsin; + } + + public function setVestigingsnummer(string $vestigingsnummer) + { + $this->vestigingsnummer = $vestigingsnummer; + } + + public function setNaam(string $naam) + { + $this->naam = $naam; + } + + public function setStraatnaam(string $straatnaam) + { + $this->straatnaam = $straatnaam; + } + + public function setHuisnummer(string $huisnummer) + { + $this->huisnummer = $huisnummer; + } + + public function setHuisletter(string $huisletter) + { + $this->huisletter = $huisletter; + } + + public function setPostcode(string $postcode) + { + $this->postcode = $postcode; + } + + public function setPlaats(string $plaats) + { + $this->plaats = $plaats; + } + + public function setPostbusnummer(int $postbusnummer) + { + $this->postbusnummer = $postbusnummer; + } + + public function setType(string $type) + { + $this->type = $type; + } + + public function setInclusiefinactieveregistraties(bool $inclusiefinactieveregistraties) + { + $this->inclusiefinactieveregistraties = $inclusiefinactieveregistraties; + } + + public function setPagina(int $pagina) + { + $this->pagina = $pagina; + } + + public function setResultatenPerPagina(int $resultatenPerPagina) + { + $this->resultatenPerPagina = $resultatenPerPagina; + } + + public function toArray(): array + { + return [ + 'kvkNummer' => $this->kvkNummer, + 'rsin' => $this->rsin, + 'vestigingsnummer' => $this->vestigingsnummer, + 'naam' => $this->naam, + 'straatnaam' => $this->straatnaam, + 'huisnummer' => $this->huisnummer, + 'huisletter' => $this->huisletter, + 'postcode' => $this->postcode, + 'plaats' => $this->plaats, + 'type' => $this->type, + 'inclusiefinactieveregistraties' => $this->inclusiefinactieveregistraties, + 'pagina' => $this->pagina, + 'resultatenPerPagina' => $this->resultatenPerPagina, + ]; + } +} diff --git a/src/KvkClient.php b/src/KvkClient.php index de414fe..3ff0ea2 100644 --- a/src/KvkClient.php +++ b/src/KvkClient.php @@ -4,14 +4,15 @@ namespace Appvise\KvkApi; -use Appvise\KvkApi\Model\Link; -use Appvise\KvkApi\Http\QueryInterface; use Appvise\KvkApi\Http\ClientInterface; +use Appvise\KvkApi\Http\QueryInterface; use Appvise\KvkApi\Http\SearchMapper; +use Appvise\KvkApi\Http\SearchMapperV2; +use Appvise\KvkApi\Model\Company\BasisProfielFactory; use Appvise\KvkApi\Model\Company\EigenaarFactory; use Appvise\KvkApi\Model\Company\VestigingFactory; -use Appvise\KvkApi\Model\Company\BasisProfielFactory; use Appvise\KvkApi\Model\Company\VestigingListFactory; +use Appvise\KvkApi\Model\Link; final class KvkClient implements KvkClientInterface { @@ -66,6 +67,14 @@ public function search(QueryInterface $query) return SearchMapper::fromResponse($result); } + public function searchV2(QueryInterface $query) + { + $response = $this->client->hitEndpoint("{$this->baseUrl}api/v2/zoeken", $query); + $result = $this->decodeJson($response); + + return SearchMapperV2::fromResponse($result); + } + public function getBasisProfiel(QueryInterface $query) { $response = $this->client->hitEndpoint("{$this->baseUrl}api/v1/basisprofielen/{$query->toArray()['kvkNummer']}"); diff --git a/src/KvkClientFactory.php b/src/KvkClientFactory.php index 58cfc28..eaee8b0 100644 --- a/src/KvkClientFactory.php +++ b/src/KvkClientFactory.php @@ -17,12 +17,8 @@ class KvkClientFactory private const PRODUCTION_URL = 'https://api.kvk.nl/'; private const DEVELOPMENT_URL = 'https://developers.kvk.nl/test/'; - public static function create(string $userKey, string $stage = 'test', string $rootCertificate = null): KvkClientInterface + public static function create(string $userKey, string $stage = 'test', ?string $rootCertificate = null): KvkClientInterface { - if ($rootCertificate === null) { - trigger_error('Root certificate is required. Please configure your system or supply one here.', E_USER_DEPRECATED); - } - switch ($stage) { case 'production': return new KvkClient(self::createHttpClient($userKey, $rootCertificate), self::PRODUCTION_URL); @@ -45,8 +41,10 @@ private static function createHttpClient(string $userKey, ?string $rootCertifica $client = new Client([ 'debug' => false, - 'verify' => $rootCertificate ?? false, + 'verify' => $rootCertificate ?: false, 'handler' => $stack, + 'timeout' => 10, + 'connect_timeout' => 3, ]); return new GuzzleClient($client); diff --git a/src/KvkClientInterface.php b/src/KvkClientInterface.php index 0541c8d..83ed702 100644 --- a/src/KvkClientInterface.php +++ b/src/KvkClientInterface.php @@ -9,6 +9,8 @@ interface KvkClientInterface { public function search(QueryInterface $query); + public function searchV2(QueryInterface $query); + public function getBasisProfiel(QueryInterface $query); public function getBasisProfielEigenaar(QueryInterface $query); diff --git a/src/Model/AbstractFactory.php b/src/Model/AbstractFactory.php index 14f732b..ef03a78 100644 --- a/src/Model/AbstractFactory.php +++ b/src/Model/AbstractFactory.php @@ -10,27 +10,27 @@ class AbstractFactory { protected static function pluckString($needle, $haystack): ?string { - return self::extract($needle, $haystack); + return (string) self::extract($needle, $haystack); } protected static function pluckFloat($needle, $haystack): ?float { - return (float)self::extract($needle, $haystack); + return (float) self::extract($needle, $haystack); } protected static function pluckInteger($needle, $haystack): ?int { - return (int)self::extract($needle, $haystack); + return (int) self::extract($needle, $haystack); } protected static function pluckArray($needle, $haystack): ?array { - return (array)self::extract($needle, $haystack); + return (array) self::extract($needle, $haystack); } protected static function pluckDate($needle, $haystack, $format = 'Ymd'): ?DateTime { - $date = (string)self::extract($needle, $haystack); + $date = (string) self::extract($needle, $haystack); if (! $date) { return null; } diff --git a/src/Model/Adres.php b/src/Model/Adres.php index bf8c825..067efbd 100644 --- a/src/Model/Adres.php +++ b/src/Model/Adres.php @@ -7,40 +7,56 @@ class Adres { private $type; + private $indAfgeschermd; + private $volledigAdres; + private $straatnaam; + private $huisnummer; + private $huisnummerToevoeging; + private $huisletter; + private $aanduidingBijHuisnummer; + private $toevoegingAdres; + private $postcode; + private $postbusnummer; + private $plaats; + private $straatHuisnummer; + private $postcodeWoonplaats; + private $regio; + private $land; + private $geoData; public function __construct( - ?string $type, - ?string $indAfgeschermd, - ?string $volledigAdres, - ?string $straatnaam, - ?int $huisnummer, - ?string $huisnummerToevoeging, - ?string $huisletter, - ?string $aanduidingBijHuisnummer, - ?string $toevoegingAdres, - ?string $postcode, - ?int $postbusnummer, - ?string $plaats, - ?string $straatHuisnummer, - ?string $postcodeWoonplaats, - ?string $regio, - ?string $land, + ?string $type, + ?string $indAfgeschermd, + ?string $volledigAdres, + ?string $straatnaam, + ?string $huisnummer, + ?string $huisnummerToevoeging, + ?string $huisletter, + ?string $aanduidingBijHuisnummer, + ?string $toevoegingAdres, + ?string $postcode, + ?int $postbusnummer, + ?string $plaats, + ?string $straatHuisnummer, + ?string $postcodeWoonplaats, + ?string $regio, + ?string $land, ?GeoData $geoData ) { $this->type = $type; @@ -72,7 +88,7 @@ public function getStraatnaam(): ?string return $this->straatnaam; } - public function getHuisnummer(): ?int + public function getHuisnummer(): ?string { return $this->huisnummer; } @@ -146,4 +162,27 @@ public function getVolledigAdres(): string { return $this->volledigAdres; } + + public function toArray(): array + { + return [ + 'type' => $this->type, + 'indAfgeschermd' => $this->indAfgeschermd, + 'volledigAdres' => $this->volledigAdres, + 'straatnaam' => $this->straatnaam, + 'huisnummer' => $this->huisnummer, + 'huisnummerToevoeging' => $this->huisnummerToevoeging, + 'huisletter' => $this->huisletter, + 'aanduidingBijHuisnummer' => $this->aanduidingBijHuisnummer, + 'toevoegingAdres' => $this->toevoegingAdres, + 'postcode' => $this->postcode, + 'postbusnummer' => $this->postbusnummer, + 'plaats' => $this->plaats, + 'straatHuisnummer' => $this->straatHuisnummer, + 'postcodeWoonplaats' => $this->postcodeWoonplaats, + 'regio' => $this->regio, + 'land' => $this->land, + 'geoData' => $this->geoData ? $this->geoData->toArray() : null, + ]; + } } diff --git a/src/Model/AdresFactory.php b/src/Model/AdresFactory.php index 9a8a477..8e8237a 100644 --- a/src/Model/AdresFactory.php +++ b/src/Model/AdresFactory.php @@ -13,7 +13,7 @@ public static function fromResponse($response): Adres self::pluckString('indAfgeschermd', $response), self::pluckString('volledigAdres', $response), self::pluckString('straatnaam', $response), - self::pluckInteger('huisnummer', $response), + self::pluckString('huisnummer', $response), self::pluckString('huisnummerToevoeging', $response), self::pluckString('huisletter', $response), self::pluckString('aanduidingBijHuisnummer', $response), diff --git a/src/Model/Company/BasisProfiel.php b/src/Model/Company/BasisProfiel.php index d893195..4f1a834 100644 --- a/src/Model/Company/BasisProfiel.php +++ b/src/Model/Company/BasisProfiel.php @@ -4,6 +4,7 @@ namespace Appvise\KvkApi\Model\Company; +use Appvise\KvkApi\Model\Link; use Appvise\KvkApi\Model\MaterieleRegistratie; use Appvise\KvkApi\Model\SbiActiviteit; use DateTime; diff --git a/src/Model/Company/Eigenaar.php b/src/Model/Company/Eigenaar.php index b101fe1..d101bc2 100644 --- a/src/Model/Company/Eigenaar.php +++ b/src/Model/Company/Eigenaar.php @@ -5,14 +5,19 @@ namespace Appvise\KvkApi\Model\Company; use Appvise\KvkApi\Model\Adres; +use Appvise\KvkApi\Model\Link; class Eigenaar { private $rsin; + private $rechtsvorm; + private $uitgebreideRechtsvorm; + /** @var Adres[] */ private $adressen; + /** @var Link[] */ private $links; @@ -20,8 +25,8 @@ public function __construct( ?string $rsin, ?string $rechtsvorm, ?string $uitgebreideRechtsvorm, - ?array $adressen, - ?array $links + ?array $adressen, + ?array $links ) { $this->rsin = $rsin; $this->rechtsvorm = $rechtsvorm; @@ -54,4 +59,25 @@ public function getLinks(): ?array { return $this->links; } + + public function toArray(): array + { + $adressenArray = []; + foreach ($this->adressen as $adres) { + $adressenArray[] = $adres->toArray(); + } + + $linksArray = []; + foreach ($this->links as $link) { + $linksArray[] = $link->toArray(); + } + + return [ + 'rsin' => $this->rsin, + 'rechtsvorm' => $this->rechtsvorm, + 'uitgebreideRechtsvorm' => $this->uitgebreideRechtsvorm, + 'adressen' => $adressenArray, + 'links' => $linksArray, + ]; + } } diff --git a/src/Model/Company/EmbeddedContainer.php b/src/Model/Company/EmbeddedContainer.php index 724528d..2d133b6 100644 --- a/src/Model/Company/EmbeddedContainer.php +++ b/src/Model/Company/EmbeddedContainer.php @@ -6,7 +6,10 @@ class EmbeddedContainer { + /** @var Vestiging */ private $hoofdvestiging; + + /** @var Eigenaar */ private $eigenaar; public function __construct(Eigenaar $eigenaar, ?Vestiging $hoofdvestiging) @@ -24,4 +27,15 @@ public function getEigenaar(): Eigenaar { return $this->eigenaar; } + + public function toArray(): array + { + $hoofdvestigingArray = $this->hoofdvestiging ? $this->hoofdvestiging->toArray() : null; + $eigenaarArray = $this->eigenaar->toArray(); + + return [ + 'hoofdvestiging' => $hoofdvestigingArray, + 'eigenaar' => $eigenaarArray, + ]; + } } diff --git a/src/Model/Company/Handelsnaam.php b/src/Model/Company/Handelsnaam.php index 91161c7..2620f60 100644 --- a/src/Model/Company/Handelsnaam.php +++ b/src/Model/Company/Handelsnaam.php @@ -24,4 +24,12 @@ public function getVolgorde(): int { return $this->volgorde; } + + public function toArray(): array + { + return [ + 'naam' => $this->naam, + 'volgorde' => $this->volgorde, + ]; + } } diff --git a/src/Model/Company/Vestiging.php b/src/Model/Company/Vestiging.php index 724fd7e..6d521f0 100644 --- a/src/Model/Company/Vestiging.php +++ b/src/Model/Company/Vestiging.php @@ -4,48 +4,66 @@ namespace Appvise\KvkApi\Model\Company; +use Appvise\KvkApi\Model\Adres; +use Appvise\KvkApi\Model\Link; use Appvise\KvkApi\Model\MaterieleRegistratie; +use Appvise\KvkApi\Model\SbiActiviteit; use DateTime; class Vestiging { private $vestigingsnummer; + private $kvkNummer; + private $rsin; + private $indNonMailing; + private $formeleRegistratiedatum; + private $materieleRegistratie; + private $eersteHandelsnaam; + private $indHoofdvestiging; + private $indCommercieleVestiging; + private $voltijdWerkzamePersonen; + private $totaalWerkzamePersonen; + private $deeltijdWerkzamePersonen; + /** @var Adres[] */ private $adressen; + /** @var string[] */ private $websites; + /** @var SbiActiviteit[] */ private $sbiActiviteiten; + /** @var Link[] */ private $links; public function __construct( - string $kvkNummer, - string $vestigingsnummer, - ?string $rsin, - ?string $indNonMailing, - ?DateTime $formeleRegistratiedatum, + string $kvkNummer, + string $vestigingsnummer, + ?string $rsin, + ?string $indNonMailing, + ?DateTime $formeleRegistratiedatum, ?MaterieleRegistratie $materieleRegistratie, - ?string $eersteHandelsnaam, - ?string $indHoofdvestiging, - ?string $indCommercieleVestiging, - ?int $voltijdWerkzamePersonen, - ?int $deeltijdWerkzamePersonen, - ?array $adressen, - ?array $websites, - ?array $sbiActiviteiten, - ?array $links + ?string $eersteHandelsnaam, + ?string $indHoofdvestiging, + ?string $indCommercieleVestiging, + ?int $voltijdWerkzamePersonen, + ?int $deeltijdWerkzamePersonen, + ?array $adressen, + ?array $websites, + ?array $sbiActiviteiten, + ?array $links ) { $this->kvkNummer = $kvkNummer; $this->vestigingsnummer = $vestigingsnummer; @@ -143,4 +161,43 @@ public function getAdressen(): array { return $this->adressen; } + + public function toArray(): array + { + $adressenArray = []; + foreach ($this->adressen as $adres) { + $adressenArray[] = $adres->toArray(); + } + + $websitesArray = $this->websites ?? []; + + $sbiActiviteitenArray = []; + foreach ($this->sbiActiviteiten as $sbiActiviteit) { + $sbiActiviteitenArray[] = $sbiActiviteit->toArray(); + } + + $linksArray = []; + foreach ($this->links as $link) { + $linksArray[] = $link->toArray(); + } + + return [ + 'kvkNummer' => $this->kvkNummer, + 'vestigingsnummer' => $this->vestigingsnummer, + 'rsin' => $this->rsin, + 'indNonMailing' => $this->indNonMailing, + 'formeleRegistratiedatum' => $this->formeleRegistratiedatum ? $this->formeleRegistratiedatum->format('Y-m-d') : null, + 'materieleRegistratie' => $this->materieleRegistratie ? $this->materieleRegistratie->toArray() : null, + 'eersteHandelsnaam' => $this->eersteHandelsnaam, + 'indHoofdvestiging' => $this->indHoofdvestiging, + 'indCommercieleVestiging' => $this->indCommercieleVestiging, + 'voltijdWerkzamePersonen' => $this->voltijdWerkzamePersonen, + 'totaalWerkzamePersonen' => $this->totaalWerkzamePersonen, + 'deeltijdWerkzamePersonen' => $this->deeltijdWerkzamePersonen, + 'adressen' => $adressenArray, + 'websites' => $websitesArray, + 'sbiActiviteiten' => $sbiActiviteitenArray, + 'links' => $linksArray, + ]; + } } diff --git a/src/Model/Company/VestigingBasis.php b/src/Model/Company/VestigingBasis.php index e8a8cfb..c7fbc21 100644 --- a/src/Model/Company/VestigingBasis.php +++ b/src/Model/Company/VestigingBasis.php @@ -7,23 +7,30 @@ class VestigingBasis { private $kvkNummer; + private $vestigingsNummer; + private $eersteHandelsnaam; + private $indHoofdvestiging; + private $indAdresAfgeschermd; + private $indCommercieleVestiging; + private $volledigAdres; + private $links; public function __construct( - string $vestigingsNummer, + string $vestigingsNummer, ?string $kvkNummer, ?string $eersteHandelsnaam, ?string $indHoofdvestiging, ?string $indAdresAfgeschermd, ?string $indCommercieleVestiging, ?string $volledigAdres, - ?array $links + ?array $links ) { $this->vestigingsNummer = $vestigingsNummer; $this->kvkNummer = $kvkNummer; @@ -79,4 +86,25 @@ public function getKvkNumber(): string { return $this->kvkNumber; } + + public function toArray(): array + { + $linksArray = []; + if ($this->links) { + foreach ($this->links as $link) { + $linksArray[] = $link->toArray(); + } + } + + return [ + 'kvkNummer' => $this->kvkNummer, + 'vestigingsNummer' => $this->vestigingsNummer, + 'eersteHandelsnaam' => $this->eersteHandelsnaam, + 'indHoofdvestiging' => $this->indHoofdvestiging, + 'indAdresAfgeschermd' => $this->indAdresAfgeschermd, + 'indCommercieleVestiging' => $this->indCommercieleVestiging, + 'volledigAdres' => $this->volledigAdres, + 'links' => $linksArray, + ]; + } } diff --git a/src/Model/Company/VestigingFactory.php b/src/Model/Company/VestigingFactory.php index becaac7..e67923d 100644 --- a/src/Model/Company/VestigingFactory.php +++ b/src/Model/Company/VestigingFactory.php @@ -21,7 +21,7 @@ public static function fromResponse($response): ?Vestiging self::pluckString('rsin', $response), self::pluckString('indNonMailing', $response), self::pluckDate('formeleRegistratiedatum', $response), - MaterieleRegistratieFactory::fromResponse($response), + MaterieleRegistratieFactory::fromResponse($response['materieleRegistratie']), self::pluckString('eersteHandelsnaam', $response), self::pluckString('indHoofdvestiging', $response), self::pluckString('indCommercieleVestiging', $response), diff --git a/src/Model/Company/VestigingList.php b/src/Model/Company/VestigingList.php index 24b2b5c..02d2062 100644 --- a/src/Model/Company/VestigingList.php +++ b/src/Model/Company/VestigingList.php @@ -4,23 +4,30 @@ namespace Appvise\KvkApi\Model\Company; +use Appvise\KvkApi\Model\Link; + class VestigingList { private $kvkNummer; + private $aantalCommercieleVestigingen; + private $aantalNietCommercieleVestigingen; + private $totaalAantalVestigingen; + /** @var VestigingBasis[] */ private $vestigingen; + /** @var Link[] */ private $links; public function __construct( string $kvkNummer, - array $vestigingen, - ?int $aantalCommercieleVestigingen, - ?int $aantalNietCommercieleVestigingen, - ?int $totaalAantalVestigingen, + array $vestigingen, + ?int $aantalCommercieleVestigingen, + ?int $aantalNietCommercieleVestigingen, + ?int $totaalAantalVestigingen, ?array $links ) { $this->kvkNummer = $kvkNummer; @@ -60,4 +67,28 @@ public function getLinks(): ?array { return $this->links; } + + public function toArray(): array + { + $vestigingenArray = []; + foreach ($this->vestigingen as $vestiging) { + $vestigingenArray[] = $vestiging->toArray(); + } + + $linksArray = []; + if ($this->links !== null) { + foreach ($this->links as $link) { + $linksArray[] = $link->toArray(); + } + } + + return [ + 'kvkNummer' => $this->kvkNummer, + 'aantalCommercieleVestigingen' => $this->aantalCommercieleVestigingen, + 'aantalNietCommercieleVestigingen' => $this->aantalNietCommercieleVestigingen, + 'totaalAantalVestigingen' => $this->totaalAantalVestigingen, + 'vestigingen' => $vestigingenArray, + 'links' => $linksArray, + ]; + } } diff --git a/src/Model/GeoData.php b/src/Model/GeoData.php index 7ba89da..1615587 100644 --- a/src/Model/GeoData.php +++ b/src/Model/GeoData.php @@ -7,15 +7,28 @@ class GeoData { private $addresseerbaarObjectId; + private $nummerAanduidingId; + private $gpsLatitude; + private $gpsLongitude; + private $rijksdriehoekX; + private $rijksdriehoekY; + private $rijksdriehoekZ; - public function __construct(?string $addresseerbaarObjectId, ?string $nummerAanduidingId, ?float $gpsLatitude, ?float $gpsLongitude, ?float $rijksdriehoekX, ?float $rijksdriehoekY, ?float $rijksdriehoekZ) - { + public function __construct( + ?string $addresseerbaarObjectId, + ?string $nummerAanduidingId, + ?float $gpsLatitude, + ?float $gpsLongitude, + ?float $rijksdriehoekX, + ?float $rijksdriehoekY, + ?float $rijksdriehoekZ + ) { $this->addresseerbaarObjectId = $addresseerbaarObjectId; $this->nummerAanduidingId = $nummerAanduidingId; $this->gpsLatitude = $gpsLatitude; @@ -59,4 +72,17 @@ public function getRijksdriehoekZ(): ?float { return $this->rijksdriehoekZ; } + + public function toArray(): array + { + return [ + 'addresseerbaarObjectId' => $this->addresseerbaarObjectId, + 'nummerAanduidingId' => $this->nummerAanduidingId, + 'gpsLatitude' => $this->gpsLatitude, + 'gpsLongitude' => $this->gpsLongitude, + 'rijksdriehoekX' => $this->rijksdriehoekX, + 'rijksdriehoekY' => $this->rijksdriehoekY, + 'rijksdriehoekZ' => $this->rijksdriehoekZ, + ]; + } } diff --git a/src/Model/Link.php b/src/Model/Link.php index 2d7ccda..51e0093 100644 --- a/src/Model/Link.php +++ b/src/Model/Link.php @@ -7,13 +7,21 @@ class Link { private $rel; + private $href; + private $hreflang; + private $media; + private $title; + private $type; + private $deprecation; + private $profile; + private $name; public function __construct( @@ -82,4 +90,19 @@ public function getName(): ?string { return $this->name; } + + public function toArray(): array + { + return [ + 'rel' => $this->rel, + 'href' => $this->href, + 'hreflang' => $this->hreflang, + 'media' => $this->media, + 'title' => $this->title, + 'type' => $this->type, + 'deprecation' => $this->deprecation, + 'profile' => $this->profile, + 'name' => $this->name, + ]; + } } diff --git a/src/Model/MaterieleRegistratie.php b/src/Model/MaterieleRegistratie.php index 116dc32..03cdd95 100644 --- a/src/Model/MaterieleRegistratie.php +++ b/src/Model/MaterieleRegistratie.php @@ -9,6 +9,7 @@ class MaterieleRegistratie { private $datumAanvang; + private $datumEinde; public function __construct(?DateTime $datumAanvang, ?DateTime $datumEinde) @@ -26,4 +27,12 @@ public function getDatumEinde(): ?DateTime { return $this->datumEinde; } + + public function toArray(): array + { + return [ + 'datumAanvang' => $this->datumAanvang, + 'datumEinde' => $this->datumEinde, + ]; + } } diff --git a/src/Model/Resultaat.php b/src/Model/Resultaat.php index 4a04665..a04f94c 100644 --- a/src/Model/Resultaat.php +++ b/src/Model/Resultaat.php @@ -57,4 +57,16 @@ public function getPrevious(): ?string { return $this->vorige; } + + public function toArray(): array + { + return [ + 'pagina' => $this->pagina, + 'totaal' => $this->totaal, + 'aantal' => $this->aantal, + 'resultaten' => $this->resultaten, + 'volgende' => $this->volgende, + 'vorige' => $this->vorige, + ]; + } } diff --git a/src/Model/SbiActiviteit.php b/src/Model/SbiActiviteit.php index db3fb9e..1913886 100644 --- a/src/Model/SbiActiviteit.php +++ b/src/Model/SbiActiviteit.php @@ -7,7 +7,9 @@ class SbiActiviteit { private $sbiCode; + private $sbiOmschrijving; + private $indHoofdactiviteit; public function __construct(?string $sbiCode, ?string $sbiOmschrijving, ?string $indHoofdactiviteit) @@ -31,4 +33,13 @@ public function getIndHoofdactiviteit(): ?string { return $this->indHoofdactiviteit; } + + public function toArray(): array + { + return [ + 'sbiCode' => $this->sbiCode, + 'sbiOmschrijving' => $this->sbiOmschrijving, + 'indHoofdactiviteit' => $this->indHoofdactiviteit, + ]; + } } diff --git a/src/Model/Search/ResultaatItem.php b/src/Model/Search/ResultaatItem.php index 6d9b352..994958e 100644 --- a/src/Model/Search/ResultaatItem.php +++ b/src/Model/Search/ResultaatItem.php @@ -4,55 +4,84 @@ namespace Appvise\KvkApi\Model\Search; +use Appvise\KvkApi\Model\Link; + class ResultaatItem { private $kvkNummer; + private $rsin; + private $vestigingsnummer; + private $handelsnaam; + + private $adresType; + private $straatnaam; - private $plaats; + private $postcode; + + private $plaats; + private $huisnummer; + + private $huisnummerToevoeging; + private $type; + private $actief; + private $vervallenNaam; + /** @var Link[] */ private $links; public function __construct( - string $kvkNumber, + string $kvkNumber, ?string $rsin, ?string $vestigingsnummer, ?string $handelsnaam, + ?string $adresType, ?string $straatnaam, - ?string $plaats, ?string $postcode, - ?int $huisnummer, + ?string $plaats, + ?string $huisnummer, + ?string $huisnummerToevoeging, ?string $type, ?string $actief, ?string $vervallenNaam, - ?array $links = null + ?array $links = null ) { $this->kvkNummer = $kvkNumber; $this->rsin = $rsin; $this->vestigingsnummer = $vestigingsnummer; $this->handelsnaam = $handelsnaam; + $this->adresType = $adresType; $this->straatnaam = $straatnaam; $this->plaats = $plaats; $this->postcode = $postcode; $this->huisnummer = $huisnummer; + $this->huisnummerToevoeging = $huisnummerToevoeging; $this->type = $type; $this->actief = $actief; $this->vervallenNaam = $vervallenNaam; $this->links = $links; } + /** + * @deprecated use getKvkNummer() + */ public function getKvkNumber(): string { return $this->kvkNummer; } + public function getKvkNummer(): string + { + return $this->kvkNummer; + } + public function getRsin(): ?string { return $this->rsin; @@ -68,6 +97,11 @@ public function getHandelsnaam(): ?string return $this->handelsnaam; } + public function getAdresType(): ?string + { + return $this->adresType; + } + public function getStraatnaam(): ?string { return $this->straatnaam; @@ -82,6 +116,7 @@ public function getVervallenNaam(): ?string { return $this->vervallenNaam; } + public function getActief(): ?string { return $this->actief; @@ -92,18 +127,48 @@ public function getLinks(): ?array return $this->links; } + public function getPostcode(): ?string + { + return $this->postcode; + } + public function getPlaats(): ?string { return $this->plaats; } - public function getPostcode(): ?string + public function getHuisnummer(): ?string { - return $this->postcode; + return $this->huisnummer; } - public function getHuisnummer(): ?int + public function getHuisnummerToevoeging(): ?string { - return $this->huisnummer; + return $this->huisnummerToevoeging; + } + + public function toArray(): array + { + $linksArray = []; + foreach ($this->links as $link) { + $linksArray[] = $link->toArray(); + } + + return [ + 'kvkNummer' => $this->kvkNummer, + 'rsin' => $this->rsin, + 'vestigingsnummer' => $this->vestigingsnummer, + 'handelsnaam' => $this->handelsnaam, + 'adresType' => $this->adresType, + 'straatnaam' => $this->straatnaam, + 'postcode' => $this->postcode, + 'plaats' => $this->plaats, + 'huisnummer' => $this->huisnummer, + 'huisnummerToevoeging' => $this->huisnummerToevoeging, + 'type' => $this->type, + 'actief' => $this->actief, + 'vervallenNaam' => $this->vervallenNaam, + 'links' => $linksArray, + ]; } } diff --git a/src/Model/Search/ResultaatItemFactory.php b/src/Model/Search/ResultaatItemFactory.php index 190d839..ee41999 100644 --- a/src/Model/Search/ResultaatItemFactory.php +++ b/src/Model/Search/ResultaatItemFactory.php @@ -16,10 +16,12 @@ public static function fromResponse(array $response): ResultaatItem self::pluckString('rsin', $response), self::pluckString('vestigingsnummer', $response), self::pluckString('handelsnaam', $response), + self::pluckString('adresType', $response), self::pluckString('straatnaam', $response), - self::pluckString('plaats', $response), self::pluckString('postcode', $response), - self::pluckInteger('huisnummer', $response), + self::pluckString('plaats', $response), + self::pluckString('huisnummer', $response), + self::pluckString('huisnummerToevoeging', $response), self::pluckString('type', $response), self::pluckString('actief', $response), self::pluckString('vervallenNaam', $response), diff --git a/src/Model/SearchV2/Adres.php b/src/Model/SearchV2/Adres.php new file mode 100644 index 0000000..59968a2 --- /dev/null +++ b/src/Model/SearchV2/Adres.php @@ -0,0 +1,88 @@ +type = $type; + $this->straatnaam = $straatnaam; + $this->huisnummer = $huisnummer; + $this->huisletter = $huisletter; + $this->postbusnummer = $postbusnummer; + $this->postcode = $postcode; + $this->plaats = $plaats; + } + + public function getType(): ?string + { + return $this->type; + } + + public function getStraatnaam(): ?string + { + return $this->straatnaam; + } + + public function getHuisnummer(): ?string + { + return $this->huisnummer; + } + + public function getHuisletter(): ?string + { + return $this->huisletter; + } + + public function getPostbusnummer(): ?int + { + return $this->postbusnummer; + } + + public function getPostcode(): ?string + { + return $this->postcode; + } + + public function getPlaats(): ?string + { + return $this->plaats; + } + + public function toArray(): array + { + return [ + 'type' => $this->type, + 'straatnaam' => $this->straatnaam, + 'huisnummer' => $this->huisnummer, + 'huisletter' => $this->huisletter, + 'postbusnummer' => $this->postbusnummer, + 'postcode' => $this->postcode, + 'plaats' => $this->plaats, + ]; + } +} diff --git a/src/Model/SearchV2/AdresFactory.php b/src/Model/SearchV2/AdresFactory.php new file mode 100644 index 0000000..995569b --- /dev/null +++ b/src/Model/SearchV2/AdresFactory.php @@ -0,0 +1,23 @@ +kvkNummer = $kvkNumber; + $this->rsin = $rsin; + $this->vestigingsnummer = $vestigingsnummer; + $this->naam = $naam; + $this->adres = $adres; + $this->straatnaam = $straatnaam; + $this->plaats = $plaats; + $this->postcode = $postcode; + $this->huisnummer = $huisnummer; + $this->huisnummerToevoeging = $huisnummerToevoeging; + $this->type = $type; + $this->actief = $actief; + $this->vervallenNaam = $vervallenNaam; + $this->links = $links; + } + + public function getKvkNummer(): string + { + return $this->kvkNummer; + } + + public function getRsin(): ?string + { + return $this->rsin; + } + + public function getVestigingsnummer(): ?string + { + return $this->vestigingsnummer; + } + + /* + * @deprecated use getNaam() + */ + public function getHandelsnaam(): ?string + { + return $this->naam; + } + + public function getNaam(): ?string + { + return $this->naam; + } + + public function getAdres(): ?array + { + return $this->adres; + } + + public function getBinnenlandsAdres(): Adres|array + { + return $this->adres['binnenlandsAdres'] ?? []; + } + + public function getBuitenlandsAdres(): Adres|array + { + return $this->adres['buitenlandsAdres'] ?? []; + } + + public function getStraatnaam(): ?string + { + return $this->straatnaam; + } + + public function getType(): ?string + { + return $this->type; + } + + public function getVervallenNaam(): ?string + { + return $this->vervallenNaam; + } + + public function getActief(): ?string + { + return $this->actief; + } + + public function getLinks(): ?array + { + return $this->links; + } + + public function getPostcode(): ?string + { + return $this->postcode; + } + + public function getPlaats(): ?string + { + return $this->plaats; + } + + public function getHuisnummer(): ?string + { + return $this->huisnummer; + } + + public function getHuisnummerToevoeging(): ?string + { + return $this->huisnummerToevoeging; + } + + public function toArray(): array + { + $linksArray = []; + foreach ($this->links as $link) { + $linksArray[] = $link->toArray(); + } + + $adresArray = []; + foreach ($this->adres as $adres) { + $adresArray[] = $adres->toArray(); + } + + return [ + 'kvkNummer' => $this->kvkNummer, + 'rsin' => $this->rsin, + 'vestigingsnummer' => $this->vestigingsnummer, + 'naam' => $this->naam, + 'adres' => $adresArray, + 'straatnaam' => $this->straatnaam, + 'postcode' => $this->postcode, + 'plaats' => $this->plaats, + 'huisnummer' => $this->huisnummer, + 'huisnummerToevoeging' => $this->huisnummerToevoeging, + 'type' => $this->type, + 'actief' => $this->actief, + 'vervallenNaam' => $this->vervallenNaam, + 'links' => $linksArray, + ]; + } +} diff --git a/src/Model/SearchV2/ResultaatItemFactory.php b/src/Model/SearchV2/ResultaatItemFactory.php new file mode 100644 index 0000000..496b856 --- /dev/null +++ b/src/Model/SearchV2/ResultaatItemFactory.php @@ -0,0 +1,51 @@ + $adres) { + $items[$type] = AdresFactory::fromResponse($adres); + } + + return $items; + } +} diff --git a/tests/Integration/ClientTest.php b/tests/Integration/ClientTest.php index f357e3c..6d7b9ea 100644 --- a/tests/Integration/ClientTest.php +++ b/tests/Integration/ClientTest.php @@ -5,11 +5,11 @@ use Appvise\KvkApi\Exception\NotFoundException; use Appvise\KvkApi\Http\ProfileQuery; use Appvise\KvkApi\Http\SearchQuery; +use Appvise\KvkApi\Http\SearchQueryV2; use Appvise\KvkApi\Http\VestigingsQuery; use Appvise\KvkApi\KvkClientFactory; use Appvise\KvkApi\Model\Company\BasisProfiel; use Appvise\KvkApi\Model\Company\Vestiging; -use Appvise\KvkApi\Model\Search\ResultaatItem; use PHPUnit\Framework\TestCase; class ClientTest extends TestCase @@ -17,29 +17,47 @@ class ClientTest extends TestCase /** KvkClient $client */ private $client; - private const ENVIRONMENT = 'test'; - private const USER_KEY = 'NOT_AN_ACTUAL_API_KEY'; + private const ENVIRONMENT = 'test'; + private const USER_KEY = 'NOT_AN_ACTUAL_API_KEY'; private const ROOT_CERTIFICATE = '../../cert/private_chain.pem'; - public function setUp() + public function setUp(): void { $this->client = KvkClientFactory::create(self::USER_KEY, self::ENVIRONMENT, self::ROOT_CERTIFICATE); } + /** + * @test + * @dataProvider getKvkNumbers + **/ + public function search(string $kvkNumber) + { + $query = new SearchQuery(); + $query->setKvkNumber($kvkNumber); + + $resultaten = $this->client->search($query); + + foreach ($resultaten->getResultaten() as $searchResult) { + $this->assertInstanceOf(ResultaatItem::class, $searchResult); + $this->assertEquals($kvkNumber, $searchResult->getKvkNumber()); + $this->assertEquals($kvkNumber, $searchResult->getKvkNummer()); + } + } + /** * @test * @dataProvider getKvkNumbers **/ - public function search(string $kvkNumber) + public function searchV2(string $kvkNumber) { - $query = new SearchQuery(); - $query->setKvkNumber($kvkNumber); + $query = new SearchQueryV2(); + $query->setKvkNummer($kvkNumber); - $resultaten = $this->client->search($query); + $resultaten = $this->client->searchV2($query); foreach ($resultaten->getResultaten() as $searchResult) { - $this->assertInstanceOf(ResultaatItem::class, $searchResult); - $this->assertEquals($kvkNumber, $searchResult->getKvkNumber()); + $this->assertInstanceOf(\Appvise\KvkApi\Model\SearchV2\ResultaatItem::class, $searchResult); + $this->assertEquals($kvkNumber, $searchResult->getKvkNummer()); } } @@ -97,24 +115,25 @@ public function search_non_existing_vestigings_profielen_should_throw_exception( $this->client->getVestigingsProfiel($query); } + /** * return string[][] */ public function getKvkNumbers(): array { return [ - 'Eenmanszaak' => [69599084], - 'NV' => [68727720, 90004760], - 'BV' => [68750110, 90001354], - 'Stichting' => [69599068, 90000102], - 'VoF' => [69599076, 90005414], - 'Coöperatie' => [55344526], - 'Kerkgenootschap' => [90002520], - 'Onderlinge Waarborg Maatschappij' => [90002490], - 'Vereniging van Eigenaars' => [90000749], - 'Maatschap' => [90001745], - 'Commanditaire Vennootschap' => [90003942], - 'Overige Privaatrechtelijke Rechtspersoon' => [55505201], + 'Eenmanszaak' => ['69599084'], + 'NV' => ['68727720', '90004760'], + 'BV' => ['68750110', '90001354'], + 'Stichting' => ['69599068', '90000102'], + 'VoF' => ['69599076', '90005414'], + 'Coöperatie' => ['55344526'], + 'Kerkgenootschap' => ['90002520'], + 'Onderlinge Waarborg Maatschappij' => ['90002490'], + 'Vereniging van Eigenaars' => ['90000749'], + 'Maatschap' => ['90001745'], + 'Commanditaire Vennootschap' => ['90003942'], + 'Overige Privaatrechtelijke Rechtspersoon' => ['55505201'], ]; } @@ -124,8 +143,8 @@ public function getKvkNumbers(): array public function getNonExistingKvkNumbers(): array { return [ - 'Foutmelding' => [90004973], - 'Foutmelding' => [90002903], + 'Foutmelding' => ['90004973'], + 'Foutmelding' => ['90002903'], ]; } @@ -138,7 +157,7 @@ public function getVestigingsNumbers(): array 'Eenmanszaak' => ['000038509504', '000038509520', '990000160639', '990000406685', '990000528380', '990000592442', '990000958857'], 'BV' => ['000037178598', '000037178601', '000037178602', '990000294664', '990000541921'], 'VOF' => ['000038509474', '000038509490', '990000090842', '990000216645', '990000821206', '990000865418'], - 'Coöperatie' => ['000037178605'], + //'Coöperatie' => ['000037178605'], 'Onderlinge Waarborg Maatschappij' => ['990000246858', '990000473049'], 'Maatschap' => ['990000637800'], 'Commanditaire Vennootschap' => ['990000008288', '990000246530', '990000768218', '990000852070'],