L’API (Application Programming Interface) vous permet de gérer vos noms de domaine au travers de programmes que vous écrivez vous même.
Nous fournissons des exemples pour PHP et Perl.
Au 29 Janvier 2007 l’API gère les noms de domaine pour les extentions suivantes:
| Top Level Domain (TLD) | Registre | Exemple de prix pour la création d’un nom de domaine |
|---|---|---|
| .COM | Verisign GRS | 5,00 € HT |
| .NET | Verisign GRS | 5,00 € HT |
| .ORG | PIR | 5,00 € HT |
| .BIZ | NeuLevel | 5,00 € HT |
| .INFO | Afilias | 5,00 € HT |
| .NAME | GNR | 5,00 € HT |
| .MOBI | dotMobi | 10,00 € HT |
| .EU | EurID | 5,00 € HT |
| .FR (France) | AFNIC | 5,00 € HT |
| .BE (Belgique) | Dns.BE | 5,00 € HT |
| .US (USA) | NeuStar | 10,00 € HT |
| .CN (Chine) | CNNIC | 10,00 € HT |
| .TW (Taiwan) | TWNIC | 15,00 € HT |
| .ASIA | DotAsia | 10,00 € HT |
| .CO.UK | Nominet | bientôt disponible |
| .ORG.UK | Nominet | bientôt disponible |
| .ME.UK | Nominet | bientôt disponible |
Cette API est utilisée depuis Octobre 2006 par des revendeurs qui gèrent plusieurs dizaines de millier de noms de domaine.
L’API est reservée aux revendeurs ayant au minimum 50 Euros HT de facturation mensuelle (a l’exception des premiers mois d’activité).
Les 4 étapes pour devenir revendeur de nom de domaine:
ainsi que l’adresse IP ou la plage IP que vous utiliserez pour vos connexions a l’APILes serveurs et services
Nous fournissons des exemples d’utilisation de l’API en PHP et en Perl.
Les pré-requis PHP : PHP 5.1 + Soap Client
Les pré-requis Perl : Perl 5 + SOAP::Lite >= 0.67
Outre les fonctions domain_check et domain_multicheck de l’API, nous proposons également l’acces à un serveur DAS (Domain Availability Service) pour contrôler la disponibilité d’un nom de domaine.
Pour les TLDs (.COM .NET .ORG .BIZ .INFO .NAME .MOBI .US)
| Plateforme | Hostname | Port TCP |
|---|---|---|
| OT&E | das.dev.free.org | 4343 |
| Production | das.free.org | 4343 |
Pour les .BE (service fourni directement par le registre Dns.BE)
| Plateforme | Hostname | Port TCP |
|---|---|---|
| Production | whois.dns.be | 4343 |
Pour les .EU (service fourni directement par le registre EurID)
| Plateforme | Hostname | Port TCP |
|---|---|---|
| Production | das.be | 4343 |
Documentation: http://registrar.eurid.eu/en/registrar/registrar-content/das-domain-availability-service
Exemple d’utilisation d’un serveur DAS depuis Linux/FreeBSD: $ whois -h das.free.org -p 4343 “get 1.0 mondomaine-a-moi.org”
| Plateforme | Hostname | Port TCP |
|---|---|---|
| OT&E | api.dev.free.org | 80 |
| Production | api.free.org | 80 ou 443 |
Si le nom de votre serveur DNS se trouve être dans votre nom de domaine, vous devez spécifier l’addresse IP de votre serveur auprès du registre qui gère le TLD de votre domaine.
Exemple:
| nom du serveur DNS | ns0.free.org |
| nom du domaine | free.org |
L’adresse IP de ns0.free.org doit être fourni au registre qui gere les noms de domaine en .org (PIR). Les fonctions host_* de l’API gère ce type d’enregistrement qui porte le nom de ‘glue record’.
Les statuts des noms de domaine
| champs | valeurs | descriptions |
|---|---|---|
| registry_status | 0×01 | clientDeleteProhibited |
| registry_status | 0×02 | serverDeleteProhibited |
| registry_status | 0×04 | clientHold |
| registry_status | 0×08 | serverHold |
| registry_status | 0×10 | clientRenewProhibited |
| registry_status | 0×20 | serverRenewProhibited |
| registry_status | 0×40 | clientTransferProhibited |
| registry_status | 0×80 | serverTransferProhibited |
| registry_status | 0×100 | clientUpdateProhibited |
| registry_status | 0×200 | serverUpdateProhibited |
| registry_status | 0×400 | pendingCreate |
| registry_status | 0×800 | pendingDelete |
| registry_status | 0×1000 | pendingRenew |
| registry_status | 0×2000 | pendingTransfer |
| registry_status | 0×4000 | pendingUpdate |
Toute les fonctions de l’API retourne un tableau (clef/valeur)
"retcode" => integer "retval" => integer "retfields" => array
* Les clefs “retcode” et “retval” sont TOUJOURS présentes.
si “retcode” est different de 1 ⇒ il y a un problème (voir le contenu de retval)
* Le tableau “retfields” est présent si besoin.
ATTENTION, il est ** IMPERATIF ** de contrôler l'état d'avancement d'une opération
via api_status après chacune des commandes:
De même nous vous invitons vivement à archiver toute trace des échanges réalisés via l'API.
Variables fournies à l’API dans les exemples de ce document:
$dist_id = login du revendeur $dist_passwd = mot de passe du revendeur $domain = un nom de domaine (en .com .net .org .biz .info .name .eu .be .us .fr .cn .tw .asia, etc.) $period = un nombre d annee (de 1 a 10) $id = un contact ID $handle = un handle de contact $tid = un transaction ID (pour connaitre le status d une action) 'status' possible = enum('Wait','ToProcess','Done','Error') $array_domain = array( "domain" => $domain, // nom de domaine "period" => 1, // enregistrement pour 1 an "owner_id" => $id, // contact ID "admin_id" => $dist_id, // Contact Admin = revendeur? "tech_id" => $dist_id, // Contact Technique = revendeur? "bill_id" => $dist_id, // Contact Facturation = revendeur? "service" => "dns", // dns ou dnsslave "ip_dns_master" => "", // si dnsslave => fournir l'IP du master "ns0" => "ns0.online.net", // jusqu'a 13 DNS pour un update "ns1" => "ns1.online.net" // ou maxi 4 pour une creation // les champs suivant sont uniquement utilisés par domain_update(); "registry_status" => 0, // Exemple: 64=clientTransferProhibited "authinfo" => "EPPauthCode" // Changement de l'AuthCode EPP ); $array_contact = ( "passwd" => "tres-secret", "email" => "dupond@free.fr", "hash_email" => "yes", // yes no "formejuridique" => "particulier", // enum('Particulier','Societe','Association','Autre') "civilite" => "M", // enum('','M','Mme','Mle') "nom" => "DUPOND", "prenom" => "Pierre", "societe" => "", "adresse1" => "12 Rue du chien qui fume", "adresse2" => "", "cp" => "75001", "ville" => "PARIS", "region_id" => "", // voir api_regionid() "pays_id" => "1", // voir api_paysid() "telephone" => "+33.147010203", "telecopie" => "", "numero_tva" => "", "siret" => "", "lang" => "fr", // fr en de es // Notre contrat avec l'ICANN nous oblige à revendre notre base d'utilisateurs à tout tiers qui le souhaite. // Mais vous avez le droit de ne pas accepter que vos données fassent partie du lot. // Definir 'yes' uniquement si vous acceptez que vos données personnelles soient revendues dans ce cadre "revente" => "no", // yes no // NEXUS (utile uniquement pour le ccTLD .US) "dotus_nexus_purpose" => "", // Purpose // P1 Business // P2 Non-Profit Business // P3 Personal Use // P4 Education // P5 Goverment "dotus_nexus_category" => "", // Category // C11 U.S. Citizen // C12 U.S. Permanent Resident // C21 U.S. Organization Incorprated in U.S. // C31 Non-US: Regularly engages in lawful activities in U.S. // C32 Non-US: Entity has an office or other facility in U.S. // Extensions (utile uniquement pour le ccTLD .FR) // Choix de la methode d'authentification par l'AFNIC // ATTENTION il doit y avoir une coherence entre la forme juridique // et le mode d'authentification de l'AFNIC "dotfr_mode" => "", // enum('MARQUE','SIRET','PARTICULIER','ASSOCIATION') "dotfr_marque" => "", // une marque de l'INPI // pour un particulier "dotfr_ne_le" => "", // date de naissance sous la forme: (JJ-MM-AAAA) "dotfr_ne_cp" => "", // code postal du lieu de naissance "dotfr_ne_ville" => "", // ville du lieu de naissance "dotfr_ne_pays_id" => "1", // pays du lieu de naissance - voir api_paysid(); // pour une association loi 1901 "dotfr_publication_jo" => "", // date de publication au journal officiel sous la forme: (JJ-MM-AAAA) "dotfr_publication_jo_page" => "", // numero de page de la publication au journal officiel // Extensions (utile uniquement pour le gTLD .ASIA) "asia_locality" => "", // un pays_id de la zone Asie,Australie,Pacifique "asia_typeofentity" => "", // enum('naturalPerson','corporation','cooperative','partnership','government','politicalParty','society','institution') "asia_formofident" => "", // enum('passport','certificate','legislation','societyRegistry','politicalPartyRegistry') "asia_identnumber" => "", // );
Avant toute opération vous devez construire un objet SoapClient
Exemple PHP 5.1:
$client = new SoapClient( NULL, array( 'location' => "http://api.dev.free.org/apis.cgi", 'uri' => "http://api.dev.free.org/apis.cgi", 'encoding'=>'UTF-8' ) );
Exemple Perl:
use SOAP::Lite; my $client = SOAP::Lite -> uri('http://api.dev.free.org/apis.cgi') -> proxy('http://api.dev.free.org/apis.cgi');
Gestion des contacts
Typage:
function contact_create( $dist_id, $dist_passwd, $array_contact )
Valeurs de retour:
| retcode | retval | Commentaire |
|---|---|---|
| -1 | -1 | $dist_id ou $dist_passwd invalide |
| -1 | -2 | Impossible de créer le contact (Handle) |
| -1 | -3 | Mauvais type pour $array_contact |
| -1 | -4 | Il manque des éléments dans $array_contact |
| 0 | 0 | l’ID n’existe pas |
| 1 | ID | OK (retourne un tableau contact dans retfields[]) |
[retcode] => 1 [retval] => 151049 [retfields] => Array ( [id] => 151049 [parent_id] => 13490 [lastupdate] => 2006-09-26 21:42:59 [lastupdate_ip] => 88.191.249.162 [handle] => PD86-FREE [creation] => 2006-09-26 21:42:59 [email] => dupond@free.fr [md5_email] => eb94fe20.151049@contacts.nospam.free.org [hash_email] => yes [formejuridique] => Particulier [civilite] => M [nom] => DUPOND [prenom] => Pierre [societe] => [adresse1] => 12 Rue du chien qui fume [adresse2] => [cp] => 75001 [ville] => PARIS [pays_id] => 1 [telephone] => +33.147010203 [telecopie] => [numero_tva] => [siret] => [lang] => fr [revente] => no [status] => Active [pays] => FRANCE )
Exemple PHP:
/* Création d'un contact --------------------------------------------- */ $newcontact = array ( "passwd" => "coincoin", "email" => "dupond@free.fr", // yes/no "hash_email" => "yes", // enum('Particulier','Societe','Association','Autre') "formejuridique" => "particulier", // enum('','M','Mme','Mle') "civilite" => "M", "nom" => "DUPOND", "prenom" => "Pierre", "societe" => "", "adresse1" => "12 Rue du chien qui fume", "adresse2" => "", "cp" => "75001", "ville" => "PARIS", // voir api_regionid() "region_id" => "", // voir api_paysid() "pays_id" => "1", "telephone" => "+33.147010203", "telecopie" => "", "numero_tva" => "", "siret" => "", // fr en de es "lang" => "fr", // yes/no "revente" => "no", // NEXUS (utile uniquement pour l'enregistrement de .US) "dotus_nexus_purpose" => "", // "P1" Business // "P2" Non-Profit Business // "P3" Personal Use // "P4" Education // "P5" Goverment "dotus_nexus_category" => "", // "C11" U.S. Citizen // "C12" U.S. Permanent Resident // "C21" U.S. Organization Incorprated in U.S. // "C31" Non-US: Regularly engages in lawful activities in U.S. // "C32" Non-US: Entity has an office or other facility in U.S. // Extensions (utile uniquement pour lenregistrement de .FR) // choix de la methode d'authentification par l'AFNIC "dotfr_mode" => "", // enum('MARQUE','SIRET','PARTICULIER','ASSOCIATION') "dotfr_marque" => "", // une marque de l'INPI ou OHMI // pour un particulier "dotfr_ne_le" => "", // date de naissance sous la forme: (JJ-MM-AAAA) "dotfr_ne_cp" => "", // code postal du lieu de naissance "dotfr_ne_ville" => "", // ville du lieu de naissance "dotfr_ne_pays_id" => "1", // pays du lieu de naissance - voir api_paysid(); // pour une association loi 1901 "dotfr_publication_jo" => "", // date de publication au journal officiel sous la forme: (JJ-MM-AAAA) "dotfr_publication_jo_page" => "", // numero de page de la publication au journal officiel ); echo "contact_create() \n"; $result = $client->contact_create( $dist_id, $dist_passwd, $newcontact ); print_r( $result ); if ( $result['retcode'] != 1 ) die( "Ca ne fonctionne pas !" );
Exemple Perl:
# Creation d'un contact my $contact_id; my %newcontact = ( # force type string pour eviter la conversion en float 'passwd' => SOAP::Data->type(string =>'coincoin'), 'email' => 'dupond@free.fr', # yes/no 'hash_email' => 'yes', # enum('Particulier','Societe','Association','Autre') 'formejuridique' => 'particulier', # enum('','M','Mme','Mle') 'civilite' => 'M', 'nom' => 'DUPOND', 'prenom' => 'Pierre', 'societe' => '', 'adresse1' => '12 Rue du chien qui fume', 'adresse2' => '', 'cp' => SOAP::Data->type(string =>'75001'), 'ville' => 'PARIS', # voir api_regionid() 'region_id' => '', # voir api_paysid() 'pays_id' => '1', # force type string pour eviter la conversion en float 'telephone' => SOAP::Data->type(string =>'+33.147010203'), 'telecopie' => SOAP::Data->type(string => ''), 'numero_tva' => '', 'siret' => SOAP::Data->type(string =>''), 'lang' => 'fr', 'revente' => 'no', # NEXUS (utile uniquement pour l'enregistrement des .US 'dotus_nexus_purpose' => '', # "P1" Business # "P2" Non-Profit Business # "P3" Personal Use # "P4" Education # "P5" Goverment 'dotus_nexus_category' => '', # C11" U.S. Citizen # "C12" U.S. Permanent Resident # "C21" U.S. Organization Incorprated in U.S. # "C31" Non-US: Regularly engages in lawful activities in U.S. # "C32" Non-US: Entity has an office or other facility in U.S. ); print "contact_create\n"; $result = $client->contact_create( $dist_id, $dist_passwd, SOAP::Data->type(map =>\%newcontact)); if ($result->result->{'retcode'} !=1) { die "Ca ne fonctionne pas create!\n"; }; $contact_id = $result->result->{'retval'};
Typage:
function contact_update( $dist_id, $dist_passwd, $id, $array_contact )
Valeurs de retour:
| retcode | retval | Commentaire |
|---|---|---|
| -1 | -1 | $dist_id ou $dist_passwd invalide |
| -1 | -2 | $dist_id n’a pas les droits nécessaires pour agir sur $id |
| -1 | -3 | $id a un status != ‘Active’ (Effacer, Archiver, Conflic, etc.) |
| -1 | -4 | mauvais type pour $array_contact |
| -1 | -5 | Il manque des éléments dans $array_contact |
| 0 | 0 | l’ID n’existe pas |
| 1 | ID | OK (retourne un tableau contact dans retfields[]) |
[retcode] => 1 [retval] => 151049 [retfields] => Array ( [id] => 151049 [parent_id] => 13490 [lastupdate] => 2006-09-26 21:42:59 [lastupdate_ip] => 88.191.249.162 [handle] => PD86-FREE [creation] => 2006-09-26 21:42:59 [email] => dupond@free.fr [md5_email] => eb94fe20.151049@contacts.nospam.free.org [hash_email] => yes [formejuridique] => Particulier [civilite] => M [nom] => DUPONT [prenom] => Pierre [societe] => [adresse1] => 12 Rue du chien qui fume [adresse2] => [cp] => 75001 [ville] => PARIS [pays_id] => 1 [telephone] => +33.147010203 [telecopie] => +33.173500000 [numero_tva] => [siret] => [lang] => fr [revente] => no [status] => Active [pays] => FRANCE )
Exemple PHP:
/* Update d'un contact ---------------------------------------------- */ // $result = resultat d'un contact_info() $contact_id = $result['retval']; $updcontact = $result['retfields']; $updcontact['nom'] = "DUPONT"; $updcontact['telecopie'] = "+33.173500000"; echo "contact_update() \n"; $result = $client->contact_update( $dist_id, $dist_passwd, $contact_id, $updcontact ); print_r( $result ); if ( $result['retcode'] != 1 ) die( "Ca ne fonctionne pas !" );
Exemple Perl:
# Update d'un contact $updcontact{'nom'} = 'DUPONT'; $updcontact{'telecopie'} = SOAP::Data->type(string =>'+33.173500000'); print "contact_update\n"; $result = $client->contact_update( $dist_id, $dist_passwd, $contact_id, SOAP::Data->type(map => \%updcontact )); if ($result->result->{'retcode'} !=1) { die "Ca ne fonctionne pas !\n"; };
Typage:
function contact_delete( $dist_id, $dist_passwd, $id )
Valeurs de retour:
| retcode | retval | Commentaire |
|---|---|---|
| -1 | -1 | $dist_id ou $dist_passwd invalide |
| -1 | -2 | $dist_id n’a pas les droits nécessaires pour agir sur $id |
| -1 | -3 | l’ID est utilisé par un nom de domaine |
| 0 | 0 | l’ID n’existe pas |
| 1 | ID | OK (retourne aussi un tableau retfield[]) |
Exemple PHP:
/* Delete d'un contact ---------------------------------------------- */ echo "contact_delete()\n"; $result = $client->contact_delete( $dist_id, $dist_passwd, $id ); print_r( $result ); if ( $result['retcode'] != 1 ) die( "Ca ne fonctionne pas !" );
Exemple Perl:
# Delete d'un contact print "contact_delete\n"; $result = $client->contact_delete( $dist_id, $dist_passwd, $contact_id ); print Data::Dumper->Dump([$result->result]);
Typage:
function contact_info( $dist_id, $dist_passwd, $handle, $id )
fournir $handle OU ($id avec $handle vide)
Valeurs de retour:
| retcode | retval | Commentaire |
|---|---|---|
| -1 | -1 | $dist_id ou $dist_passwd invalide |
| 0 | 0 | $id ou $handle n’existe pas |
| 1 | ID | OK (retourne un tableau retfields[]) |
[retcode] => 1 [retval] => 151049 [retfields] => Array ( [id] => 151049 [parent_id] => 13490 [lastupdate] => 2006-09-26 21:42:59 [lastupdate_ip] => 88.191.249.162 [handle] => PD86-FREE [creation] => 2006-09-26 21:42:59 [email] => dupond@free.fr [md5_email] => eb94fe20.151049@contacts.nospam.free.org [hash_email] => yes [formejuridique] => Particulier [civilite] => M [nom] => DUPONT [prenom] => Pierre [societe] => [adresse1] => 12 Rue du chien qui fume [adresse2] => [cp] => 75001 [ville] => PARIS [pays_id] => 1 [telephone] => +33.147010203 [telecopie] => +33.173500000 [numero_tva] => [siret] => [lang] => fr [revente] => no [status] => Active [pays] => FRANCE )
Exemple PHP:
/* Info a propos d'un contact --------------------------------------- */ echo "contact_info()\n"; $id = 123; $result = $client->contact_info( $dist_id, $dist_passwd, "", $id ); print_r( $result ); echo "contact_info() par handle du type 'QQQ123-FREE'\n"; $handle = "QQQ123-FREE"; $result = $client->contact_info( $dist_id, $dist_passwd, $handle ); print_r( $result );
Exemple Perl:
# Info a propos d'un contact print "contact_info id\n"; $result = $client->contact_info( $dist_id, $dist_passwd, '', $contact_id ); print Data::Dumper->Dump([$result->result->{'retfields'}]); if ($result->result->{'retcode'} !=1) { die "Ca ne fonctionne pas contact_info\n"; }; %updcontact = %{$result->result->{'retfields'}}; my $handle = $result->result->{'retfields'}->{'handle'}; print "contact_info handle $handle\n"; $result = $client->contact_info( $dist_id, $dist_passwd, $handle ); print Data::Dumper->Dump([$result->result->{'retfields'}]);
Typage:
function contact_list( $dist_id, $dist_passwd )
Valeurs de retour:
| retcode | retval | Commentaire |
|---|---|---|
| -1 | -1 | $dist_id ou $dist_passwd invalide |
| 0 | 0 | aucun contact |
| 1 | ID | OK (retourne un tableau retfields[]) |
Exemple PHP:
/* Liste les contacts cree par le revendeur $dist_id ---------------- */ echo "contact_list()\n"; $result = $client->contact_list( $dist_id, $dist_passwd ); print_r( $result );
Exemple Perl:
# Liste les contacts cree par le revendeur $dist_id print "contact_list()\n"; $result = $client->contact_list( $dist_id, $dist_passwd ); print Data::Dumper->Dump([$result->result->{'retfields'}]);
Gestion des noms de domaine
Typage:
function domain_check( $dist_id, $dist_passwd, $domain )
Valeurs de retour:
| retcode | retval | Commentaire |
|---|---|---|
| -1 | -1 | $dist_id ou $dist_passwd invalide |
| -1 | -2 | Le nom de domaine n’est pas disponible (déjà dans notre base) |
| -1 | -3 | On ne gère pas le TLD de ce nom domaine |
| -1 | -4 | Le nom de domaine n’est pas disponible au registre |
| -1 | -5 | Le nom de domaine n’est pas défini |
| 1 | 1 | Le nom de domaine EST disponible |
[retcode] => 1 [retval] => 1
Exemple PHP:
/* Controle la disponibilite d'un nom de domaine -------------------- */ $domain = sprintf( "mydomaine-%d.com", time() ); echo "domain_check() $domain\n"; $result = $client->domain_check( $dist_id, $dist_passwd, $tdomain ); print_r( $result );
Exemple Perl:
# Controle la disponibilite d'un nom de domaine print "domain_check()\n"; my $name= sprintf( "demo-now-%d", time() ); my @adomain = map { "$name.".$_ } ('com','net','org','info','biz','name','us','eu'); foreach my $domain (@adomain) { $result = $client->domain_check($dist_id, $dist_passwd,$domain); print "$domain\n"; print Data::Dumper->Dump([$result->result]); };
Typage:
function domain_multicheck( $cid, $passwd, $domain )
$domain doit être fourni sans TLD
Valeur de retour:
| retcode | retval | Commentaire |
|---|---|---|
| -1 | -1 | $dist_id ou $dist_passwd invalide |
| -1 | -2 | Le nom de domaine n’est pas défini |
| 1 | 1 | un ou plusieurs noms de domaine sont disponibles (voir retfields[]) |
Pour chaque TLD geré par l’API (1 = disponible, 0 = indisponible)
[retcode] => 1 [retval] => 1 [retfields] => Array ( [com] => 0 [net] => 1 [org] => 0 [biz] => 1 [info] => 1 [mobi] => 1 [pro] => 1 [name] => 1 [asia] => 1 [us] => 1 [eu] => 0 [be] => 1 [fr] => 1 [cn] => 1 )
Exemple PHP:
/* Controle la disponibilite d'un nom de domaine -------------------- */ /* pour l'ENSEMBLE des TLDs gere par l'API -------------------------- */ $domain = sprintf( "mydomain-now-%d", time() ); $result = $client->domain_multicheck( $dist_id, $dist_passwd, $domain ); print_r( $result );
Exemple Perl:
# Controle la disponibilite d'un nom de domaine # pour l'ENSEMBLE des TLDs gere par l'API print "domain_multicheck()\n"; my $name= sprintf( "mydomain-now-%d", time() ); $result = $client->domain_multicheck( $dist_id, $dist_passwd, $name); print Data::Dumper->Dump([$result->result]);
Typage:
function domain_create( $dist_id, $dist_passwd, $array_domain )
Valeurs de retour:
| retcode | retval | Commentaire |
|---|---|---|
| -1 | -1 | $dist_id ou $dist_passwd invalide |
| -1 | -2 | Le nom de domaine n’est pas disponible |
| -1 | -3 | Il manque des éléments au tableau $array_domain |
| -1 | -4 | owner_id ou admin_id ou tech_id ou bill_id n’est pas valable |
| -1 | -5 | Le nom de domaine n’est pas défini |
| -1 | -6 | Il manque des éléments au $owner_id pour la création d’un .US ou .FR |
| -1 | -7 | DNS invalide ou Zone invalide pour les .FR ZoneCheck |
| 1 | TID | (transaction ID pour api_status() ) |
ATTENTION, il est ** IMPERATIF ** de contrôler l'état d'avancement d'un domain_create via la commande api_status de l'API.
[retcode] => 1 [retval] => 277 [retfields] => Array ( [tid] => 277 [id] => 141958 [lastupdate] => 2006-09-26 21:43:09 [lastupdate_ip] => 88.191.249.162 [domain] => demo-now-1159299779.com [registrar_creation] => 0000-00-00 00:00:00 [registrar_expiration] => 0000-00-00 00:00:00 [authinfo] => hqruzKPTYZ13 [service] => dns [status] => Active [registry_status] => 0 [ns0] => ns0.online.net [ns1] => ns1.online.net [bill_id] => 13490 [tech_id] => 13490 [admin_id] => 13490 [owner_id] => 151049 )
Exemple PHP:
/* Creation d'un nom de domaine ------------------------------------- */ $domain = sprintf( "mydomaine-%d.com", time() ); $newdomain = array( "domain" => $domain, // nom de domaine "period" => 1, // enregistrement pour 1 an "owner_id" => $id, // contact ID cree dans le meme exemple "admin_id" => $admin_id, // Contact Admin = revendeur "tech_id" => $tech_id, // Contact Technique = revendeur "bill_id" => $bill_id, // Contact Facturation = revendeur "service" => "dns", // dns ou dnsslave "ip_dns_master" => "", // si dnsslave => fournir l'IP du master "ns0" => "ns0.online.net", "ns1" => "ns1.online.net", // jusqu'a 4 DNS possible (13 en update) "ipns0" => "", "ipns1" => "", // glue record si besoin // les champs suivant sont uniquement utilise par domain_update(); "registry_status" => 0, // clientTransferProhibited on/off "authinfo" => "EPPauthCode" // EPP AuthCode ); echo "domain_create() \n"; $result = $client->domain_create( $dist_id, $dist_passwd, $newdomain ); print_r( $result ); if ( $result['retcode'] != 1 ) die( "Ca ne fonctionne pas !" );
Exemple Perl:
my $tid; my %newdomain; # Creation d'un nom de domaine print "domain_create\n"; my $domain= 'demo-now-'.time()."-$$.com"; %newdomain =( "domain" => $domain, # nom de domaine "period" => 1, # enregistrement pour 1 an "owner_id" => $contact_id, # contact ID cree dans le meme exemple "admin_id" => $dist_id, # Contact Admin = revendeur "tech_id" => $dist_id, # Contact Technique = revendeur "bill_id" => $dist_id, # Contact Facturation = revendeur "service" => "dns", # dns ou dnsslave "ip_dns_master" => "", # si dnsslave => fournir l'IP du master "ns0" => "ns0.online.net", "ns1" => "ns1.online.net", # jusqu'a 13 DNS possible "ns2" => "ns0.$domain", # dns avec glue => fournir son IP "ipns2" => "213.228.62.20" ); $result = $client->domain_create( $dist_id, $dist_passwd, SOAP::Data->type(map => \%newdomain )); print Data::Dumper->Dump([$result->result]); if ($result->result->{'retcode'} !=1) { die "Ca ne fonctionne pas !\n"; }; $tid = $result->result->{'retval'};
Typage:
function domain_renew( $dist_id, $dist_passwd, $domain, $period )
Valeurs de retour:
| retcode | retval | Commentaire |
|---|---|---|
| -1 | -1 | $dist_id ou $dist_passwd invalide |
| -1 | -2 | PERMISSION DENIED, voir flag EPP ou $dist_id n’est pas Registrant ou Admin Contact |
| -1 | -3 | La période est incohérente |
| -1 | -4 | Le nom de domaine n’est pas défini |
| 0 | 0 | Le nom domaine n’existe pas dans notre base de données |
| 1 | TID | (OK voir ‘tid’ transaction ID pour api_status() ) |
Les contraintes de statuts pour domaine_renew
L'opération de renew est refusé si l'un des statuts suivant est présent: clientRenewProhibited serverRenewProhibited clientUpdateProhibited serverUpdateProhibited pendingCreate pendingDelete pendingRenew pendingTransfer pendingUpdate
Exemple PHP:
/* Renouvellement d'un nom de domaine -------------------------------- */ $period = 5; // Renouvellement pour 5 ans echo "domain_renew() \n"; $result = $client->domain_renew( $dist_id, $dist_passwd, $newdomain['domain'], $period ); print_r( $result ); if ( $result['retcode'] != 1 ) die( "Ca ne fonctionne pas !" ); $tid = $result['retfields']['tid']; echo "api_status() transaction $tid\n"; $result = $client->api_status( $dist_id, $dist_passwd, $tid ); print_r( $result );
Exemple Perl:
# Renouvellement d'un nom de domaine print "domain_renew()\n"; my $period = 5; # Renouvellement pour 5 ans; $result = $client->domain_renew( $dist_id, $dist_passwd, $newdomain{'domain'}, $period ); print Data::Dumper->Dump([$result->result]); if ($result->result->{'retcode'} !=1) { die "Ca ne fonctionne pas !\n"; }; $tid = $result->result->{'retval'};
Typage:
function domain_update( $dist_id, $dist_passwd, $domain, $array_domain )
Valeurs de retour:
| retcode | retval | Commentaire |
|---|---|---|
| -1 | -1 | $dist_id ou $dist_passwd invalide |
| -1 | -2 | PERMISSION DENIED, voir flag EPP ou $dist_id n’est pas Registrant ou Admin Contact |
| -1 | -3 | Il manque des éléments au tableau $array_domain |
| -1 | -4 | owner_id ou admin_id ou tech_id ou bill_id n’est pas valable |
| -1 | -5 | Le nom de domaine n’est pas défini |
| -1 | -6 | Les DNS ne sont pas configurés convenablement pour un .FR (voir: http://www.afnic.fr/outils/zonecheck/) |
| -1 | -7 | DNS invalide ou Zone invalide pour les .FR ZoneCheck |
| 0 | 0 | Le nom de domaine n’existe pas dans notre base de données |
| 1 | TID | (OK voir ‘tid’ transaction ID pour api_status() ) |
[retcode] => 1 [retval] => 278 [retfields] => Array ( [tid] => 278 )
Les contraintes de statuts pour domaine_update
admin_id / tech_id / bill_id ne sont modifiable que si $dist_id == $owner_id ou $dist_id == $admin_id L'opération de mise a jour est refusé si l'un des status suivant est présent: clientUpdateProhibited serverUpdateProhibited pendingCreate pendingDelete pendingRenew pendingTransfer pendingUpdate
Exemple PHP:
/* Update d'un nom de domaine ---------------------------------------- */ // un exemple de $newdomain est defini dans domain_create $upddomain = $newdomain; // il est possible de definir jusqu'a 13 DNS $upddomain['ns1'] = "ns0.free.org"; $upddomain['ns2'] = "ns1.free.org"; // Changement de contact Technique $upddomain['tech_id'] = $tech_id; // Changement de contact de Facturation $upddomain['bill_id'] = $bill_id; // 64 = Transfer Prohibited, 0 = Transfer Granted $upddomain['registry_status'] = 64; // Changement de l'AuthCode EPP $upddomain['authinfo'] = "NewEPPcode"; echo "domain_update() \n"; $result = $client->domain_update( $dist_id, $dist_passwd, $newdomain['domain'], $upddomain ); print_r( $result ); if ( $result['retcode'] != 1 ) die( "Ca ne fonctionne pas !" ); $tid = $result['retfields']['tid']; echo "api_status() transaction $tid\n"; $result = $client->api_status( $dist_id, $dist_passwd, $tid ); print_r( $result );
Exemple Perl:
# Update d'un nom de domaine print "domain_update()\n"; my %upddomain = %newdomain; $upddomain{'ns2'} = "ns0.free.org"; $upddomain{'ns3'} = "ns1.free.org"; $upddomain{'ns4'} = "ns0.proxad.net"; $upddomain{'ns5'} = "ns1.proxad.net"; $upddomain{'tech_id'} = $tech_id; $upddomain{'bill_id'} = $bill_id; $result = $client->domain_update( $dist_id, $dist_passwd, $newdomain{'domain'}, SOAP::Data->type(map => \%upddomain) ); print Data::Dumper->Dump([$result->result]); if ($result->result->{'retcode'} !=1) { die "Ca ne fonctionne pas !\n"; }; $tid = $result->result->{'retval'};
Typage:
function domain_delete( $dist_id, $dist_passwd, $domain )
Valeurs de retour:
| retcode | retval | Commentaire |
|---|---|---|
| -1 | -1 | $dist_id ou $dist_passwd invalide |
| -1 | -2 | PERMISSION DENIED, voir flag EPP ou $dist_id n’est pas Registrant ou Admin Contact |
| -1 | -3 | Il y a déjà une commande Delete en cours pour ce nom de domaine |
| -1 | -4 | Le nom de domaine n’est pas défini |
| 0 | 0 | Le nom de domaine n’existe pas dans notre base de données |
| 1 | TID | (OK voir ‘tid’ transaction ID pour api_status() ) |
Exemple PHP:
/* Delete d'un nom de domaine ---------------------------------------- */ echo "domain_delete() \n"; $result = $client->domain_delete( $dist_id, $dist_passwd, $newdomain['domain'] ); print_r( $result ); if ( $result['retcode'] == 1 ) { $tid = $result['retfields']['tid']; echo "api_status() transaction $tid\n"; $result = $client->api_status( $dist_id, $dist_passwd, $tid ); print_r( $result ); }
Exemple Perl:
# Delete d'un nom de domaine print "domain_delete()\n"; $result = $client->domain_delete( $dist_id, $dist_passwd, $newdomain{'domain'} ); print Data::Dumper->Dump([$result->result]); if ($result->result->{'retcode'} !=1) { die "Ca ne fonctionne pas !\n"; }; $tid = $result->result->{'retval'};
Typage:
function domain_info( $dist_id, $dist_passwd, $domain )
Valeurs de retour:
| retcode | retval | Commentaire |
|---|---|---|
| -1 | -1 | $dist_id ou $dist_passwd invalide |
| -1 | -2 | $dist_id n’est pas Contact (owner/admin/tech/bill) (permission denied) |
| -1 | -3 | Le nom de domaine n’est pas défini |
| 0 | 0 | Le nom domaine n’existe pas dans notre base de données |
| 1 | ID | (OK, ID = domain_id + tableau d’info) |
[retcode] => 1 [retval] => 141958 [retfields] => Array ( [id] => 141958 [lastupdate] => 2006-09-26 21:43:10 [lastupdate_ip] => 88.191.249.162 [domain] => demo-now-1159299779.com [registrar_creation] => 2006-09-26 21:43:10 [registrar_expiration] => 2010-09-26 21:43:10 [authinfo] => hqruzKPTYZ13 [service] => dns [ip_dns_master] => [status] => Active [registry_status] => 64 [ns0] => ns0.free.org [ns1] => ns1.free.org [ns2] => ns3.free.org [bill_id] => 127743 [tech_id] => 127743 [admin_id] => 13490 [owner_id] => 151049 )
Exemple PHP:
/* Information a propos d'un nom de domaine -------------------------- */ echo "domain_info()\n"; $result = $client->domain_info( $dist_id, $dist_passwd, $newdomain['domain'] ); print_r( $result );
Exemple Perl:
# Information a propos d'un nom de domaine print "domain_info()\n"; $result = $client->domain_info( $dist_id, $dist_passwd, $newdomain{'domain'} ); print Data::Dumper->Dump([$result->result->{'retfields'}]);
Typage
function domain_list( $dist_id, $dist_passwd, $role )
$role est soit vide pour obtenir la liste de tout les noms de domaine ou $dist_id est l’un des contacts, soit une string qui va contenir les champs “Owner Admin Tech Bill” avec un espace comme séparateur (pour limiter la liste aux noms de domaine ou $dist_id est contacts du/des type/s défini)
Valeurs de retour:
| retcode | retval | Commentaire |
|---|---|---|
| -1 | -1 | $dist_id ou $dist_passwd invalide |
retourne un tableau avec les noms de domaine et la date d’expiration au registre sous la forme d’un décimal qui représente le nombre de seconde depuis le 1 Janvier 1970, 0h, 0m, 0s UTC (voir time(3))
Exemple PHP:
/* Liste des domaines (et date d'expiration) dont le revendeur ------- */ /* $dist_id est l'un des contacts (Owner/Admin/Tech/Bill) ------------ */ echo "domain_list() contact $dist_id\n"; $result = $client->domain_list( $dist_id, $dist_passwd ); print_r( $result );
Exemple Perl:
# Liste des domaines (et date d'expiration) dont le revendeur # $dist_id est l'un des contacts (Owner/Admin/Tech/Bill) print "domain_list() contact $dist_id\n"; $result = $client->domain_list( $dist_id, $dist_passwd ); print Data::Dumper->Dump([$result->result->{'retfields'}]);
Typage:
function domain_transfer( $dist_id, $dist_passwd, $domain, $authkey, $extid )
$extid c’est le numéro d’id d’un contact qui n’est utilisé que dans le cas des transferts de noms de domaine .FR pour tout les autres TLD ou ccTLD $extid peut etre omis.
Valeurs de retour:
| retcode | retval | Commentaire |
|---|---|---|
| -1 | -1 | $dist_id ou $dist_passwd invalide |
| -1 | -2 | Le nom de domaine est en status pending |
| -1 | -3 | Le nom de domaine locker/transfer/update prohibited |
| -1 | -4 | erreur de parsing whois |
| -1 | -5 | erreur de login_id |
| -1 | -6 | acces denied |
| -1 | -7 | Impossible de demander le transfert pour ce TLD ou nom domaine |
| -1 | -8 | Le nom de domaine a été créé il y a moins de 2 mois |