API de gestion distante

» A.P.I - Application Program Interface
Ensemble de bibliothèques permettant une programmation plus aisée car les fonctions deviennent indépendantes du matériel. Protocole utilisé: XML over HTTPS via SOAP

API ? Pour quoi faire ?

La bibliothèque de fonctions de l'API permettent de gérer votre hébergement sans devoir être connecté à la console de gestion.

Vous pouvez gérer votre hébergement depuis votre site web, depuis un serveur chez vous ou même depuis un serveur chez un autre hébergeur, il vous faut juste un serveur web et PHP5.

Une bonne connaissance du language PHP et des tableaux associatif est requise.

» Utilisation de base de l'API

Affin de pouvoir utiliser l'API, vous *devez* include le code suivant dans vos scripts :
<?php
require_once "lib/nusoap.php"// à télécharger http://hebergement.zastanak.com/admin/V2/lib.zip
?>

Toutes les demandes sont effectuées pour l'identifiant qui fait la requête au serveur

Exemple de code : Demande la liste des domaines, fonction API utilisé : getdomainlist

Paramétres de connexion

NOTE IMPORTANTE

ATTENTION : Pas d'identifiant en '-YL', '-DM' ou '-SD' pour la connexion au serveur, il faut utiliser le même identifiant et mot de passe que l'accès à la console de gestion.


<?php
/* *********************************** */
/*            VARIABLES                */
/* *********************************** */
ERROR_REPORTING(E_WARNING|E_PARSE);                    // Niveau d'erreur
$SoapEnvironment="LIVE";                                     // Toujours LIVE
$SoapRetour='ARRAY';                                         // Toujours ARRAY
$SoapUrl="http://hebergement.zastanak.com/soapserver/soapserver";    // Adresse du serveur SOAP
$wsdl="true";                                                // Toujours true
unset($proxyhost); unset($proxyport);                                                // Pas de proxy
unset($proxyusername); unset($proxypassword);                                            // Pas de proxy
$server_delay="60";                                          // Timeout de connexion en secondes

/* *********************************** */
/*     ATTENTION: Pas d'identifiant    */
/*    en '-YL', '-DM' ou '-SD' ici !   */
/* C'est le même identifiant et mot de */
/*   passe que la console de gestion   */
/* *********************************** */
$login="cestmoi";                                            // Votre nom d'utilisateur
$password=base64_encode("aucuneidee");          // Votre mot de passe
?>
Inclusion de la librairie

Connexion au serveur

<?php
/* *********************************** */
/*       CONNEXION AU SERVEUR          */
/* *********************************** */
$soapclient = new soapclient($SoapUrl.'?'.$wsdl$wsdl$proxyhost$proxyport$proxyusername$proxypassword);
$soapclient->timeout 240;
$soapclient->response_timeout 240;
?>
FONCTIONS

<?php
/* *********************************** */
/*        FONCTION 'API_CONNECT'       */
/* *********************************** */
function Api_connect($login$passwd) {
global 
$soapclient$SoapRetour$SoapEnvironment;
$tab=array(
    
"environment"=>$SoapEnvironment,
    
"retour"=>$SoapRetour,
    
"operation"=>"login",
    
"Login"=>$login,
    
"Passwd"=>$passwd,
    );
$params=array(&$tab); //print_r($params);
$R=$soapclient->call($params['0']['operation'],$params,$options);
soaperror($R);
return 
$R;
}

/* *********************************** */
/*       FONCTION 'GETDOMAINLIST'      */
/* *********************************** */
function API_getdomainlist() {
global 
$soapclient$SoapRetour$SoapEnvironment;
$tab=array(
    
"environment" =>$SoapEnvironment,
    
"retour" => $SoapRetour,
    
"operation" => "getdomainlist",
    
"id_session" => $_SESSION['sessionapi']
    );
$params=array(&$tab); //print_r($params);
$R=$soapclient->call($params['0']['operation'],$params,$options);
soaperror($R);
return 
$R;
}

/* *********************************** */
/*         FONCTION 'SOAPERROR'        */
/* *********************************** */
function soaperror($R) {
global 
$soapclient$SoapRetour$SoapEnvironment;
if (
$R=="") echo "<br>".senderror("FATAL: API Error / API time out. Please try again");

 if (
$soapclient->fault) { echo '<h2>Erreur fatale</h2><pre>'print_r($result); echo '</pre>'; }
 if (! 
$soapclient->fault) {
  
$err $soapclient->getError();
  if (
$err) { echo '<h2>Erreur</h2><pre>' $err '</pre>';
   echo 
'<h2>Request</h2><pre>' htmlspecialchars($soapclient->requestENT_QUOTES) . '</pre>';
   echo 
'<h2>Response</h2><pre>' htmlspecialchars($soapclient->responseENT_QUOTES) . '</pre>';
  }
 }
}

