Outils pour utilisateurs

Outils du site


api

Version #4.10 du 08 Novembre 2016

INTERFACE DE PROGRAMMATION POUR LA GESTION 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 1 Septembre 2016 l'API gère les noms de domaine pour les 313 extensions défini ici:

https://www.bookmyname.com/nom_de_domaine/tarif_nom_de_domaine.html

Cette API est utilisée depuis Octobre 2006 par des revendeurs qui gèrent plusieurs dizaines de millier de noms de domaine.

Sommaire



Devenir Partenaire pour la gestion de noms de domaine

L'API est reservée aux partenaire ayant au minimum 500 noms de domaine à gérer.

Les 3 étapes pour devenir partenaire:

  • Etape 1: Contacter notre support à https://www.bookmyname.com/contact.cgi
  • Etape 2: Vous recevrez par Email les accès à la plateforme de test, ainsi que les documents administratifs à nous retourner.
  • Etape 3: Une fois que nous aurons reçu par la poste le contrat que ne vous envoyons a l’étape 2, et que vous aurez validé quelques scenario 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 0x01 clientDeleteProhibited
registry_status 0x02 serverDeleteProhibited
registry_status 0x04 clientHold
registry_status 0x08 serverHold
registry_status 0x10 clientRenewProhibited
registry_status 0x20 serverRenewProhibited
registry_status 0x40 clientTransferProhibited
registry_status 0x80 serverTransferProhibited
registry_status 0x100 clientUpdateProhibited
registry_status 0x200 serverUpdateProhibited
registry_status 0x400 pendingCreate
registry_status 0x800 pendingDelete
registry_status 0x1000 pendingRenew
registry_status 0x2000 pendingTransfer
registry_status 0x4000 pendingUpdate
registry_status 0x8000 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')
	"langidn"  => "FRE",	// tag Verisign pour les IDN (voir la liste en fin de page)
        "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" => "",
 
	// Extensions (utile uniquement pour le ccTLD .IT)
 
            // En fonction du titulaire:
            // . Particulier Italien => Codice Fiscale (16 characteres).
            // . Particulier qui n'est pas Italien => Numéro de passport.
            // . Associations numero de TVA => "Pin" = "n.a."
            // . Dans tout les autres cas, le "Pin" doit être un numéro de TVA intracommunautaire
 
        "dotit_pin" => "",
 
	// Extensions (utile uniquement pour le ccTLD .NU)
 
            // . Particulier => Numéro de passport ou carte d'identité.
            // . Société => numéro de TVA intracommunautaire
 
        "dotnu_idno" => "",
 
        // Extensions (utile uniquement pour le ccTLD .ES)
 
            // contact espagnol => DNI/NIF (Numero d'identification fiscale).
            // contact étranger vivant en espagne => NIE (numéro d'identification des étrangers en Espagne).
            // contact hors d'espagne dans l'UE => (numéro de passport).
 
        "dotes_pin" => "",
 
        // Extensions (utile uniquement pour le .XXX
 
        "dotxxx_membership" => "",
 
        // Extensions (Uniregistry, pour les nTLDs d'Uniregistry)
 
        "dotu_emailalt"  => "ma.2ieme.adresse.email@free.fr", // facultative
        "dotu_mobile"    => "+33.612345678",                  // facultative
        "dotu_question1" => "question secrete1",              // obligatoire
        "dotu_answer1"   => "reponse secrete1",               // obligatoire
        "dotu_question2" => "question secrete2",              // obligatoire
        "dotu_answer2"   => "reponse secrete2",               // obligatoire
        "dotu_question3" => "question secrete3",              // obligatoire
        "dotu_answer3"   => "reponse secrete3",               // obligatoire
        "dotu_question4" => "question secrete4",              // facultative
        "dotu_answer4"   => "reponse secrete4",               // facultative
        "dotu_question5" => "question secrete5",              // facultative
        "dotu_answer5"   => "reponse secrete6",               // facultative
 
        );

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" => "",
 
	// Extensions (utile uniquement pour le ccTLD .IT)
 
            // En fonction du titulaire:
            // . Particulier Italien => Codice Fiscale (16 characteres).
            // . Particulier qui n'est pas Italien => Numéro de passport.
            // . Associations numero de TVA => "Pin" = "n.a."
            // . Dans tout les autres cas, le "Pin" doit être un numéro de TVA intracommunautaire
 
        "dotit_pin" => "",
 
 
        // Extensions (utile uniquement pour le ccTLD .ES)
 
            // contact espagnol => DNI/NIF (Numero d'identification fiscale).
            // contact étranger vivant en espagne => NIE (numéro d'identification des étrangers en Espagne).
            // contact hors d'espagne dans l'UE => (numéro de passport).
 
        "dotes_pin" => "",
 
	// Extensions (utile uniquement pour le ccTLD .NU)
 
            // . Particulier => Numéro de passport ou carte d'identité.
            // . Société => numéro de TVA intracommunautaire
 
        "dotnu_idno" => "",
 
        // Extensions (utile uniquement pour le .XXX
 
        "dotxxx_membership" => "",
 
        // Extensions (Uniregistry, pour les nTLDs d'Uniregistry)
 
        "dotu_emailalt"  => "ma.2ieme.adresse.email@free.fr", // facultative
        "dotu_mobile"    => "+33.612345678",                  // facultative
        "dotu_question1" => "question secrete1",              // obligatoire
        "dotu_answer1"   => "reponse secrete1",               // obligatoire
        "dotu_question2" => "question secrete2",              // obligatoire
        "dotu_answer2"   => "reponse secrete2",               // obligatoire
        "dotu_question3" => "question secrete3",              // obligatoire
        "dotu_answer3"   => "reponse secrete3",               // obligatoire
        "dotu_question4" => "question secrete4",              // facultative
        "dotu_answer4"   => "reponse secrete4",               // facultative
        "dotu_question5" => "question secrete5",              // facultative
        "dotu_answer5"   => "reponse secrete6",               // facultative
);
 
    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[])

