Différences entre versions de « Exemples d'utilisation de l'API »
Jump to navigation
Jump to search
(Page créée avec « <!-- Début de l'article. Placez votre texte ci-après et n'hésitez pas à personnaliser les chapitres selon votre besoin --> ==Introduction== Comment utiliser l'API à... ») |
|||
(2 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
+ | <span data-link_translate_en_title="TranslateApiExceptionMethod: Translate()Message: The Azure Market Place Translator Subscription associated with the request credentials has zero balance.message id=5107.V2_Rest.Translate.36BD7A7D" data-link_translate_en_url="TranslateApiExceptionMethod%3A+Translate%28%29Message%3A+The+Azure+Market+Place+Translator+Subscription+associated+with+the+request+credentials+has+zero+balance.message+id%3D5107.V2_Rest.Translate.36BD7A7D"></span>[[:en:TranslateApiExceptionMethod: Translate()Message: The Azure Market Place Translator Subscription associated with the request credentials has zero balance.message id=5107.V2_Rest.Translate.36BD7A7D]][[en:TranslateApiExceptionMethod: Translate()Message: The Azure Market Place Translator Subscription associated with the request credentials has zero balance.message id=5107.V2_Rest.Translate.36BD7A7D]] | ||
<!-- Début de l'article. Placez votre texte ci-après et n'hésitez pas à personnaliser les chapitres selon votre besoin --> | <!-- Début de l'article. Placez votre texte ci-après et n'hésitez pas à personnaliser les chapitres selon votre besoin --> | ||
− | ==Introduction== | + | |
+ | |||
+ | ==Introduction== <!--T:1--> | ||
Comment utiliser l'API à travers quelques exemples concrets et fonctionnels. | Comment utiliser l'API à travers quelques exemples concrets et fonctionnels. | ||
− | ==Fonctions pour les exemples== | + | ==Fonctions pour les exemples== <!--T:2--> |
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> | ||
// Chemin local vers la clé publique téléchargée sur http://api.ikoula.com/downloads/Ikoula.API.RSAKeyPub.pem | // Chemin local vers la clé publique téléchargée sur http://api.ikoula.com/downloads/Ikoula.API.RSAKeyPub.pem | ||
define('API_PUB_KEY_PATH', dirname(__FILE__) . '/Ikoula.API.RSAKeyPub.pem'); | define('API_PUB_KEY_PATH', dirname(__FILE__) . '/Ikoula.API.RSAKeyPub.pem'); | ||
+ | <!--T:3--> | ||
// Fonction de chiffrement du mot de passe via la clé publique Ikoula | // Fonction de chiffrement du mot de passe via la clé publique Ikoula | ||
function opensslEncryptPublic($password) | function opensslEncryptPublic($password) | ||
Ligne 20 : | Ligne 24 : | ||
$publicKey = openssl_pkey_get_public('file://'.realpath(API_PUB_KEY_PATH)); | $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 | + | <!--T:4--> |
+ | // S'il n'y as pas eu d'erreurs lors de la récupération de la clé publique, on continue | ||
if ($publicKey !== FALSE) | if ($publicKey !== FALSE) | ||
{ | { | ||
Ligne 47 : | Ligne 52 : | ||
} | } | ||
+ | <!--T:5--> | ||
// Fontction de création de la signature en fonction des paramètres présents | // Fontction de création de la signature en fonction des paramètres présents | ||
function createSignature($params=array()) | function createSignature($params=array()) | ||
Ligne 52 : | Ligne 58 : | ||
$signature = null; | $signature = null; | ||
− | // Si il y a au moins un paramètre | + | <!--T:6--> |
+ | // Si il y a au moins un paramètre | ||
if (count($params) > 0) | if (count($params) > 0) | ||
{ | { | ||
Ligne 64 : | Ligne 71 : | ||
$query = http_build_query($params); | $query = http_build_query($params); | ||
− | // Encodage des signes "plus "+" | + | <!--T:7--> |
+ | // Encodage des signes "plus "+" | ||
$query = str_replace("+", "%20", $query); | $query = str_replace("+", "%20", $query); | ||
− | // Transformation de la chaîne de caractères en minuscule | + | <!--T:8--> |
+ | // Transformation de la chaîne de caractères en minuscule | ||
$query = strtolower($query); | $query = strtolower($query); | ||
− | $public_key = ""; | + | <!--T:9--> |
+ | $public_key = ""; | ||
// Si le fichier existe, on va récupérer la clé | // Si le fichier existe, on va récupérer la clé | ||
if (file_exists(API_PUB_KEY_PATH)) | if (file_exists(API_PUB_KEY_PATH)) | ||
Ligne 83 : | Ligne 93 : | ||
} | } | ||
− | // Hashage des paramètres | + | <!--T:10--> |
+ | // Hashage des paramètres | ||
$hash = hash_hmac("SHA1", $query, $public_key, true); | $hash = hash_hmac("SHA1", $query, $public_key, true); | ||
− | // Encodage en base64 | + | <!--T:11--> |
+ | // Encodage en base64 | ||
$signature = base64_encode($hash); | $signature = base64_encode($hash); | ||
} | } | ||
− | return $signature; | + | <!--T:12--> |
+ | return $signature; | ||
} | } | ||
+ | <!--T:13--> | ||
// Fonction facilitant l'envoie des requêtes vers l'API Ikoula | // Fonction facilitant l'envoie des requêtes vers l'API Ikoula | ||
function send_request ($rest, $url_param, $params=array()) | function send_request ($rest, $url_param, $params=array()) | ||
Ligne 107 : | Ligne 121 : | ||
− | // si on est en REST on rajoute le type d'appel (POST,DELETE,PUT,GET,...) sinon on passe en POST | + | <!--T:14--> |
+ | // 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"); | curl_setopt($ch, CURLOPT_CUSTOMREQUEST, ($rest)?$rest:"POST"); | ||
// Si il y a des paramètres on les rajoute dans la requête | // Si il y a des paramètres on les rajoute dans la requête | ||
Ligne 140 : | Ligne 155 : | ||
curl_close($ch); | curl_close($ch); | ||
− | // retourne la réponse | + | <!--T:15--> |
+ | // retourne la réponse | ||
return($data); | return($data); | ||
} | } | ||
Ligne 147 : | Ligne 163 : | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | ==Appels API== | + | ==Appels API== <!--T:16--> |
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> | ||
//login | //login | ||
Ligne 154 : | Ligne 170 : | ||
$crypted_password = base64_encode(opensslEncryptPublic('MOT_DE_PASSE_A_CRYPTER')); | $crypted_password = base64_encode(opensslEncryptPublic('MOT_DE_PASSE_A_CRYPTER')); | ||
+ | <!--T:17--> | ||
//liste des VM - retour en JSON | //liste des VM - retour en JSON | ||
+ | <!--T:18--> | ||
//liste des paramètres que l'on souhaite envoyer à l'API (pour générer la signature) | //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'); | $parameters = array('login' => $login, 'crypted_password' => $crypted_password, 'format' => 'json'); | ||
Ligne 168 : | Ligne 186 : | ||
print_r($data2); //appel REST | print_r($data2); //appel REST | ||
+ | <!--T:19--> | ||
//informations d'une VM - retour en XML | //informations d'une VM - retour en XML | ||
+ | <!--T:20--> | ||
//liste des paramètres que l'on souhaite envoyer à l'API (pour générer la signature) | //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); | $parameters = array('login' => $login, 'crypted_password' => $crypted_password, 'format' => 'xml', 'subscr_id' => 12345); | ||
Ligne 184 : | Ligne 204 : | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | ==Erreurs usuelles== | + | ==Erreurs usuelles== <!--T:21--> |
;Permission Denied | ;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 | : 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 | ||
Ligne 195 : | Ligne 215 : | ||
<br />D'autres remontées d'erreurs sont possibles mais seront contextuelles en fonction de la fonctionnalité souhaitée. | <br />D'autres remontées d'erreurs sont possibles mais seront contextuelles en fonction de la fonctionnalité souhaitée. | ||
+ | <!--T:22--> | ||
<!-- Fin de l'article --> | <!-- Fin de l'article --> | ||
<br /><br /> | <br /><br /> | ||
Ligne 203 : | Ligne 224 : | ||
[[Catégorie:API]] | [[Catégorie:API]] | ||
+ | <!--T:23--> | ||
<!-- Gestion SEO. Indiquez les informations manquantes --> | <!-- Gestion SEO. Indiquez les informations manquantes --> | ||
− |
Version du 23 septembre 2015 à 16:43
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 http://api.ikoula.com/downloads/Ikoula.API.RSAKeyPub.pem
define('API_PUB_KEY_PATH', dirname(__FILE__) . '/Ikoula.API.RSAKeyPub.pem');
<!--T:3-->
// 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));
<!--T:4-->
// 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;
}
}
<!--T:5-->
// Fontction de création de la signature en fonction des paramètres présents
function createSignature($params=array())
{
$signature = null;
<!--T:6-->
// 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);
<!--T:7-->
// Encodage des signes "plus "+"
$query = str_replace("+", "%20", $query);
<!--T:8-->
// Transformation de la chaîne de caractères en minuscule
$query = strtolower($query);
<!--T:9-->
$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)
)
);
}
<!--T:10-->
// Hashage des paramètres
$hash = hash_hmac("SHA1", $query, $public_key, true);
<!--T:11-->
// Encodage en base64
$signature = base64_encode($hash);
}
<!--T:12-->
return $signature;
}
<!--T:13-->
// 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;
<!--T:14-->
// 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);
<!--T:15-->
// 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'));
<!--T:17-->
//liste des VM - retour en JSON
<!--T:18-->
//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
<!--T:19-->
//informations d'une VM - retour en XML
<!--T:20-->
//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
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