INTERFACE POUR REVENDEUR DE NOM DE DOMAINE

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.

Sommaire



Devenir revendeur de nom 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:

  • Etape 1: Ouvrir un compte sur notre site web http://www.bookmyname.com
  • Etape 2: Nous fournir l’identifiant de ce compte à ainsi que l’adresse IP ou la plage IP que vous utiliserez pour vos connexions a l’API
  • Etape 3: Vous recevrez par Email les accès à la plateforme de test, ainsi que les documents administratifs à nous retourner par la poste
  • Etape 4: Une fois que vous aurez validé quelques scenari sur la plateforme de test, vous recevrez les accès à la plateforme de production

Généralités

Les 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

Les fonctions de l'API

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:

. domain_create, domain_renew, domain_update, domain_delete, domain_transfer
. host_create, host_update, host_delete

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'}]);