Les valeurs de:

waps_ok 0 ou 1 le contacte est titulaire et a validé ses informations (1 ok, 0 invalide)
waps_email <adresse_email> adresse email
waps_lastupdate date-heure dernière mise à jour
waps_lastvalid date-heure dernière validation des informations depuis 12 mois
waps_lastemail date-heure dernière relance par email
waps_lastvalidkey date-heure - clef - IP dernière information validé
[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
        [waps_ok] => 1
        [waps_email] => contact@bookmyname.com
        [waps_lastupdate] => 2016-07-07 23:19:20
        [waps_lastvalid] => 2016-07-07 23:19:20
        [waps_lastemail] => 2016-07-05 10:50:57
        [waps_lastvalidkey] => 2016-07-07 23:19:20 - 0123456-qjYD9UfsdasP7TKGwrpy8TQs - 88.191.249.162
    )

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

Controle l'usage d'un contact pour chaque TLDs d'un tableau.

Typage:

function check_contact_create_tlds( $dist_id, $dist_passwd, $newcontact, $atlds );

$dist_id = distributeur ID
$dist_passwd = le mot de passe
$newcontact = un tableau avec les données du contact
$atlds = un tableau avec la liste des TLDs que l'on cherche à enregistrer

Valeurs de retour:

retcode retval Commentaire
-1 -1 $dist_id ou $dist_passwd invalide
0 0 OK (retourne un tableau retfields[])
-1 -4 ERREUR (retourne un tableau retfields[] et les erreurs)

Exemple PHP:

    $atlds = array( 'com','org','us','fr','link','eu','it' );
    $result = $client->check_contact_create_tlds( $dist_id, $dist_passwd, $newcontact, $atlds );

Envoie un mail de contrôle au titulaire d'un nom de domaine pour un gTLD ou nTLD délégué par l'ICANN.

Dans le cadre d'une procédure obligatoire que nous impose l'ICANN, (WAPS: Whois Accuracy Program Specification) nous devons effectuer une fois par an et à chaque modification des informations, une vérification de la validité des informations des titulaires de nom de domaine.

Typage:

function contact_mail_waps( $cid, $passwd, $owner_id );

$dist_id = distributeur ID
$dist_passwd = le mot de passe
$owner_id = id d'un contact titulaire de nom de domaine

Valeurs de retour:

retcode retval Commentaire
-1 -1 $dist_id ou $dist_passwd invalide
1 1 mail envoyé à l'adresse email du titulaire ($owner_id)
1 0 pas erreur mais aucune action (WAPS déjà validé, n'est pas titulaire ou sur un TLD non concerné)


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, $tlds )

