entreprise-page / api-client
Client PHP (7.4+) de l'API entreprise.page, basé sur PSR-18 et PSR-17
v1.0.1
2026-11-03 09:24 UTC
Requires
- php: >=7.4
- ext-json: *
- php-http/discovery: ^1.19
- psr/http-client: ^1.0
- psr/http-client-implementation: ^1.0
- psr/http-factory: ^1.0
- psr/http-factory-implementation: ^1.0
- psr/http-message: ^1.1 || ^2.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.95
- nyholm/psr7: ^1.8
- phpstan/phpstan: ^2.1
- phpunit/phpunit: ^9.6 || ^11.5
- symfony/http-client: ^5.4 || ^6.4 || ^7.4
Suggests
- symfony/http-client: Implémentation PSR-18 recommandée dans une application Symfony
Provides
None
Conflicts
None
Replaces
None
This package is not auto-updated.
Last update: 2026-11-04 08:04:43 UTC
README
Client PHP de l'API entreprise.page, construit à partir du swagger de l'API (api/docs/swagger.json).
- PHP 7.4 ou plus (testé de 7.4 à 8.5).
- Client HTTP au choix : n'importe quelle implémentation PSR-18 (Symfony HttpClient, Guzzle…) et une fabrique de requêtes PSR-17.
- Réponses hydratées dans des objets typés (
EntreprisePage\ApiClient\Model). PHP 7.4 n'ayant pas de propriétésreadonly, leurs propriétés publiques sont marquées@readonly: PHPStan et Psalm signalent toute modification.
Installation
composer require entreprise-page/api-client symfony/http-client nyholm/psr7
N'importe quel couple PSR-18 / PSR-17 convient à la place de symfony/http-client et nyholm/psr7.
Utilisation
use EntreprisePage\ApiClient\Client; use EntreprisePage\ApiClient\Query\RechercheEntrepriseQuery; // Le client HTTP et la fabrique de requêtes sont découverts automatiquement s'ils ne sont pas fournis. $client = new Client('votre-cle-api'); $entreprise = $client->entreprises()->get('443061841'); echo $entreprise->denominationSociale; $codes = array_map( static fn ($activite) => $activite->code, $client->activites()->search('plombier')->resultats, ); // Les critères sont immuables : chaque with…() renvoie une copie. $resultats = $client->entreprises()->search( RechercheEntrepriseQuery::create('*') ->withActivites($codes) ->withActif(true) ->withZone(45.7672724, 4.8340594, 10) ->withParPage(50) );
| Méthode | Endpoint | Clé d'API |
|---|---|---|
entreprises()->get($siren) |
GET /organisation/entreprise/{siren} |
oui |
entreprises()->search($query) |
GET /organisation/recherche |
oui |
entreprises()->suggest($query, $limit) |
GET /organisation/suggestion |
non |
etablissements()->get($siret) |
GET /organisation/etablissement/{siret} |
oui |
etablissements()->listBySiren($siren, $filtres) |
GET /organisation/entreprise/{siren}/etablissement |
oui |
annonces()->listBySiren($siren) |
GET /organisation/entreprise/{siren}/annonce |
oui |
activites()->list() / get($code) |
GET /dictionnaire/activite[/{code}] |
non |
activites()->search($query) |
GET /dictionnaire/recherche/activite |
oui |
conventionsCollectives()->list() / get($idcc) |
GET /dictionnaire/convention-collective[/{code}] |
non |
formesJuridiques()->list() / get($code) |
GET /dictionnaire/forme-juridique[/{code}] |
non |
compte()->quota() |
GET /quota |
oui |
Erreurs
Toutes les exceptions implémentent EntreprisePage\ApiClient\Exception\ExceptionInterface.
| Exception | Cas |
|---|---|
BadRequestException, UnauthorizedException, NotFoundException, TooManyRequestsException, ServerException |
statut HTTP 400, 401/403, 404, 429, 5xx ; toutes étendent ApiException, qui donne accès à la réponse PSR-7 |
TransportException |
aucune réponse reçue (réseau, timeout) |
UnexpectedResponseException |
réponse qui ne respecte pas le contrat (JSON invalide, champ manquant ou mal typé) |
InvalidArgumentException |
critères de recherche invalides, détectés avant l'envoi |
Intégration Symfony
Le constructeur ne prend que des interfaces PSR : le client se déclare comme un service ordinaire, avec le client HTTP du framework (qui peut être décoré pour le cache, les retries ou les logs).
# config/services.yaml services: entreprise_page.http_client: class: Symfony\Component\HttpClient\Psr18Client arguments: ['@http_client'] EntreprisePage\ApiClient\Client: arguments: $apiKey: '%env(ENTREPRISE_PAGE_API_KEY)%' $httpClient: '@entreprise_page.http_client' $requestFactory: '@entreprise_page.http_client'