/* *********************************** */
/*           FONCTION 'PRINTR'         */
/* *********************************** */
// histoire de mieux afficher le code à l'écran
function printr($V) {
 echo 
"<pre>"print_r($V); echo "</pre>";
}
?>
Requête proprement dite

<?php
session_start
();
// Session sur le serveur
$SESSIONAPI=unserialize(Api_connect($login$password));

if (
$SESSIONAPI['response_code']=="200") { // Reponse 200 -> OK
 // Sauvegarde de la session serveur
 
session_register("sessionapi");
 
$_SESSION['sessionapi']=$SESSIONAPI['attributes']['session'];

 
// Demande la liste des domaines 'getdomainlist'
 
$R=unserialize(API_getdomainlist());

 
// affichage du resultat;
 
printr($R);
} else 
printr($SESSIONAPI// login pas OK
?>


NOTE IMPORTANTE

Il est plus judicieux de créer plusieurs fichiers et de faire des includes, exemple de code :

<?php
include("config.inc.php"// paramétres de connexion
include("lib/nusoap.php"// librairie
include("connect.inc.php"// connexion au serveur
include("functions.php"// fonctions

session_start();
// Session sur le serveur
$SESSIONAPI=unserialize(Api_connect($login$password));

if (
$SESSIONAPI['response_code']=="200") { // Reponse 200 -> OK
 // Sauvegarde de la session serveur
 
session_register("sessionapi");
 
$_SESSION['sessionapi']=$SESSIONAPI['attributes']['session'];

 
// Demande la liste des domaines 'getdomainlist'
 
$R=unserialize(API_getdomainlist());

 
// affichage du resultat;
 
printr($R);
} else 
printr($SESSIONAPI// login pas OK
?>


La SESSION sur le serveur est valable 30 minutes
Veuillez ne pas ouvrir une session à chaque fois


» Exemple de code : Demande de la liste des fichiers, fonction API utilisé : getftpfilelist
<?php
/* *********************************** */
/*      FONCTION 'GETFTPFILELIST'      */
/* *********************************** */
function API_getdomainlist() {
global 
$soapclient$SoapRetour$SoapEnvironment;
$tab=array(
    
"environment" =>$SoapEnvironment,
    
"retour" => $SoapRetour,
    
"operation" => "getftpfilelist",
    
"id_session" => $_SESSION['sessionapi']
    );
$params=array(&$tab); //print_r($params);
$R=$soapclient->call($params['0']['operation'],$params,$options);
soaperror($R);
return 
$R;
}
?>


<?php
session_start
();
// Session sur le serveur
$SESSIONAPI=unserialize(Api_connect($login$password));

if (
$SESSIONAPI['response_code']=="200") { // Reponse 200 -> OK
 // Sauvegarde de la session serveur
 
session_register("sessionapi");
 
$_SESSION['sessionapi']=$SESSIONAPI['attributes']['session'];

 
// Demande la liste des fichiers du compte 'getftpfilelist'
 
$R=unserialize(API_getftpfilelist());

 
// affichage du resultat;
 
print_r($R);
}
?>


» Exemple de code : Demande le dossier d'un domaine, fonction API utilisé : getdomaindir
<?php
/* *********************************** */
/*       FONCTION 'GETDOMAINDIR'      */
/* *********************************** */
function API_getdomaindir($domain) {
global 
$soapclient$SoapRetour$SoapEnvironment;
$tab=array(
    
"environment" =>$SoapEnvironment,
    
"retour" => $SoapRetour,
    
"operation" => "getdomaindir",
    
"domain" => $domain,
    
"id_session" => $_SESSION['sessionapi']
    );
$params=array(&$tab); //print_r($params);
$R=$soapclient->call($params['0']['operation'],$params,$options);
soaperror($R);
return 
$R;
}
?>


<?php
session_start
();
// Session sur le serveur
$SESSIONAPI=unserialize(Api_connect($login$password));

if (
$SESSIONAPI['response_code']=="200") { // Reponse 200 -> OK
 // Sauvegarde de la session serveur
 
session_register("sessionapi");
 
$_SESSION['sessionapi']=$SESSIONAPI['attributes']['session'];

 
// Demande le dossier sur lequel pointe un domaine 'getdomaindir'
 
$R=unserialize(API_getdomaindir("mondomaine1.tld"));

 
// affichage du resultat;
 
print_r($R);
}
?>


» Exemple de code : Demande la liste des domaines puis la liste des comptes mails de chaque domaine, fonctions API utilisées : getdomainlist et getmaillist
<?php
/* *********************************** */
/*       FONCTION 'GETDOMAINLIST'      */
/* *********************************** */
function API_getdomainlist($domain) {
global 
$soapclient$SoapRetour$SoapEnvironment;
$tab=array(
    
"environment" =>$SoapEnvironment,
    
"retour" => $SoapRetour,
    
"operation" => "getdomainlist",
    
"domain" => $domain,
    
"id_session" => $_SESSION['sessionapi']
    );
$params=array(&$tab); //print_r($params);
$R=$soapclient->call($params['0']['operation'],$params,$options);
soaperror($R);
return 
$R;
}

/* *********************************** */
/*       FONCTION 'GETMAILLIST'       */
/* *********************************** */
function API_getmaillist($domain) {
global 
$soapclient$SoapRetour$SoapEnvironment;
$tab=array(
    
"environment" =>$SoapEnvironment,
    
"retour" => $SoapRetour,
    
"operation" => "getmaillist",
    
"domain" => $domain,
    
"id_session" => $_SESSION['sessionapi']
    );
$params=array(&$tab); //print_r($params);
$R=$soapclient->call($params['0']['operation'],$params,$options);
soaperror($R);
return 
$R;
}
?>


<?php
session_start
();
// Session sur le serveur
$SESSIONAPI=unserialize(Api_connect($login$password));

if (
$SESSIONAPI['response_code']=="200") { // Reponse 200 -> OK
 // Sauvegarde de la session serveur
 
session_register("sessionapi");
 
$_SESSION['sessionapi']=$SESSIONAPI['attributes']['session'];

 
// Demande la liste des domaines 'getdomainlist'
 
$LISTDOM=unserialize(API_getdomainlist("mondomaine1.tld"));

 if (
is_array($LISTDOM)) { // Si réponse est bien un tableau
  
foreach ($LISTDOM as $key => $value) { // parcour le tableau;
   
if ($value['domain']!="") {
    
$LISTMAIL=unserialize(API_getmaillist($value['domain'])); // demande liste des noites mail du domaine
    
printr($LISTMAIL); // affiche le resultat
   
}
  }
 }
?>
Liste des fonctions au 09/12/2008

<?php
getdomainlist
(); 
getftpfilelist(); 
getftpfilelistfull(); 
getftpfilelistonly(); 
changelesdroits($directory$recursive); 
getdomaindir($domain); 
get_params_cpt(); 
getmaillist($SESSIONAPI$domaine); 
addmail($SESSIONAPI$domaine$email$password); 
removemail($SESSIONAPI$domaine$email); 
removedir($dir); 
getmailaliaslist($SESSIONAPI$domaine); 
setmailalias($SESSIONAPI$domaine$SRC$DEST); 
removemailalias($SESSIONAPI$domaine$SRC$DEST); 
setmailcatchall($SESSIONAPI$domaine$active$destination); 
get_domain_ext(); 
adddomain($domain); 
removedomain($domain); 
getdomainpassword($domain); 
setdomainpassword($domain$password); 
externaldesktop($action); 
mail_autorespond_get($domain$email); 
mail_autorespond_set($domain$email$message); 
mail_antispam_get($domain$email); 
mail_antispam_set($domain$email$message); 
mail_antivirus_get($domain$email); 
mail_antivirus_set($domain$email$message); 
mail_quota_get($domain$email); 
mail_quota_set($domain$email$quota); 
mail_allowed_get($domain$email); 
mail_allowed_set($domain$email$allowed); 
get_domain_dns_params($domain); 
set_domain_dns_params($domain$type$value); 
get_domain_dns_advanced_params($domain); 
set_domain_dns_advanced_params($domain$type$value1$value2$action); 
createinitialconfigdns($domain); 
get_server_reverse(); 
set_server_reverse($reverse); 
set_domain_dir($domain$dir); 
set_domain_subdir($domain$dir$subdomain); 
mail_getpasswd(); 
mail_setpasswd($passwd); 
mysql_getpasswd(); 
mysql_setpasswd($passwd); 
ftp_getpasswd(); 
ftp_setpasswd($passwd); 
mail_password_get($domain$email); 
mail_password_set($domain$email$password); 
add_subdomain($domain$subdomain$directory); 
del_subdomain($domain$subdomain); 
get_ftpadd_account(); 
ftpadd_remove($type); 
ftpadd_statechange(); 
ftpadd_activate($type); 
ftpadd_pwdchange($type$password); 
webalizer_status(); 
set_webalizer($action$domain); 
getbackupfilelist(); 
sql_dump($type$var1$var2$var3$var4); 
datarestore($type$source$destination); 
getmysqltable(); 
?>