API plaque immatriculation PHP : exemple cURL serveur
Appelez l’API plaque depuis PHP avec cURL, variables d’environnement, délais réseau et décodage JSON contrôlé.
Publié le
En PHP, l’identification d’un véhicule par plaque peut être intégrée dans une fonction serveur utilisant l’extension cURL. Le résultat est un tableau de données véhicule que votre application transforme ensuite en champs utiles au formulaire.
Préparer PHP et la configuration
Utilisez PHP 8 avec l’extension cURL activée. Définissez les trois variables dans l’environnement du processus PHP ; un fichier .env n’est pas chargé automatiquement par PHP natif. La base du catalogue se termine par .p.rapidapi.co et reste à confirmer dans RapidAPI, avec la valeur du host.
Requête et traitement des erreurs
# Configuration serveur uniquement. Confirmer URL et hôte dans RapidAPI.
RAPIDAPI_KEY=YOUR_RAPIDAPI_KEY
API_PLAQUE_BASE_URL=https://api-plaque-immatriculation-france-donnees-vehicule-siv.p.rapidapi.co
RAPIDAPI_HOST=api-plaque-immatriculation-france-donnees-vehicule-siv.p.rapidapi.co<?php
function lookupVehicle(string $plaque): array
{
$key = getenv('RAPIDAPI_KEY');
$base = getenv('API_PLAQUE_BASE_URL');
$host = getenv('RAPIDAPI_HOST');
if (!$key || $key === 'YOUR_RAPIDAPI_KEY' || !$base || !$host) {
throw new RuntimeException('Configuration RapidAPI manquante');
}
if (trim($plaque) === '') throw new InvalidArgumentException('Plaque requise');
$url = rtrim($base, '/') . '/fr?' . http_build_query(['plaque' => trim($plaque)]);
$curl = curl_init($url);
if ($curl === false) throw new RuntimeException('Initialisation HTTP impossible');
try {
curl_setopt_array($curl, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_CONNECTTIMEOUT => 5,
CURLOPT_TIMEOUT => 10,
CURLOPT_HTTPHEADER => [
'x-rapidapi-key: ' . $key,
'x-rapidapi-host: ' . $host,
'Content-Type: application/json',
],
]);
$raw = curl_exec($curl);
if ($raw === false) throw new RuntimeException('Connexion au service impossible');
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($status < 200 || $status >= 300) throw new RuntimeException('HTTP ' . $status);
$body = json_decode($raw, true, 512, JSON_THROW_ON_ERROR);
if (!is_array($body) || ($body['error'] ?? null) !== false || !is_array($body['data'] ?? null)) {
throw new RuntimeException('Réponse véhicule inexploitable');
}
return $body['data'];
} finally {
curl_close($curl);
}
}
try {
$vehicle = lookupVehicle('FH034DD');
echo json_encode(['marque' => $vehicle['AWN_marque'] ?? null], JSON_THROW_ON_ERROR);
} catch (Throwable $error) {
// Statut de VOTRE application, pas un code d'erreur documenté du fournisseur.
http_response_code(502);
echo json_encode(['message' => 'Identification indisponible']);
}Le délai de connexion est distinct de la durée totale de l’appel. Une erreur réseau, un statut HTTP hors de la plage de succès ou un JSON invalide empêche l’utilisation des données. Le code renvoie alors un message générique depuis votre application ; son statut 502 est un choix applicatif, pas une description d’une erreur fournisseur.
Adapter à votre application
Appelez cette fonction derrière une route qui contrôle l’accès et limite la fréquence des demandes. Affichez uniquement les champs nécessaires ; échappez les valeurs si vous les placez dans du HTML. Testez votre traitement avec des réponses simulées avant d’utiliser un quota réel.
La documentation des paramètres précise l’entrée publiée. Consultez la référence des erreurs et les données disponibles avant de rendre un champ obligatoire. Pour un projet Laravel, utilisez le service Laravel dédié.
Référence technique : options cURL de PHP.