1 · Se brancher
Deux appels suffisent pour savoir où l'on met les pieds : /ping dit si la
clé est bonne, /espace dit ce que cet espace ouvre à cette clé. Le résultat ci-dessous est
obtenu à l'instant, en direct.
GET /ping 200
- Clé
- Integration OKLEON
- Arrivée par
integration_okleon- Portées
- biens:read · locataires:read · proprietaires:read · occupations:read · artisans:read · sinistres:read · types:read · permis:read
La clé elle-même n'est jamais affichée : elle ne quitte pas le serveur.
GET /espace 200
- Espace
- Agence Test Immobilier bac à sable
- Collections lisibles
- artisans · biens · devis · locataires · occupations · permis · proprietaires · sinistres · types
- Quota
- 120 appels / minute · 20 000 / jour
- Écriture
- ouverte
- Statut d'un dossier
- déduit — il ne se pose pas
À retenir
- Une clé, un espace. L'agence est dans l'adresse : chaque agence a son hôte, et c'est l'hôte qui choisit la base. Intégrer trois agences, c'est trois couples (adresse, clé).
- Lisez
/espaceavant de coder quoi que ce soit de générique. Toutes les agences n'ont ni les mêmes options ni les mêmes collections. - Branchez-vous sur le
coded'une erreur, jamais sur son message.
Le code qui a fait ces appels — src/ClientOkleon.php
/**
* GET sur une route de l'API. Rend le JSON décodé.
* Lève une ErreurOkleon si l'API répond une erreur.
*/
public function get(string $route, array $params = []): array
{
$url = rtrim($this->base, '/') . $route;
if ($params) $url .= '?' . http_build_query($params);
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 15,
CURLOPT_HTTPHEADER => [
// X-Api-Key plutôt qu'Authorization : certains hébergements PHP
// retirent l'en-tête Authorization en route. X-Api-Key ne dépend
// d'aucun réglage serveur — c'est le choix qui marche partout.
'X-Api-Key: ' . $this->cle,
'Accept: application/json',
'User-Agent: okleon-demo-integration/1.0',
],
]);
$corps = curl_exec($ch);
$http = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE);
$reseau = curl_error($ch);
$this->appels++;
if ($corps === false || $reseau !== '') {
throw new ErreurOkleon('reseau', 'Réseau : ' . $reseau, 0);
}
$json = json_decode((string)$corps, true);
// Toutes les erreurs de l'API ont la même forme : { "error": { "code", "message" } }.
// ⭐ Se brancher sur le CODE, jamais sur le message : le code est un contrat,
// le message peut être reformulé.
if ($http >= 400) {
$code = (string)($json['error']['code'] ?? 'http_' . $http);
$msg = (string)($json['error']['message'] ?? 'Erreur HTTP ' . $http);
throw new ErreurOkleon($code, $msg, $http);
}
if (!is_array($json)) {
throw new ErreurOkleon('reponse_illisible', 'Réponse qui n\'est pas du JSON.', $http);
}
return $json;
}