Version #2.02 du 1 Mars 2011

   

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 15 Avril 2009 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,99 € HT / an
.NET Verisign GRS 5,99 € HT / an
.ORG PIR 5,99 € HT / an
.BIZ NeuLevel 5,99 € HT / an
.INFO Afilias 5,99 € HT / an
.NAME GNR 5,99 € HT / an
.TEL TelNIC 6,99 € HT / an
.MOBI dotMobi 9,99 € HT / an
.ASIA DotAsia 9,99 € HT / an
.EU EurID 4,99 € HT / an
.FR (France) AFNIC 4,99 € HT / an
.BE (Belgique) Dns.BE 4,99 € HT / an
.US (USA) NeuStar 9,99 € HT / an
.ME Domain.me 9,99 € HT / an
.TW (Taiwan) TWNIC 15,00 € HT / an
.CO.UK Nominet 4,99 € HT / an
.ORG.UK Nominet 4,99 € HT / an
.WF (Wallis et Futuna) AFNIC 4,99 € HT / an
.TF (Terres Australes et Antarctiques) AFNIC 4,99 € HT / an
.RE (Ile de la Réunion) AFNIC 4,99 € HT / an
.PM (Saint-Pierre et Miquelon) AFNIC 4,99 € HT / an
.YT (Mayotte) AFNIC 4,99 € HT / an

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 (société) ayant au minimum 50 Euros HT de facturation mensuelle (a l’exception des premiers mois d’activité).

Les 3 étapes pour devenir revendeur de nom de domaine:

  • Etape 1: Faire une demande d’ouverture de compte sur notre site web a l’URL https://www.bookmyname.com/revendeur.cgi
  • Etape 2: Vous recevrez par Email les accès à la plateforme de test, ainsi que les documents administratifs à nous retourner par la poste.
  • Etape 3: Une fois que nous aurons recu par la poste le contrat que ne vous envoyons a l’etape 2, et que vous aurez validé quelques scenari sur notre 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.bookmyname.com 4343
Production das.bookmyname.com 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.bookmyname.com -p 4343 “get 1.0 mondomaine-a-moi.org”

Plateforme Hostname Port TCP
OT&E api.dev.bookmyname.com 80
Production api.bookmyname.com 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.bookmyname.com
nom du domaine bookmyname.com

L’adresse IP de ns0.bookmyname.com doit être fourni au registre qui gere les noms de domaine en .com (Verisign). 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
registry_status 0×8000 serverTradeProhibited

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",    // enum('parking','redir','dns','dnsslave','dnsperso')
        "ip_dns_master"  => "", // si dnsslave => fournir l'IP du master
        "ns0"  => "nsa.bookmyname.com", // jusqu'a 13 DNS pour un update
        "ns1"  => "nsb.bookmyname.com"  // ou maxi 4 pour une creation
        "ns2"  => "nsc.bookmyname.com"  // 
        "ipns0"  => "",
        "ipns1"  => "",
        "ipns2"  => "62.210.98.15", // glue record (si besoin) voir aussi les fonctions host_()
  
        // 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','DUNS','LOCAL')
 
        "dotfr_marque" => "",       // une marque de l'INPI
 
	// pour une société hors de France mais domicilié dans un pays membres de l'union européenne
        "dotfr_duns" => "",         // http://en.wikipedia.org/wiki/Data_Universal_Numbering_System
        "dotfr_local" => "",        // un identifiant local au pays (équivalent SIRET)
 
	// 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();
        "dotfr_restricted_publication" => "yes",   // yes = whois anonyme, no = information visible
 
 
	// 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" => "",     // 
 
	// Extensions (utile uniquement pour le ccTLD .UK)
        "dotuk_mode" => "",           // Registrant types. http://www.nominet.org.uk/registrars/systems/data/regtype/
                                      // enum('LTD','PLC','IND','FIND','RCHAR','SCH','LLP','STRA','PTNR','GOV','CRC','STAT','FCORP','IP','OTHER','FOTHER')
        "dotuk_locality" => "",
        "dotuk_county" => "",
        "dotuk_trad_name" => "",
        "dotuk_co_number" => "",
 
        );

Avant toute opération vous devez construire un objet SoapClient

Exemple PHP 5.1:

    $client = new SoapClient( NULL,
        array(  'location' => "http://api.dev.bookmyname.com/apis.cgi",
                'uri' => "http://api.dev.bookmyname.com/apis.cgi",
                'encoding'=>'UTF-8'
                )
            );

