Ikoula Corporate
Espace client
Support
Blog
Wiki
Site web Ikoula
查看“使用该 API 的示例”的源代码
←
使用该 API 的示例
Jump to navigation
Jump to search
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看和复制此页面的源代码。
<br /> 这篇文章是从由软件进行自动翻译。你可以[[:fr:Exemples d'utilisation de l'API|看到这篇文章的源代码]]<br /><span data-translate="fr"></span> <!-- Début de l'article. Placez votre texte ci-après et n'hésitez pas à personnaliser les chapitres selon votre besoin --> ==介绍 == <!--T:1--> 如何使用 API 通过一些具体的、 功能的例子。 ==示例函数 == <!--T:2--> <syntaxhighlight lang="php"> // 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; } </syntaxhighlight> ==API 调用 == <!--T:16--> <syntaxhighlight lang="php"> //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 </syntaxhighlight> ==常见的错误 == <!--T:21--> ;权限被拒绝 : 意味着 API 中使用的用户没有访问所请求的信息或执行所需的操作的权利 ;无法解密密码 : 意味着参数 '''crypted_password''' 不佳已加密或损坏 ;凭据无效 : 意味着身份验证已失败,并且该用户不是所以承认 ;无效或丢失的签名 : 意味着,签名不是存在于由 API,接收的参数或者无效 <br />其他升降机错误是可能的但将语境根据所需的功能。 <!--T:22--> <!-- Fin de l'article --> <br /><br /> 这篇文章似乎你要有用 ? <vote /> <!-- Placez ici la ou les catégories auxquelles se rapporte votre article. Une ligne par catégorie. Ex: [[Category:贡献]] [[Category:Linux]] --> [[Category:API]] <!--T:23--> <!-- Gestion SEO. Indiquez les informations manquantes --> <br /> <comments />
返回至
使用该 API 的示例
。
导航菜单
个人工具
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息
投稿
fr-wiki.ikoula.com
en-wiki.ikoula.com
es-wiki.ikoula.com
it-wiki.ikoula.com
nl-wiki.ikoula.com
de-wiki.ikoula.com
pt-wiki.ikoula.com
ru-wiki.ikoula.com
pl-wiki.ikoula.com
ro-wiki.ikoula.com
ja-wiki.ikoula.com
zh-wiki.ikoula.com
he-wiki.ikoula.com
ar-wiki.ikoula.com