$domain doit être fourni sans TLD

l'argument $tlds est facultatif, toutefois en raison du nombre de plus en plus important de TLD que nous supportons nous vous invitons a définir cette variable avec les TLDs que vous voulez fournir, faute de quoi le temps de réponse sera important.

Exemple: $tlds = “com net org info fr eu be”;

Nous avons pré-défini quelques valeurs pour $tlds:

'gtld' : tld générique historique ( com net org biz info mobi name asia tel xxx )
'ntld' : tous les nouveaux TLDs générique (a partir de 2013)
'cctld' : tous les ccTLDs
'cctld-fr' : le .fr et ses TLDs ultra-marin
'cctld-eu' : les ccTLDs en europe
'all' : l'ensemble des TLDs de l'API (attention le temps de réponse sera important.)

Pour des raisons historiques, si cette argument est absent, la fonction domain_multicheck() retourne l'information pour l'ensemble des TLDs que supporte l'API a l'exception des nTLD générique.

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 géré 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
        [xxx] => 1
        [tv] => 1
        [fm] => 1
        [it] => 1
        [de] => 1
        [eu] => 0
        [be] => 1
        [fr] => 1
        [boutique] => 1
        [photos] => 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() );
    $tlds = "com net org tv fm fr be es de it";
    $result = $client->domain_multicheck( $dist_id, $dist_passwd, $domain, $tlds );
    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
        "dist_id"  => $dist_id, // Contact 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)