Exemple Perl:

    use SOAP::Lite;
 
    my $client = SOAP::Lite
        -> uri('http://api.dev.bookmyname.com/apis.cgi')
        -> proxy('http://api.dev.bookmyname.com/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
        
	// Extensions (utile uniquement pour le ccTLD .UK)
        "dotuk_mode" => "",           // Registrant types. http://www.nominet.org.uk/registrars/systems/data/regtype/
                                      // enum('LTD','PLC','IND','FIND','RCHAR','SCH','LLP','STRA','PTNR','GOV','CRC','STAT','FCORP','IP','OTHER','FOTHER')
        "dotuk_locality" => "",
        "dotuk_county" => "",
        "dotuk_trad_name" => "",
        "dotuk_co_number" => "",
 
);
 
    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[])

ATTENTION dans certain cas il n’est pas possible de modifier les informations.

Par exemple dans le cas ou le contact est utilisé comme titulaire d’un nom de domaine

  • la forme juridique n’est pas modifiable
  • la société n’est pas modifiable
  • si particulier la civilité n’est pas modifiable
  • si particulier le nom n’est pas modifiable
  • si particulier le prénom n’est pas modifiable
  • le pays n’est pas modifiable

ou le cas ou le contact est utilisé comme contact de facturation d’un nom de domaine

  • le pays n’est pas modifiable
