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."
}