-1 -10 problème de configuration DNSSEC (ds_records)
0 0 Le nom de domaine n'existe pas dans notre base de données
1 -1 Aucun changement de la base de données suite a la demande d'update
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['ns0'] = "nsa.bookmyname.com";
    $upddomain['ns1'] = "nsb.bookmyname.com";
    $upddomain['ns2'] = "nsc.bookmyname.com";
    // owner_id défini a la création (non modifiable)
    $upddomain['owner_id'] = $owner_id;
    // Changement de contact Technique
    $upddomain['tech_id'] = $tech_id;
    // Changement de contact de Facturation
    $upddomain['bill_id'] = $bill_id;
    // Changement de contact de Distributeur/Revendeur
    $upddomain['dist_id'] = $dist_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 !\n" );
 
    $tid = $result['retfields']['tid'];
    echo "api_status() transaction $tid\n";
    $result = $client->api_status( $dist_id, $dist_passwd, $tid );
    print_r( $result );
 
    /* Exemple de configuration pour DNSSEC ---------------------------- */
 
    // Afin d'avoir le éléments à remplir dans le tableau [dsrecords], vous devez entre autre lire
    // http://api.doc.bookmyname.com/revendeur-de-nom-de-domaine#info_dnssec
 
    $domain = 'mondomaine.com';
 
    echo "domain_info()\n";
    $result = $client->domain_info( $dist_id, $dist_passwd, $domain );
    if ( $result['retcode'] != 1 )
        die( "Ca fonctionne pas !\n" );
    print_r( $result );
 
    echo "domain_update()\n";
    $du['domain'] = $domain;
    // reprend les DNS du domain_info
    for ( $i=0; $i<13; $i++ )
        if ( isset($result['retfields']['ns'.$i]) )
            $du['ns'.$i] = $result['retfields']['ns'.$i];
    // reprend les contacts
    foreach( array('owner_id','admin_id','tech_id','bill_id','dist_id') as $key )
        $du[ $key ] = $result['retfields'][ $key ];
    // set EPP clientTransferProhibited
    $du['registry_status'] = 64;
    // Changement de AuthKey
    $du['authinfo'] = 'C1p3tiS3cr3t';
    // service DNS
    $du['service'] = 'dns';
    $result = $client->domain_update( $dist_id, $dist_passwd, $du['domain'], $du );
    if ( $result['retcode'] != 1 )
        die( "Ca fonctionne pas !\n" );
 
    // Exemple d'ajout de DS records DNSSEC pour un .COM
    $keytag=1234;
    $du['dsrecords'][ $keytag ]['algds']=8;
    $du['dsrecords'][ $keytag ]['digesttype']=2;
    $du['dsrecords'][ $keytag ]['digest']='444475086DF99C9BB7A9977CAC911CA67D06D0267B53F2526E521742D0631BA2';
    $keytag=4567;
    $du['dsrecords'][ $keytag ]['algds']=13;
    $du['dsrecords'][ $keytag ]['digesttype']=2;
    $du['dsrecords'][ $keytag ]['digest']='AD5144DBE76626669C569DC4D28D7AB1BC4D2D85B719248802C38931E011B6B1';
 
    // Exemple d'ajout de DS records DNSSEC pour un .EU ou .BE
    /*
    $keytag=1234;
    $du['dsrecords'][ $keytag ]['algds']=8;
    $du['dsrecords'][ $keytag ]['pubkey']='AwEAAdZuRfrp2jhPafgTizq2Otda4X8cOxYw9XTSY6Vz/UKERQYP0bCu bWQHw1citchFntujR4i9K9OEjgdjmq6HfvdBM5jthQlt+JLjW0efMhzB Kd3TECYYeSARmgEsNJPvdQPdpnC27DjKv+RVBI13QzibxyDIo8N68PYZ WiUruG6T+YjTUUE/4gJR5wOaK0wzr/tcPxQ8p47Pjxls8Gj+wjjp8khK 1rJdm/Ud0tdcpGQ/P2xNvm6V6v6rZ+BlBZ4KUFQe4jkEDKTsvY74NRNB yZJIj8Y8zbjdNk9CDXWnXCuY7z49zKUA3/YqAfDxhyzjXeiZZLz91q4+ 6n4t4sKzLfLdKdefwMmIUR4ttiS4aClevgN7+B9dnbzV6nUtPdL861Sf 22x7Dsuvax8/XV2Kt0SfDNHxF764RgumqMIH5Kof6sq/OiVtdTE1BER7 fEmjPGRy68y1bJDlLC9pvoDat+t43x3d799MZJ05VoJqIA58OHlZvGF6 Olvz0b7GsfCkGZikQdyA/XqZrqtFcBtNYbGnAAZq2lDP5jeDaIZ5X1TA AOqPqzMtnhE+gvl2m0YuGdo9bLcdVST+vNyQYOAbHLAfeAumitC0xzB7 LY0C/biN2eOeuvliIkbUIUJFfIKdrZdHwDOMdUnHz/dxTriIk1qdcy+c JhIiwUvtU1NVJ42B';
    */
 
    $result = $client->domain_update( $dist_id, $dist_passwd, $du['domain'], $du );
    if ( $result['retcode'] != 1 )
        die( "Ca fonctionne pas !\n" );
    print_r( $result );
 
    // Exemple pour retirer les DS records DNSSEC
    $du['dsrecords']='';
    $result = $client->domain_update( $dist_id, $dist_passwd, $du['domain'], $du );
    if ( $result['retcode'] != 1 )
        die( "Ca fonctionne pas !\n" );
 

Exemple Perl:

    # Update d'un nom de domaine
 
    print "domain_update()\n";
 
    my %upddomain = %newdomain;
 
    $upddomain{'ns0'} = "nsa.bookmyname.com";
    $upddomain{'ns1'} = "nsb.bookmyname.com";
    $upddomain{'ns2'} = "nsc.bookmyname.com";
    $upddomain{'tech_id'} = $tech_id;
    $upddomain{'bill_id'} = $bill_id;
    $upddomain{'dist_id'} = $dist_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 0x00000001
serverDeleteProhibited 0x00000002
clientHold 0x00000004
serverHold 0x00000008
clientRenewProhibited 0x00000010
serverRenewProhibited 0x00000020
clientTransferProhibited 0x00000040
serverTransferProhibited 0x00000080
clientUpdateProhibited 0x00000100
serverUpdateProhibited 0x00000200
pendingCreate 0x00000400
pendingDelete 0x00000800
pendingRenew 0x00001000
pendingTransfer 0x00002000
pendingUpdate 0x00004000
serverTradeProhibited 0x00008000

Les valeurs de:

domain_renew 0 a 9 nombre maximum d’année de renew possible (de 0 a 9)
domain_restore 0 ou 1 (restore 0=impossible, 1=possible)
owner_waps 0 ou 1 (information WAPS, 0=invalide, 1=valide)
[retcode] => 1
[retval] => 141958
[retfields] => Array
    (
        [id] => 141958
        [lastupdate] => 2016-09-04 15:52:48
        [lastupdate_ip] => 88.191.249.162
        [domain] => demo-now-1159299779.com
        [registrar_creation] = 2016-09-04 15:52:48
        [registrar_expiration] = 2017-09-04 15:52:48
        [registry_debut] = 2016-09-04 15:52:48
        [registry_fin] = 2017-09-04 15:52:48
        [authinfo] => hqruzKPTYZ13
        [service] => dns
        [ip_dns_master] => 
        [status] => Active
        [registry_status] => 64
        [domain_renew] = > 9
        [domain_restore] => 0
        [owner_waps] => 1
        [ns0] => ns0.free.org
        [ns1] => ns1.free.org
        [ns2] => ns3.free.org
        [dnssec] => unsigned
        [owner_id] => 151049
        [admin_id] => 13490
        [tech_id] => 127743
        [bill_id] => 127743
        [dist_id] => 0         // si valeur != 0 => revendeur 
        [dnssec] => signed     // ou 'unsigned', si 'signed' [dsrecords] a les DS records DNSSEC
        [dsrecords] => Array
            (
                [1234] => Array
                    (
                        [algds] => 8
                        [digesttype] => 2
                        [digest] => 444475086DF99C9BB7A9977CAC911CA67D06D0267B53F2526E521742D0631BA2
                    )
                [4567] => Array
                    (
                        [algds] => 13
                        [digesttype] => 2
                        [digest] => AD5144DBE76626669C569DC4D28D7AB1BC4D2D85B719248802C38931E011B6B1
                    )
            )
 
    )

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: 'fr','eu','be','re','wf','tf','pm','yt','ch','lu','it','me','tw','us','tv','cc','la','pw','de' ainsi que l'ensemble des gTLDs et nTLDs (.com .net .org …)

Pour l'ensemble des gTLDs et nTLDs l'opération se réalise par le vote de l'actuel et du nouveau titulaire via des liens spécifique reçu par email.

La fonction api_status() vous permet de suivre l'avancement d'un Trade (par exemple qui a ou non déjà voté)

Pour les .BE et .EU: Le téléchargement 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"
    )

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.

Typage:

function domain_prices( $dist_id, $dist_passwd, $domain, $period )

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

Exemple:

  $domain = "dubruit.audio";
  $period = 5;
  $result = $client->domain_prices( $dist_id, $dist_passwd, $domain, $period );
  print_r( $result );
  
  // les valeurs de retour sont toujours en centimes d'euros
  
  [retcode] => 1
  [retval] => 12
  [retfields] => Array
      (
          [create 1 dubruit.audio] => 10519
          [create 2 dubruit.audio] => 21038
          [create 3 dubruit.audio] => 31557
          [create 4 dubruit.audio] => 42076
          [create 5 dubruit.audio] => 52595
          [transfer 1 dubruit.audio] => 10519
          [renew 1 dubruit.audio] => 10519
          [renew 2 dubruit.audio] => 21038
          [renew 3 dubruit.audio] => 31557
          [renew 4 dubruit.audio] => 42076
          [renew 5 dubruit.audio] => 52595
          [restore 1 dubruit.audio] => 13669
      )


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' ou 'web302' ou 'web301'

  '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
'web301' pour les redirections web de type 301
'web302' pour les redirections web de type 302
'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 = $client->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, domain_trade
  . host_create, host_update, host_delete
 $restart (absent ou a 0) => aucune action
           valeur a 1 => relance une operation en erreur (status='Error')
           ou relance in domain_transfer() ou domain_trade()
           valeur a 2 => renvoi l'email de vote au titulaire pour domain_trade()
           valeur a 3 => renvoi l'email de vote au futur/titulaire pour domain_trade()

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)

En cas de relance d'email pour domain_trade() la valeur de retour de TID est 1 si tout est OK

Les causes de refus de relance sont:

retval motif
-1 ID de l’opération trade invalide ou Expire
-2 le nom de domaine est invalide ou absent de la base (transfert,expiration,…)
-3 changement de authinfo entre la demande et la relance
-4 owner_cid est invalide
-5 l'adresse email du titulaire à changé depuis la demande
-6 new_owner_cid est invalide
-7 l'adresse email du futur titulaire à changé depuis la demande
-8 le titulaire n'est plus même que lors de la demande (plusieurs demandes en même temps et une est déjà fini)

retourne un tableau retfields[]

      Exemple pour un domain_create()en cours de création, ou domain_transfer(),domain_trade():

      [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
              
              ou
              [action] = TransferRequest
              [transin_etat] = Pending
              [transin_lastupdate] = 2016-07-26 09:08:08
              [transin_date_request] = 2016-07-26 09:08:03
              [transin_authinfo] = TresSecret1234
              [transin_email_owner] = email@domain.tld
              [transin_email_admin] = email@domain.tld
              [transin_vote_owner] = 0
              [transin_vote_date_owner] = 0000-00-00 00:00:00
              [transin_vote_ip_owner] =
              [transin_vote_admin] = 0
              [transin_vote_date_admin] = 0000-00-00 00:00:00
              [transin_vote_ip_admin] =
              [transin_owner_cid] = 123456
              [transin_history] =
                  
              ou
              [action] = Trade
              [trade_etat] = AttenteVote
              [trade_lastupdate] = 2016-08-01 03:10:31
              [trade_date_request] = 2016-08-01 11:46:21
              [trade_owner_cid] = 123456
              [trade_newowner_cid] = 1234567
              [trade_email_owner] = email@domain.tld
              [trade_email_newowner] = newemail@domainnew.tld
              [trade_vote_owner] = 2016-08-01 12:13:14
              [trade_vote_ip_owner] = 127.0.0.123
              [trade_vote_newowner] = 0000-00-00 00:00:00
              [trade_vote_ip_newowner] = 
                  
          )
            
      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','Trade',
                          '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 );

Typage:

function api_tlds( $dist_id, $dist_passwd )

Valeurs de retour:

retcode retval Commentaire
1 1

Exemple PHP:

    // liste les TLDs que gere l'API
    $result = $client->api_tlds();
    print_r( $result );

Exemple Perl:

    # liste les TLDs que gere l'API
 
    $result = $client->api_tlds();
    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_dnssec_tlds( $dist_id, $dist_passwd )

Valeurs de retour:

retcode retval Commentaire
1 1

Exemple PHP:

    // liste les TLDs avec support de DNSSEC via l'API
    $result = $client->api_dnssec_tlds();
    print_r( $result );

Typage:

function api_priceslist( $dist_id, $dist_passwd )

Valeurs de retour:

retcode retval Commentaire
1 1

Exemple PHP:

    // liste les prix des operations pour chaque TLDs que gere l'API
    $result = $client->api_priceslist();
    print_r( $result );

Exemple Perl:

    # liste les prix des operations pour chaque TLDs que gere l'API
 
    $result = $client->api_priceslist();
    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_info( $dist_id, $dist_passwd )

Valeurs de retour:

retcode retval Commentaire
1 1

Exemple PHP:

    // Information sur un compte distributeur (credit, rib, etc)
    $result = $client->api_info( $dist_id, $dist_passwd );
    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

Liste des TAG IDN de Verisign (.COM .NET .CC .TV)

Si le tag n'est pas défini lors de l'enregistrement d'un nom de domaine IDN en .COM .NET .TV .CC le tag “FRE” (France) est automatique.