[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( $dist_id, $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 -8 DNS invalide (le hostname n’existe pas au registre)
-1 -9 DNS invalide (pas d’adresse IP pour cree une glue)
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",    // enum('parking','redir','dns','dnsslave','dnsperso')
        "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
-1 -8 DNS invalide (le hostname n’existe pas au registre)
-1 -9 DNS invalide (pas d’adresse IP pour cree une glue)
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 la fonction domain_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 statuts suivant est présent:
  
clientUpdateProhibited
serverUpdateProhibited
pendingCreate
pendingDelete
pendingRenew
pendingTransfer
pendingUpdate

Les éléments indispensable a $array_domain de la commande domain_update() sont: domain, owner_id, admin_id, tech_id, bill_id, service

Les valeurs possibles pour pour la modification via l’API de ‘registry_status’ sont: 0 (aucun), 4 pour clientHold et 64 pour clientTransferProhibited. La liste de l’ensemble des valeurs possibles pour ‘registry_status’ est défini dans domain_info()

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'] = "nsa.bookmyname.com";
    $upddomain['ns2'] = "nsb.bookmyname.com";
    $upddomain['ns3'] = "nsc.bookmyname.com";
    // 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{'ns1'} = "nsa.bookmyname.com";
    $upddomain{'ns2'} = "nsb.bookmyname.com";
    $upddomain{'ns3'} = "nsc.bookmyname.com";
    $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/distrib) (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)

La valeur de ‘registry_status’ est un OR entre les valeurs du tableau suivant:

flags EPP valeur
clientDeleteProhibited 0×00000001
serverDeleteProhibited 0×00000002
clientHold 0×00000004
serverHold 0×00000008
clientRenewProhibited 0×00000010
serverRenewProhibited 0×00000020
clientTransferProhibited 0×00000040
serverTransferProhibited 0×00000080
clientUpdateProhibited 0×00000100
serverUpdateProhibited 0×00000200
pendingCreate 0×00000400
pendingDelete 0×00000800
pendingRenew 0×00001000
pendingTransfer 0×00002000
pendingUpdate 0×00004000
serverTradeProhibited 0×00008000

[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
        [owner_id] => 151049
        [admin_id] => 13490
        [tech_id] => 127743
        [bill_id] => 127743
        [dist_id] => 0         // si valeur != 0 => revendeur 
    )

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 ou authkey invalide
-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
-1 -9 Le nom de domaine ou le authkey n’est pas défini
-1 -10 $extid est absent ou invalide
-1 -11 Trop de demande de transfert/relance pour le meme nom de domaine sur une periode de 24 heures
-1 -12 Le transfert est deja en cours dans un etat transitoire
1 TID (voir aussi ‘tid’ et ‘owner_id’)

En cas d’échec de transfert (authkey invalide, non réponse au vote, e-mail du whois de l’ancien registrar invalide, etc.) il est possible de le relancer par la commande ‘domain_transfer()’. Cette opération de relance n’engendre aucune facturation.

ATTENTION: pour les gTLD la commande domain_transfert() envoi automatiquement un e-mail de demande d’acceptation du transfert au titulaire et admin contact du nom de domaine. Ce mail est envoye avec un From: et des URL propre a chaque distributeur.

Exemple PHP:

    /* Transfert d'un nom de domaine ------------------------------------- */
    /* ATTENTION: pour les gTLD envoi un e-mail de demande d'acceptation   */
    /* du transfert au titulaire et admin contact du nom de domaine        */
 
    $domain = "un-de-mes-domaines.com";
    $authkey = "1234secret5678";
    $result = $client->domain_transfer( $dist_id, $dist_passwd, $domain, $authkey );
    print_r( $result );
 
    /* relance un transfert */
    $authkey = "NewSecret5678";
    $result = $client->domain_transfer( $dist_id, $dist_passwd, $domain, $authkey );
    print_r( $result );

Exemple Perl:

    # Transfert d'un nom de domaine
 
    print "domain_transfer() un-de-mes-domaines.com\n";
    $result = $client->domain_transfer( $dist_id, $dist_passwd, 
        "un-de-mes-domaines.com", SOAP::Data->type(string =>"123secret456") );
 
    if ($result->result->{'retcode'} !=1)
    {
        die "Ca ne fonctionne pas !\n";
    };
    $tid = $result->result->{'retval'};

Typage:

function domain_transferable( $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 ou authkey invalide
-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
-1 -9 Le nom de domaine ou le authkey n’est pas défini
-1 -10 $extid est absent ou invalide
-1 -12 Le transfert est deja en cours dans un etat transitoire
1 0 Le transfert est possible

Cette fonction permet de controler qu’il est possible de lancer le domain_transfer() d’un nom de domaine. (controle du authkey,etc.)

Typage:

function domain_trade( $dist_id, $dist_passwd, $domain, $newowner_id )

$newowner_id est le numéro d’id d’un contact.

Valeurs de retour:

retcode retval Commentaire
-1 -1 $dist_id ou $dist_passwd invalide
-1 -2 Le nom de domaine ou $newowner_id n’est pas défini ou vide
-1 -3 Le nom de domaine n’existe pas dans notre base de donnée
-1 -4 Action impossible sur ce TLD
-1 -5 newowner_id est invalide ou son contenu incomplet ou invalide
1 TID (OK voir tid transaction ID pour api_status() )

La fonction domain_trade() est utilisable pour les TLDs: ‘eu’,’be’ ,’fr’, ‘com’,’net’,’org’,’biz’,’info’,’name’,’mobi’,’us’, ‘tw’,’cn’,’asia’,’me’

Le ou les fichier PDF a faxer pour confirmer de l’opération de trade sont aux URL défini dans [retfields][faxseller] et [retfields][faxbuyer] pour les .BE et .EU et dans [retfields][faxtrade] pour les autres TLDs.

Pour les .BE et .EU: Le telechargement et l’utilisation des PDF de trade est limité dans le temps a 14 jours (limite des registres). Ils sont disponiblent au telechargement 1h apres la demande a notre API.

Exemple de retour de commande domain_trade()

[retcode] => 1
[retval] => 141958
[retfields] => Array
    (
        [tid] => 141958
        [tld] => "eu"
        [faxseller] => "http://www.bookmyname.com/getfaxtrade.cgi?cid=1234&mode=0"
        [faxbuyer] => "http://www.bookmyname.com/getfaxtrade.cgi?cid=1234&mode=1"
    )
[retcode] => 1
[retval] => 141958
[retfields] => Array
    (
        [tid] => 141958
        [tld] => "com"
        [faxtrade] => "http://www.bookmyname.com/getfaxtrade.cgi?sid=1234567"
    )

Typage:

function domain_restore( $dist_id, $dist_passwd, $domain )

Cette fonction n’est utilisable qu’avec les TLD .COM .NET .ORG .EU .BE et .FR

Valeurs de retour:

retcode retval Commentaire
-1 -1 $dist_id ou $dist_passwd invalide
-1 -2 Le nom de domaine n’est pas défini ou vide
-1 -3 Le nom de domaine n’existe pas dans notre base de donnée
-1 -4 Action impossible sur ce TLD
-1 -5 Restore impossible (nom de domaine absent de la base ou pas d’archive)
-1 -6 Restore impossible (probleme de période/date)
1 TID (OK voir tid transaction ID pour api_status() )

Typage:

function domain_restorable( $dist_id, $dist_passwd, $domain )

Cette fonction n’est utilisable qu’avec les TLD .COM .NET .ORG .EU .BE et .FR

Valeurs de retour:

retcode retval Commentaire
-1 -1 $dist_id ou $dist_passwd invalide
-1 -2 Le nom de domaine n’est pas défini ou vide
-1 -3 Le nom de domaine n’existe pas dans notre base de donnée
-1 -4 Action impossible sur ce TLD
-1 -5 Restore impossible (nom de domaine absent de la base ou pas d’archive)
-1 -6 Restore impossible (probleme de période/date)
1 TID (OK voir tid transaction ID pour api_status() )

Cette fonction permet de controler qu’il est possible de lancer le domain_restore() d’un nom de domaine.


Gestion des services (redirection)

ATTENTION, l'utilisation du service de redirection engendre systématiquement le remplacement des DNS du nom de domaine par ceux configurés pour nos services.

Typage

function service_redir_create( $dist_id, $passwd, $domain, $type, $source, $destination )

Valeurs de retour:

retcode retval Commentaire
-1 -1 $dist_id ou $dist_passwd invalide
-1 -2 $dist_id n’est pas owner/admin/tech du nom de domaine $domain
-1 -3 $source ou $destination invalide
1 n ok

$type doit avoir l'une des valeurs :

'web' pour les redirections web (de type 302)
'web302' pour les redirections web (de type 302)
'web301' pour les redirections web (de type 301)
'rweb' pour les redirections web transparente (avec frame)
'mail' pour les redirections mail

 Si $type == 'web' ou 'rweb'

  'source' est de la forme : http://qqchose.mondomaine.tld
  'destination' est de la forme: http://sous-domaine.domaine.tld/repertoire/fichier.html
  
  la destination peut etre une URL http, https ou ftp
 
 Si $type == 'email'

  'source' est de la forme : webmaster@mondomaine.tld
  'destination' est de la forme : mon.nom@monfai.tld

  la source comme la destination doivent etre syntaxiquement valide voir RFC
  et un A ou MX doit exister pour le nom de domaine de destination.

Typage

function service_redir_list( $dist_id, $passwd, $domain, $type )

Valeurs de retour:

retcode retval Commentaire
-1 -1 $dist_id ou $dist_passwd invalide
1 1 OK (la liste des redirections est dans ‘retfields’)

$type doit avoir l'une des valeurs :

'web' pour les redirections web
'rweb' pour les redirections web transparente (avec frame)
'mail' pour les redirections mail

La liste des redirections est dans ‘retfields’ exemple:

  [retfields] => Array
      (
          [http://create.registrarfrance.com] => http://www.bookmyname.com/create.cgi
          [http://blog.registrar.com]         => http://blog.bookmyname.com/parlerpournedire.html
      )

Typage

function service_redir_delete( $dist_id, $passwd, $domain, $type, $source, $destination )

Valeurs de retour:

retcode retval Commentaire
-1 -1 $dist_id ou $dist_passwd invalide
-1 -2 $dist_id n’est pas owner/admin/tech du nom de domaine $domain
-1 -3 il n’existe pas de redirection du type $type avec $source et $destination
-1 -4 Flag EPP qui interdit l’operation
1 1 OK (la redirection a été effacé

$type doit avoir l'une des valeurs :

'web' pour les redirections web
'rweb' pour les redirections web transparente (avec frame)
'mail' pour les redirections mail

Typage

function service_dns_custom_get( $dist_id, $passwd, $domain )

Valeurs de retour:

retcode retval Commentaire
-1 -1 $dist_id ou $dist_passwd invalide
-1 -2 l’on ne gere pas le nom de domaine
-1 -3 $dist_id n’a pas les droits pour ce nom de domaine
1 1 OK (la liste des entrees du DNS custom est dans ‘retfields’)

Exemple PHP:

    $domain = "dnsperso-nom-de-domaine.com";
    $result = $client->service_dns_custom_get( $dist_id, $dist_passwd, $domain );
    if ( $result['retcode'] == -1 ) {
        // erreur
        }
    print_r( $result );

La liste des entrees de la zone DNS est dans ‘retfields’ exemple:

  [retfields] => Array
      (
          [0] => Array
              (
                  [name] => blog
                  [ttl] => 28800
                  [type] => CNAME
                  [value] => dublabla.registrarfrancais.com.
              )
          [1] => Array
              (
                  [name] => www
                  [ttl] => 28800
                  [type] => A
                  [value] => 88.191.249.162
              )
          [2] => Array
              (
                  [name] => ipv6-free
                  [ttl] => 28800
                  [type] => AAAA
                  [value] => 2a01:5d8:e200::1
              )
)

Typage

function service_dns_custom_set( $dist_id, $passwd, $domain, $zone )

Valeurs de retour:

retcode retval Commentaire
-1 -1 $dist_id ou $dist_passwd invalide
-1 -2 l’on ne gere pas le nom de domaine
-1 -3 $dist_id n’a pas les droits pour ce nom de domaine
-1 -4 fichier $zonefile invalide
1 n OK (n=nombre d’entree de la zone)

La zone DNS presente dans $zone, peu contenir des entrees de type: A MX NS CNAME AAAA WKS TXT SRV

Exemple PHP:

    $domain = "dnsperso-nom-de-domaine.com";
    $zone = "www A 88.191.249.162\nmail A 88.191.249.132\n".$domain.". MX 10 mail\n";
    $result = service_dns_custom_set($dist_id, $dist_passwd, $domain, $zone);

Typage

function service_mbox_create( $dist_id, $passwd, $domain, $mbox_name, $mbox_passwd, $mbox_quota )

Valeurs de retour:

retcode retval Commentaire
-1 -1 $dist_id ou $dist_passwd invalide
-1 -2 $dist_id n’a pas les droits sur le nom de domaine
-1 -3 overquota pour les BAL de ce nom de domaine
1 1 opération réalisée

Typage

function service_mbox_delete( $dist_id, $passwd, $domain, $mbox_name )

Valeurs de retour:

retcode retval Commentaire
-1 -1 $dist_id ou $dist_passwd invalide
-1 -2 $dist_id n’a pas les droits sur le nom de domaine
1 1 opération réalisée

Typage

function service_mbox_list( $dist_id, $passwd, $domain )

Valeurs de retour:

retcode retval Commentaire
-1 -1 $dist_id ou $dist_passwd invalide
-1 -2 $dist_id n’a pas les droits sur le nom de domaine
1 1 opération réalisée, données dans retfields


Gestion des hosts (glue record)

Typage

function host_create( $dist_id, $passwd, $hostname, $array_ip )

Valeurs de retour:

retcode retval Commentaire
-1 -1 $dist_id ou $dist_passwd invalide
-1 -2 $ip non valide
-1 -3 $hostname non valide
-1 -4 On ne gère pas le nom de domaine pour ce hostname
-1 -5 $dist_id n’a pas les droits sur le nom de domaine
-1 -6 une glue existe déjà (⇒ update)
1 TID ok + retfields

Exemple PHP:

    /* Creation d'une glue record sur un nom de domaine que l'on gere ---- */
 
    /* glue record a plusieurs IPs */
    $array_ip = array ( "88.191.249.1", "88.191.249.2", "88.191.249.3" );
    $hostname = "glue1.".$domain;
 
    echo "host_create() $hostname\n";
    $result = $client->host_create( $dist_id, $dist_passwd, $hostname, $array_ip );
    print_r( $result );
 
    $array_ip = array ( "88.191.249.4", "88.191.249.5" );
    $hostname = "glue2.".$domain;
    echo "host_create() $hostname\n";
    $result = $client->host_create( $dist_id, $dist_passwd, $hostname, $array_ip );
    print_r( $result );
 
    /* le cas le plus frequent, juste une IP pour la glue */
    $array_ip = array ( "88.191.249.6" );
    $hostname = "glue3.".$domain;
    echo "host_create() $hostname\n";
    $result = $client->host_create( $dist_id, $dist_passwd, $hostname, $array_ip );
    print_r( $result );
 
    /* glue directement sur le nom de domaine */
    $array_ip = array ( "88.191.249.7" );
    $hostname = $domain;
    echo "host_create() $hostname\n";
    $result = $client->host_create( $dist_id, $dist_passwd, $hostname, $array_ip );
    print_r( $result );

Exemple Perl:

    # creation d'un host
 
    my $hostname;
    print "host_create()\n";
    $hostname = "ns1test-$$.bookmyname.com";
    print "ns1test-$$.bookmyname.com\n";
    my @ips =  ("88.191.249.1","88.191.249.2", "88.191.249.3" );
    $result = $client->host_create( $dist_id, $dist_passwd, 
        $hostname, SOAP::Data->type(Array => \@ips));
    if ($result->result->{'retcode'} !=1)
    {
        print Data::Dumper->Dump([$result->result]);
        die "Ca ne fonctionne pas !\n";
    };
    $tid = $result->result->{'retval'};

Typage:

function host_update( $dist_id, $passwd, $hostname, $array_ip )

Valeurs de retour:

retcode retval Commentaire
-1 -1 $dist_id ou $dist_passwd invalide
-1 -2 $ip non valide
-1 -3 $hostname non valide
-1 -4 On ne gère pas le domaine pour ce hostname
-1 -5 $dist_id n’a pas les droits sur le nom de domaine
-1 -6 Il n’existe pas de glue pour ce hostname
1 TID ok + retfields

Exemple PHP:

    /* Update d'une glue ------------------------------------------------- */
 
    $hostname = "glue3.".$domain;
    $array_ip = array ( "88.191.249.6", "88.191.249.5", "88.191.249.4" );
    echo "host_update() $hostname\n";
    $result = $client->host_update( $dist_id, $dist_passwd, $hostname, $array_ip );
    print_r( $result );

Exemple Perl:

    # update d'un host
 
    print "host_update()\n";
    my @ips =  ("88.191.249.6");
 
    $result = $client->host_update( $dist_id, $dist_passwd, $hostname, 
        SOAP::Data->type(Array => \@ips));
    if ($result->result->{'retcode'} !=1)
    {
        print Data::Dumper->Dump([$result->result]);
        die "Ca ne fonctionne pas !\n";
    };
    $tid = $result->result->{'retval'};

Typage:

function host_delete( $dist_id, $passwd, $hostname )

Valeurs de retour:

retcode retval Commentaire
-1 -1 $dist_id ou $dist_passwd invalide
-1 -3 $hostname non valide
-1 -4 On ne gère pas le nom de domaine pour ce hostname
-1 -5 $dist_id n’a pas les droits sur le nom de domaine
-1 -6 Il n’existe pas de glue pour ce hostname
1 TID ok + retfields

Exemple PHP:

    /* Delete d'une glue ------------------------------------------------- */
 
    $hostname = "glue2.".$domain;
    echo "host_delete() $hostname\n";
    $result = $client->host_delete( $dist_id, $dist_passwd, $hostname );
    print_r( $result );

Exemple Perl:

    # delete d'un host
 
    print "host_delete()\n";
    $result = $client->host_delete( $dist_id, $dist_passwd, $hostname );
 
    if ($result->result->{'retcode'} !=1)
    {
        print Data::Dumper->Dump([$result->result]);
        die "Ca ne fonctionne pas !\n";
    };
    $tid = $result->result->{'retval'};

Typage:

function host_list( $dist_id, $passwd, $domain )

Valeurs de retour:

retcode retval Commentaire
-1 -1 $dist_id ou $dist_passwd invalide
-1 -2 Probleme de droits ($dist_id doit être owner/admin/tech pour $domain)
-1 -3 $domain non défini
-1 -4 $domain n’existe pas

Typage:

function host_info( $dist_id, $passwd, $hostname )

Valeurs de retour:

retcode retval Commentaire
-1 -1 $dist_id ou $dist_passwd invalide
-1 -2 aucun $hostname
1 HID $hostid + données dans retfields[]

[retcode] => 1
[retval] => 13128
[retfields] => Array
    (
        [id] => 13128
        [hostname] => glue2.demo-now-1159299779.com
        [lastupdate] => 2006-09-26 21:43:10
        [ip0] => 88.191.249.4
        [ip1] => 88.191.249.5
    )

Exemple PHP:

    /* Liste des glues record d'un nom de domaine ------------------------ */
 
    echo "host_list() \n";
    $result = $client->host_list( $dist_id, $dist_passwd, $domain );
    print_r( $result );
 
    if ( $result['retcode'] != 1 )
        die( "Ca ne fonctionne pas !" );
 
    /* Information sur les IPs d'un hostname qui a une glue -------------- */
 
    $gluelist = $result['retfields'];
    for( $i=0; $i<count($gluelist); $i++ ) {
        $hostname = $gluelist[$i]['hostname'];
        echo "host_info() $hostname\n";
        $result = $client->host_info( $dist_id, $dist_passwd, $hostname );
        print_r( $result );
        }

Exemple Perl:

    # Les hosts d'un domaine et leurs ips
    # Hosts List && host_info
 
    print "host_list()\n";
    $result = $client->host_list($dist_id, $dist_passwd, 'bookmyname.com');
 
    if ($result->result->{'retcode'} !=1)
    {
        print Data::Dumper->Dump([$result->result]);
        die "Ca ne fonctionne pas !\n";
    };
    foreach my $host (map { $_->{'hostname'} } @{$result->result->{'retfields'}})
    {
        print "$host\n";
        $result = $client->host_info($dist_id, $dist_passwd,$host);
        if($result->result->{'retcode'} ==1)
        {
            print Data::Dumper->Dump([$result->result->{'retfields'}]);
        };
    };


Les fonctions propre à l’API

Typage:

function api_status( $dist_id, $dist_passwd, $tid, $restart )

 $tid = transaction ID 
  valeur de retour d'une des commandes:
  . domain_create, domain_renew, domain_update, domain_delete, domain_transfer 
  . host_create, host_update, host_delete
 $restart (absent ou a 0) => aucune action
           valeur a 1 => relance une operation en erreur (status='Error')

Valeurs de retour:

retcode retval Commentaire
-1 -1 $dist_id ou $dist_passwd invalide
0 0 Pas de transaction pour le TID fourni
1 TID (aussi ‘tid’ avec le numero de transaction)

retourne un tableau retfields[]

      Exemple pour un domain_create() en cours de création:

      [retfields] => Array
          (
              [tid] => 375
              [transaction_id] => 375
              [lastupdate] => 2006-10-04 17:04:56
              [requestdate] => 2006-10-04 17:04:56
              [action] => Create
              [reply_value] => 0
              [reply_msg] =>
              [period] => 1
              [type] => Domain
              [status] => ToProcess
          )

      Le contenu possible est :

      pour 'reply_value' et 'reply_msg': messages fourni par le registre 
             (verisign, pir, afilias, gnr, neulevel, dns.be, eurid, etc.)

      pour 'status': enum('Wait','ToProcess','Done','Error');

      pour 'type'  : enum('Contact','Domain','Host','Other');

      pour 'action': enum('Create','Renew','Update','Delete','Restore',
                          'TransferRequest','TransferCancel',
                          'TransferApprove','TransferReject' );

Le temps de traitement d’une transaction varie de quelques secondes (dans la majorité des cas) à plusieurs minutes voir heures lorsque les registres sont en maintenance, ce qui pour certain registre est fréquent (une fois par semaine).

Exemple PHP:

    /* api_status (pour connaitre l'etat d'une operation (fini,etc.) ----- */
 
    $tid = $transaction_id; // souvent present dans $result['retfields']['tid'];
    echo "api_status() transaction $tid\n";
    $result = $client->api_status( $dist_id, $dist_passwd, $tid );
    print_r( $result );

Exemple Perl:

    # api_status (pour savoir lorsque l'operation est fini)
 
    print "api_status() transaction $tid\n";
 
    $result = $client->api_status( $dist_id, $dist_passwd, $tid );
    print Data::Dumper->Dump([$result->result]);

Typage:

function api_pending_status( $dist_id, $dist_passwd, $period )

 $period (en mois de 1 a 12). Si absent = 4 mois.

Valeurs de retour:

retcode retval Commentaire
-1 -1 $dist_id ou $dist_passwd invalide
1 cnt cnt = nombre d’operation non fini pour le revendeur $dist_id

retourne un tableau retfields[]

Exemple de contenu:

 [0] => Array
  (
   [transaction_id] => 12345678
   [lastupdate] => 2010-12-01 16:00:26
   [requestdate] => 2010-12-01 16:00:17
   [action] => TransferRequest
   [reply_value] => 0
   [reply_msg] =>
   [type] => Domain
   [status] => ToProcess
   [domain] => un-nom-de-domaine.fr
   [etat] => Pending
  )
 [2] => Array
  (
   [transaction_id] => 12345679
   [lastupdate] => 2010-12-01 16:00:11
   [requestdate] => 2010-12-01 16:00:11
   [action] => TransferRequest
   [reply_value] => 0
   [reply_msg] =>
   [type] => Domain
   [status] => Wait
   [domain] => un-nom-de-domaine.com
   [etat] => AttenteVote 
  )
 [3] => Array
  (
   [transaction_id] => 12345680
   [lastupdate] => 2010-11-27 07:40:40
   [requestdate] => 2010-11-27 07:40:09
   [action] => Restore
   [reply_value] => 2304
   [reply_msg] => DomainReactivate un-nom-de-domaine.eu Object status prohibits operation
   [type] => Domain
   [status] => Error
   [domain] => un-nom-de-domaine.eu
  )
 [4] => Array
  (
   [transaction_id] => 12345681
   [lastupdate] => 2010-11-26 11:35:11
   [requestdate] => 2010-11-26 11:35:05
   [action] => Create
   [reply_value] => 2306
   [reply_msg] => ContactCreate BMN-1234567 [AAA1234-FREE / 123456] Parameter value policy error 'trademark' element value seems to be syntaxically incorrect according AFNIC rules
   [type] => Domain
   [status] => Error
   [domain] => un-nom-de-domaine.fr
  )
 [5] => Array
  (
   [transaction_id] => 12345682
   [lastupdate] => 2010-11-22 18:35:29
   [requestdate] => 2010-11-22 18:35:04
   [action] => Create
   [reply_value] => 2005
   [reply_msg] => ContactCreate BMN-1234567 [AAA1234-FREE / 123456] Parameter value syntax error
   [type] => Domain
   [status] => Error
   [domain] => un-nom-domaine.eu
  )
 [6] => Array
  (
   [transaction_id] => 1595671
   [lastupdate] => 2010-11-03 22:32:58
   [requestdate] => 2010-09-24 21:20:05
   [action] => TransferRequest
   [reply_value] => 2202
   [reply_msg] => DomainTransfer un-nom-de-domaine.com request Invalid authorization information
   [type] => Domain
   [status] => Error
   [domain] => un-nom-de-domaine.com
   [etat] => AuthKO
  )

Typage:

function api_paysid( $dist_id, $dist_passwd )

Valeurs de retour:

retcode retval Commentaire
1 n (n=nombre de pays)

Exemple PHP:

    // liste les pays_id (utilise pour les contacts)
    $result = $client->api_paysid(); 
    print_r( $result );

Exemple Perl:

    # liste les pays_id (utilise pour les contacts)
    $result = $client->api_paysid();
    if ($result->result->{'retcode'}==1)
    {
        for (my $cpt=0;$cpt<$result->result->{'retval'};++$cpt)
        {
            print Data::Dumper->Dump([$result->result->{'retfields'}->[$cpt]]);
        };
    };

Typage:

function api_regionsid( $dist_id, $dist_passwd )

Valeurs de retour:

retcode retval Commentaire
1 n (n=nombre de régions)

Exemple PHP:

    // liste les regions_id (utilise pour les contacts)
    $result = $client->api_regionsid();
    print_r( $result );

Exemple Perl:

    # liste les regions_id (utilise pour les contacts)
 
    $result = $client->api_regionsid();
    if ($result->result->{'retcode'}==1)
    {
        for (my $cpt=0;$cpt<$result->result->{'retval'};++$cpt)
        {
            print Data::Dumper->Dump([$result->result->{'retfields'}->[$cpt]]);
        };
    };

Typage:

function api_fr_cpville( $dist_id, $dist_passwd )

Valeurs de retour:

retcode retval Commentaire
1 n (n=nombre de régions)

Exemple PHP:

    // liste code postal / ville Francaise 
    // (utile dans le cas du lieu de naissance des contacts pour les .FR)
    $result = $client->api_fr_cpville();
    print_r( $result );

Liste des pays ou il est possible d'enregistrer un nom de domaine en .FR .RE .WF .TF .PM .YT

La liste des pays ou il est possible d’enregistrer un nom de domaine en .FR .RE .WF .TF .PM .YT est la suivante:

pays pays_id
ALLEMAGNE 12
AUTRICHE 31
BELGIQUE 11
BULGARIE 49
CHYPRE 72
DANEMARK 74
ESPAGNE 213
ESTONIE 83
FINLANDE 88
FRANCE 1
FRANCE - GUADELOUPE 100
FRANCE - GUYANE FRANCAISE 89
FRANCE - MARTINIQUE 149
FRANCE - MAYOTTE 152
FRANCE - NOUVELLE-CALEDONIE 166
FRANCE - POLYNESIE FRANCAISE 90
FRANCE - REUNION 189
FRANCE - SAINT-PIERRE-ET-MIQUELON 196
FRANCE - TERRES AUSTRALES FRANCAISES 91
FRANCE - WALLIS ET FUTUNA 247
GRECE 97
HONGRIE 111
IRLANDE 117
ISLANDE 112
ITALIE 13
LETTONIE 132
LIECHTENSTEIN 137
LITUANIE 138
LUXEMBOURG 139
MALTE 147
NORVEGE 174
PAYS-BAS 15
POLOGNE 185
PORTUGAL 186
ROUMANIE 190
ROYAUME-UNI 238
SLOVAQUIE 207
SLOVENIE 208
SUEDE 219
SUISSE 14
TCHEQUE, REPUBLIQUE 73

Copyright

2006-2011 © BookMyName

Nous écrire:

 
revendeur-de-nom-de-domaine.txt · Last modified: 2011/11/30 18:46
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki