OAuth 2.0 : POST /edi/api/token
Les API REST JSON PMS utilisent OAuth 2.0 avec le flux Client Credentials pour sécuriser et authentifier les accès.
Ce mode d'authentification est destiné aux échanges serveur à serveur, entre applications.
Dans PMS Outils > API - Clients OAuth, créez les identifiants client_id et client_secret pour chaque client, c'est-à-dire chaque application utilisatrice de l'API (votre ERP par exemple) :
- client_id : identifiant du client OAuth
- client_secret : mot de passe associé au client OAuth
Ces identifiants servent uniquement à obtenir dynamiquement par une requête API un access_token à durée de vie limitée, lequel vous sert ensuite à vous connecter aux différents endpoints protégés de l'API PMS.
Exemple de requête d'obtention d'un access_token
$client_id = "{client-id}";
$client_secret = "{client-secret}";
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => "https://{account-name}.pms1.net/edi/api/token",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query(array(
'grant_type' => 'client_credentials'
)),
CURLOPT_HTTPHEADER => array(
'Accept: application/json',
'Content-Type: application/x-www-form-urlencoded',
'Authorization: Basic ' . base64_encode($client_id . ':' . $client_secret)
)
));
$reply = curl_exec ($ch);
curl_close($ch);
$json = json_decode($reply);
- grant_type : doit obligatoirement valoir
client_credentials - Authorization : authentification HTTP Basic contenant
client_id:client_secret
Exemple de réponse
{
"access_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"token_type": "Bearer",
"expires_in": 3600
}
- access_token : token à utiliser pour les appels suivants
- token_type : type de token, actuellement
Bearer - expires_in : durée de validité du token en secondes
Utilisation du token
CURLOPT_HTTPHEADER => array(
'Accept: application/json',
'Authorization: Bearer ' . $json->access_token
)
Le token doit être transmis dans l'en-tête HTTP Authorization pour chaque appel à une API protégée.
Le token est valable pendant 3600 secondes. Une fois expiré, il suffit d'en demander un nouveau avec les mêmes identifiants.
Exemple d'erreur
{
"error": "invalid_client",
"error_description": "Invalid client credentials."
}