Exemples d'utilisation de l'API
Révision datée du 19 octobre 2016 à 13:39 par Mschmit52a93 (discussion | contributions) (→Appels API)
he:דוגמאות לשימוש ה-API ro:Exemple de utilizare a API ru:Примеры использования API pl:Przykłady użycia interfejsu API ja:API を使用しての例 ar:أمثلة لاستخدام API zh:使用该 API 的示例 de:Beispiele für die Verwendung der API nl:Voorbeelden van het gebruik van de API it:Esempi di utilizzo dell'API pt:Exemplos de como usar a API es:Ejemplos de uso de la API en:Examples of using the API
Introduction
Comment utiliser l'API à travers quelques exemples concrets et fonctionnels.
Fonctions pour les exemples
// Chemin local vers la clé publique téléchargée sur https://api.ikoula.com/downloads/Ikoula.API.RSAKeyPub.pem
define('API_PUB_KEY_PATH', dirname(__FILE__) . '/Ikoula.API.RSAKeyPub.pem');
// Fonction de chiffrement du mot de passe via la clé publique Ikoula
function opensslEncryptPublic($password)
{
// Vérification de la présence de la clé publique
if(file_exists(API_PUB_KEY_PATH))
{
if(!empty($password))
{
// on récupère la clé public
$publicKey = openssl_pkey_get_public('file://'.realpath(API_PUB_KEY_PATH));
// S'il n'y as pas eu d'erreurs lors de la récupération de la clé publique, on continue
if ($publicKey !== FALSE)
{
// Si chiffrement clé publique OK
if(openssl_public_encrypt($password, $crypted, $publicKey) === TRUE)
{
// Renvoie du mot de passe crypté
return $crypted;
}
else
{
return NULL;
}
}
else
return NULL;
}
else
return NULL;
}
else
{
echo("Erreur - la clé publique n'est pas présente.\n");
return NULL;
}
}
// Fontction de création de la signature en fonction des paramètres présents
function createSignature($params=array())
{
$signature = null;
// Si il y a au moins un paramètre
if (count($params) > 0)
{
//debug('create signature');
//debug($params);
// Triage des paramètres dans le sens croissant
ksort($params);
// Encodage des paramètres
$query = http_build_query($params);
// Encodage des signes "plus "+"
$query = str_replace("+", "%20", $query);
// Transformation de la chaîne de caractères en minuscule
$query = strtolower($query);
$public_key = "";
// Si le fichier existe, on va récupérer la clé
if (file_exists(API_PUB_KEY_PATH))
{
$public_key = trim(
str_replace(
array("\n", '-----BEGIN PUBLIC KEY-----','-----END PUBLIC KEY-----'),
array('', '', ''),
file_get_contents(API_PUB_KEY_PATH)
)
);
}
// Hashage des paramètres
$hash = hash_hmac("SHA1", $query, $public_key, true);
// Encodage en base64
$signature = base64_encode($hash);
}
return $signature;
}
// Fonction facilitant l'envoie des requêtes vers l'API Ikoula
function send_request ($rest, $url_param, $params=array())
{
// initialisation de CURL
$ch = curl_init();
if($ch)
{
// Si on a des info on utilise l'api REST sinon on utilise l'api standard (WebService)
if($rest)
$url = "https://api.ikoula.com/rest/" . $url_param;
else
$url = "https://api.ikoula.com/?r=" . $url_param;
// si on est en REST on rajoute le type d'appel (POST,DELETE,PUT,GET,...) sinon on passe en POST
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, ($rest)?$rest:"POST");
// Si il y a des paramètres on les rajoute dans la requête
if(is_array($params) && count($params) > 0)
{
$params_str = http_build_query($params);
}
if($rest=='POST')
{
// on rentre le nom de paramètre présent dans la requête
curl_setopt($ch,CURLOPT_POST, true);
curl_setopt($ch,CURLOPT_POSTFIELDS, $params_str);
}
else
{
$url .= (strpos($url,'?') === false ? '?' : '&').$params_str;
}
// On ajoute l'url
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
// on vire les en-tête HTTP pour avoir directement le retour
curl_setopt($ch, CURLOPT_HEADER, false);
// exécution de la requête
$data = curl_exec($ch);
// fermeture de l'objet
curl_close($ch);
// retourne la réponse
return($data);
}
return null;
}
Appels API
// Login
$login = 'mail@test.com';
// On crypte le mot de passe
$crypted_password = base64_encode(opensslEncryptPublic('MOT_DE_PASSE_A_CRYPTER'));
// Liste des VM - retour en JSON
// Liste des paramètres que l'on souhaite envoyer à l'API (pour générer la signature)
$parameters = array('login' => $login, 'crypted_password' => $crypted_password, 'format' => 'json');
// On génère la signature
$signature = createSignature($parameters);
// On ajoute la signature dans les paramètres à envoyer lors de l'appel à l'API
$parameters['signature'] = $signature;
// On fait l'appel API
$data = send_request(false,'wsflex/vmlist',$parameters);
print_r($data); //appel WebService
$data2 = send_request('GET','vm/list',$parameters);
print_r($data2); //appel REST
// Informations d'une VM - retour en XML
//liste des paramètres que l'on souhaite envoyer à l'API (pour générer la signature)
$parameters = array('login' => $login, 'crypted_password' => $crypted_password, 'format' => 'xml', 'subscr_id' => 12345);
//on génère la signature
$signature = createSignature($parameters);
//on ajoute la signature dans les paramètres à envoyer lors de l'appel à l'API
$parameters['signature'] = $signature;
//on fait l'appel API
$data = send_request(false,'wsflex/vminfo',$parameters);
print_r($data); //appel WebService
$data2 = send_request('GET','vm/'.$parameters['subscr_id'],$parameters);
print_r($data2); //appel REST
// Information sur une prestation Exchange
// Liste des paramètres que l'on souhaite envoyer à l'API (pour générer la signature)
$parameters = array('login' => $login, 'crypted_password' => $crypted_password, 'format' => 'json', 'subscr_id' => 12345);
// On génère la signature
$signature = createSignature($parameters);
// On ajoute la signature dans les paramètres à envoyer lors de l'appel à l'API
$parameters['signature'] = $signature;
// On fait l'appel API
$data = send_request(false,'wsexch/getschemasubscrexchange',$parameters);
print_r($data); //appel WebService
$data2 = send_request('GET','exch/schemasubscrexchange/'.$parameters['subscr_id'],$parameters);
print_r($data2); //appel REST
// Ajouter une BAL Exchange
// Liste des paramètres que l'on souhaite envoyer à l'API (pour générer la signature)
$parameters = array('login' => $login, 'crypted_password' => $crypted_password, 'format' => 'json', 'email_bal' => 'new_bal@domain.tld', 'orga_id' => 'orga_id', 'display_name' => 'Name for Bal', 'mail_send_installation' => 'emailto_reveive_info@domain.tld', 'password_bal' => 'PASSWORD_BAL');
// On génère la signature
$signature = createSignature($parameters);
// On ajoute la signature dans les paramètres à envoyer lors de l'appel à l'API
$parameters['signature'] = $signature;
// On fait l'appel API
$data = send_request(false,'wsexch/addbalexchange',$parameters);
print_r($data); //appel WebService
$data2 = send_request('POST','exch/addbalexchange/'.$parameters['email_bal'].'/'.$parameters['password_bal'].'/'.urlencode($parameters['display_name']).'/'.$parameters['orga_id'], $parameters);
print_r($data2); //appel REST
// Changer le password d'une BAL Exchange
// Liste des paramètres que l'on souhaite envoyer à l'API (pour générer la signature)
$parameters = array('login' => $login, 'crypted_password' => $crypted_password, 'format' => 'json', 'email_bal' => 'sousclient4@orga31.ex10.biz', 'password_bal' => 'r7ttlJOKYQZd');
// On génère la signature
$signature = createSignature($parameters);
// On ajoute la signature dans les paramètres à envoyer lors de l'appel à l'API
$parameters['signature'] = $signature;
// On fait l'appel API
$data = send_request(false,'wsexch/ChangeExchangePassword',$parameters);
print_r($data); //appel WebService
$data2 = send_request('POST','exch/changeexchangepassword/'.$parameters['email_bal'].'/'.$parameters['password_bal'],$parameters);
print_r($data2); //appel REST
// Récupérer les prestations IKIC du compte
// Liste des paramètres que l'on souhaite envoyer à l'API (pour générer la signature)
$parameters = array('login' => $login, 'crypted_password' => $crypted_password, 'format' => 'json');
// On génère la signature
$signature = createSignature($parameters);
// On ajoute la signature dans les paramètres à envoyer lors de l'appel à l'API
$parameters['signature'] = $signature;
// On fait l'appel API
$data = send_request(false,'wsikic/GetListIkic',$parameters);
print_r($data); //appel WebService
$data2 = send_request('GET','ikic/list/',$parameters);
print_r($data2); //appel REST
// Récupérer les statistiques d'une prestation
// Liste des paramètres que l'on souhaite envoyer à l'API (pour générer la signature)
$parameters = array('login' => $login, 'crypted_password' => $crypted_password, 'format' => 'json', 'subscr_id' => 12345);
// On génère la signature
$signature = createSignature($parameters);
// On ajoute la signature dans les paramètres à envoyer lors de l'appel à l'API
$parameters['signature'] = $signature;
// On fait l'appel API
$data = send_request(false,'wsikic/datastats',$parameters);
print_r($data); //appel WebService
$data2 = send_request('GET','ikic/datastats/'.$parameters['subscr_id'],$parameters);
print_r($data2); //appel REST
Erreurs usuelles
- Permission Denied
- Signifie que l'utilisateur utilisé dans l'API n'a pas le droit d'accéder à l'information demandée ou d'effectuer l'action souhaitée.
- Unable to decrypt password
- Signifie que le paramètre crypted_password a été mal crypté ou corrompu.
- Invalid credentials
- Signifie que l'authentification a échoué et que l'utilisateur n'est donc pas reconnu.
- Invalid or missing signature
- Signifie que la signature n'est pas présente dans les paramètres reçus par l'API, ou que celle-ci est invalide.
D'autres remontées d'erreurs sont possibles mais seront contextuelles en fonction de la fonctionnalité souhaitée.
Cet article vous a semblé utile ?
0
Activer l'actualisation automatique des commentaires