tag IDN verisign langue/pays
AFR Afrikaans
ALB Albanian
ARA Arabic
ARG Aragonese
ARM Armenian
ASM Assamese
AST Asturian
AVE Avestan
AWA Awadhi
AZE Azerbaijani
BAN Balinese
BAL Baluchi
BAS Basa
BAK Bashkir
BAQ Basque
BEL Belarusian
BEN Bengali
BHO Bhojpuri
BOS Bosnian
BUL Bulgarian
BUR Burmese
CAR Carib
CAT Catalan
CHE Chechen
CHI Chinese
CHV Chuvash
COP Coptic
COS Corsican
SCR Croatian
CZE Czech
DAN Danish
DIV Divehi
DOI Dogri
DUT Dutch
ENG English
EST Estonian
FAO Faroese
FIJ Fijian
FIN Finnish
FRE French
FRY Frisian
GLA Gaelic
GEO Georgian
GER German
GON Gondi
GRE Greek
GUJ Gujarati
HEB Hebrew
HIN Hindi
HUN Hungarian
ICE Icelandic
INC Indic
IND Indonesian
INH Ingush
GLE Irish
ITA Italian
JPN Japanese
JAV Javanese
KAS Kashmiri
KAZ Kazakh
KHM Khmer
KIR Kirghiz
KOR Korean
KUR Kurdish
LAO Lao
LAV Latvian
LIT Lithuanian
LTZ Luxembourgish
MAC Macedonian
MAL Malayalam
MAY Malay
MLT Maltese
MAO Maori
MOL Moldavian
MON Mongolian
NEP Nepali
NOR Norwegian
ORI Oriya
OSS Ossetian
PAN Panjabi
PER Persian
POL Polish
POR Portuguese
PUS Pushto
RAJ Rajasthani
RUM Romanian
RUS Russian
SMO Samoan
SAN Sanskrit
SRD Sardinian
SCC Serbian
SCR Croatian
SND Sindhi
SIN Sinhalese
SLO Slovak
SLV Slovenian
SOM Somali
SPA Spanish
SWA Swahili
SWE Swedish
SYR Syriac
TGK Tajik
TAM Tamil
TEL Telugu
THA Thai
TIB Tibetan
TUR Turkish
UKR Ukrainian
URD Urdu
UZB Uzbek
VIE Vietnamese
WEL Welsh
YID Yiddish

Informations sur DNSSEC

La configuration des éléments à fournir au registre se réalise via la fonction domain_update().
Vous pouvez lister les ds records présents via la commande domain_info().
La liste des TLDs qui supportent DNSSEC est disponible via la fonction api_dnssec_tlds().

Les registres n'ont pas tous la même implémentation et les mêmes éléments à fournir afin d'activer DNSSEC pour un nom de domaine.

Par exemple, le .EU et .BE demandent l'algorithme et la clef publique, les autres TLDs demandent l'algorithme, le type de digest et le digest de clef.

Pour les .EU et .BE:

. algo

  '3' => "DSA-SHA1",
  '5' => "RSA-SHA1",
  '6' => "DSA-SHA1-NSEC3",
  '7' => "RSA-SHA1-NSEC3",
  '8' => "RSA-SHA256",
  '10' => "RSA-SHA512",
  '13' => "ECDSAP256SHA256",
  '14' => "ECDSAP384SHA384"

. pubkey

Pour les .ORG

. algo

  '1' => "RSAMD5",
  '2' => "Diffie-Hellman",
  '3' => "DSA/SHA1",
  '5' => "RSA/SHA1",
  '6' => "DSA-NSEC3-SHA1",
  '7' => "RSASHA1-NSEC3-SHA1",
  '8' => "RSASHA256",
  '10' => "RSASHA512",
  '12' => "ECC-GOST",
  '13' => "ECDSAP256SHA256",
  '14' => "ECDSAP384SHA384"

. digestType

  '1' => "SHA-1",
  '2' => "SHA-256",

. digest

Pour les .COM .NET .TV .CC et l'ensemble des TLDS de l'AFNIC

. algo

  '1' => "RSAMD5",
  '2' => "Diffie-Hellman",
  '3' => "DSA/SHA1",
  '5' => "RSA/SHA1",
  '6' => "DSA-NSEC3-SHA1",
  '7' => "RSASHA1-NSEC3-SHA1",
  '8' => "RSASHA256",
  '10' => "RSASHA512",
  '12' => "ECC-GOST",
  '13' => "ECDSAP256SHA256",
  '14' => "ECDSAP384SHA384"

. digestType

  '1' => "SHA-1",
  '2' => "SHA-256",
  '3' => "GOST R 34.11-94",
  '4' => "SHA-384"

. digest

Pour les autres TLDs:

. algo

  '8' => "RSA-SHA256",

. digestType

  '2' => "SHA-256",
  

Vous pouvez tester votre configuration DNSSEC ici:

http://dnssec-debugger.verisignlabs.com/ ou http://dnsviz.net/

Liens externes:

http://www.iana.org/assignments/dns-sec-alg-numbers/dns-sec-alg-numbers.xml

http://www.iana.org/assignments/ds-rr-types/ds-rr-types.xml

2006-2016 © BookMyName

Nous écrire:

api.txt · Dernière modification: 2017/09/04 17:06 (modification externe)

Outils de la page