Différences entre versions de « Exemples d'utilisation de l'API »

De Ikoula Wiki
Jump to navigation Jump to search
 
(2 versions intermédiaires par 2 utilisateurs non affichées)
Ligne 14 : Ligne 14 :
 
<span data-link_translate_en_title="Examples of using the API"  data-link_translate_en_url="Examples+of+using+the+API"></span>[[:en:Examples of using the API]][[en:Examples of using the API]]
 
<span data-link_translate_en_title="Examples of using the API"  data-link_translate_en_url="Examples+of+using+the+API"></span>[[:en:Examples of using the API]][[en:Examples of using the API]]
  
−
==Introduction==
+
#REDIRECT [[Comment_utiliser_l'API_d’Ikoula]]
−
Comment utiliser l'API à travers quelques exemples concrets et fonctionnels.
 
−
 
 
−
==Fonctions pour les exemples==
 
−
<syntaxhighlight lang="php">
 
−
// 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;
 
−
}
 
−
</syntaxhighlight>
 
−
 
 
−
==Appels API==
 
−
<syntaxhighlight lang="php">
 
−
// 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
 
−
 
 
−
// Récupération des plateformes
 
−
$parameters = array('login' => $login, 'crypted_password' => $crypted_password, 'format' => 'json');
 
−
$signature = createSignature($parameters);
 
−
$parameters['signature'] = $signature;
 
−
$data = send_request(false,'wsplatform/GetPlatformList',$parameters);
 
−
$data2 = send_request('GET','platform/list/',$parameters);
 
−
print_r($data); //appel WebService
 
−
print_r($data2); //appel REST
 
−
 
 
−
// Récupération des webscenarios
 
−
$parameters = array('login' => $login, 'crypted_password' => $crypted_password, 'format' => 'json', 'platform_id' => 000);
 
−
$signature = createSignature($parameters);
 
−
$parameters['signature'] = $signature;
 
−
$data = send_request(false,'wsplatform/GetPlatformWebscenarios',$parameters);
 
−
$data2 = send_request('GET','platform/webscenarios/'.$parameters['platform_id'],$parameters);
 
−
print_r($data); //appel WebService
 
−
print_r($data2); //appel REST
 
−
 
 
−
// Récupération des détails d'une plateforme
 
−
$parameters = array('login' => $login, 'crypted_password' => $crypted_password, 'format' => 'json', 'platform_id' => 000);
 
−
$signature = createSignature($parameters);
 
−
$parameters['signature'] = $signature;
 
−
$data = send_request(false,'wsplatform/GetPlatformDetails',$parameters);
 
−
$data2 = send_request('GET','platform/details/'.$parameters['platform_id'],$parameters);
 
−
 
 
−
// Récupération des prestations R1Soft
 
−
$parameters = array('login' => $login, 'crypted_password' => $crypted_password, 'format' => 'json');
 
−
$signature = createSignature($parameters);
 
−
$parameters['signature'] = $signature;
 
−
$data = send_request(false,'wsr1soft/GetR1softList',$parameters);
 
−
$data2 = send_request('GET','r1soft/list/',$parameters);
 
−
 
 
−
// Récupération des détails d'une prestation R1Soft
 
−
$parameters = array('login' => $login, 'crypted_password' => $crypted_password, 'format' => 'json', 'subscr_id' => 9999999);
 
−
$signature = createSignature($parameters);
 
−
$parameters['signature'] = $signature;
 
−
$data = send_request(false,'wsr1soft/GetR1softSubscr',$parameters);
 
−
$data2 = send_request('GET','r1soft/details/'.$parameters['subscr_id'],$parameters);
 
−
 
 
−
// Récupération des prestations SSL
 
−
$parameters = array('login' => $login, 'crypted_password' => $crypted_password, 'format' => 'json');
 
−
$signature = createSignature($parameters);
 
−
$parameters['signature'] = $signature;
 
−
$data = send_request(false,'wsssl/GetSslList',$parameters);
 
−
$data2 = send_request('GET','ssl/list/',$parameters);
 
−
 
 
−
// Récupération des détails d'une prestation SSL
 
−
$parameters = array('login' => $login, 'crypted_password' => $crypted_password, 'format' => 'json', 'subscr_id' => 9999999);
 
−
$signature = createSignature($parameters);
 
−
$parameters['signature'] = $signature;
 
−
$data = send_request(false,'wsssl/GetSslSubscr',$parameters);
 
−
$data2 = send_request('GET','ssl/details/'.$parameters['subscr_id'],$parameters);
 
−
 
 
−
// Récupération des prestations HEB
 
−
$parameters = array('login' => $login, 'crypted_password' => $crypted_password, 'format' => 'json');
 
−
$signature = createSignature($parameters);
 
−
$parameters['signature'] = $signature;
 
−
$data = send_request(false,'wsheb/GetHebList',$parameters);
 
−
$data2 = send_request('GET','heb/list/',$parameters);
 
−
 
 
−
// Récupération des détails d'une prestation HEB
 
−
$parameters = array('login' => $login, 'crypted_password' => $crypted_password, 'format' => 'json', 'subscr_id' => 9999999);
 
−
$signature = createSignature($parameters);
 
−
$parameters['signature'] = $signature;
 
−
$data = send_request(false,'wsheb/GetHebSubscr',$parameters);
 
−
$data2 = send_request('GET','heb/details/'.$parameters['subscr_id'],$parameters);
 
−
 
 
−
// Récupération des prestations NDD
 
−
$parameters = array('login' => $login, 'crypted_password' => $crypted_password, 'format' => 'json');
 
−
$signature = createSignature($parameters);
 
−
$parameters['signature'] = $signature;
 
−
$data = send_request(false,'wsndd/GetNddList',$parameters);
 
−
$data2 = send_request('GET','ndd/list/',$parameters);
 
−
 
 
−
// Récupération des détails d'une prestation NDD
 
−
$parameters = array('login' => $login, 'crypted_password' => $crypted_password, 'format' => 'json', 'subscr_id' => 9999999);
 
−
$signature = createSignature($parameters);
 
−
$parameters['signature'] = $signature;
 
−
$data = send_request(false,'wsndd/GetNddSubscr',$parameters);
 
−
$data2 = send_request('GET','ndd/details/'.$parameters['subscr_id'],$parameters);
 
−
 
 
−
</syntaxhighlight>
 
−
 
 
−
==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.
 
−
<br />D'autres remontées d'erreurs sont possibles mais seront contextuelles en fonction de la fonctionnalité souhaitée.
 
−
 
 
−
<!-- Fin de l'article -->
 
−
<br /><br />
 
−
Cet article vous a semblé utile ? <vote />
 
−
<!-- Placez ici la ou les catégories auxquelles se rapporte votre article. Une ligne par catégorie. Ex:
 
−
[[Catégorie:Contribuer]]
 
−
[[Catégorie:Linux]] -->
 
−
[[Catégorie:API]]
 
−
[[Category:cloud public]]
 
−
[[Category:cloud privé]]
 
−
[[Category:API cloudstack]]
 
−
[[Catégorie:API]]
 
−
[[Category:cloudstack]]
 
−
[[Catégorie:FLEX]]
 
−
 
 
−
<!-- Gestion SEO. Indiquez les informations manquantes -->
 
−
<br />
 
−
<comments />
 

Version actuelle datée du 22 février 2021 à 16:50