Version #4.21 du 19 Juillet 2021
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 20 Mars 2022 l'API gère les noms de domaine pour les 405 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 partenaires de BookMyName qui gèrent plusieurs dizaines de millier de noms de domaine.
Sommaire
- Devenir Partenaire
- Généralités
- Les serveurs et services
- Les fonctions de l'API
- Gestion des contacts
- Gestion des noms de domaine
- Gestion des services (redirection E-mail, web, et dns personnalisé, boites aux lettres)
- Gestion des hosts (glue record)
- Les fonctions propres à l'API
- Liste des pays ou il est possible d'enregistrer un nom de domaine en .FR .RE .WF .TF .PM .YT
- Liste des TAG IDN de Verisign (.COM .NET .CC .TV)
Devenir Partenaire pour la gestion de noms de domaine
L'API est reservée aux partenaire ayant au minimum 300 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:
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 partenaire $dist_passwd = mot de passe du partenaire $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 = partenaire? "tech_id" => $dist_id, // Contact Technique = partenaire? "bill_id" => $dist_id, // Contact Facturation = partenaire? "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", "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_regionsid() "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_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 .EU) // Si le titulaire est de type 'Particulier' definir le pays_id de citoyenneté (En Europe). // 1,1,11,12,13,15,31,49,70,72,73,74,83,88,89,97,100,111,117,132,138,139,147,149,185,186,189,190,207,208,213,219 "doteu_countryofcityzenship" => "", // 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 (utile uniquement pour le .NL // valeurs possible pour dotnl_legalform: // ANDERS Other // BGG Non-Dutch EC company (Societe europeen en dehors des pays-bas). // BRO Non-Dutch legal form/enterprise/subsidiary // BV Limited company // BVI/O Limited company in formation // COOP Cooperative // CV Limited Partnership // EENMANSZAAK Sole trader // EESV European Economic Interest Group // KERK Religious society // MAATSCHAP Partnership // NV Public Company // OWM Mutual benefit company // PERSOON Natural person (Particulier) // REDR Shipping company // STICHTING Foundation // VERENIGING Association // VOF Trading partnership "dotnl_legalform" => "", // Registration number of company or empty "dotnl_legalformregno" = > "", // 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 [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", // 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_regionsid() "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 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 .EU) // Si le titulaire est de type 'Particulier' definir le pays_id de citoyenneté (En Europe). // 1,1,11,12,13,15,31,49,70,72,73,74,83,88,89,97,100,111,117,132,138,139,147,149,185,186,189,190,207,208,213,219 "doteu_countryofcityzenship" => "", // 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', # 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_regionsid() '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 [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 [whois_pub] => 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 |
-1 | -2 | $dist_id n'a pas les droits nécessaires pour agir sur $id |
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 [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 [whois_pub] => 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 partenaire $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 partenaire $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 | -6 | reservation spécifique |
-1 | -7 | .fr interdit par l'AFNIC |
-1 | -8 | enregistrement en cours, temporairement indisponible |
-1 | -9 | existe dans la table banned_domains |
-1 | -10 | .fr Status: Not available, Reason: In use/Reserved name, procédure spécifique |
-1 | -11 | timeout (registre indisponible, maintenance ou panne) |
1 | 1 | Le nom de domaine EST disponible |
1 | 2 | Le nom de domaine EST disponible MAIS reservé à une commune en ,FR |
[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, 2 = .FR réservé pour une commune Française)
[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 = partenaire "tech_id" => $tech_id, // Contact Technique = partenaire "bill_id" => $bill_id, // Contact Facturation = partenaire "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 = partenaire "tech_id" => $dist_id, # Contact Technique = partenaire "bill_id" => $dist_id, # Contact Facturation = partenaire "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.
Une valeur autre que zéro ne retire pas le status, la valeur 0 retire clientHold et 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"; $upddomain['ip_dns_master'] = ""; //si dnsslave => fournir l'IP du master // 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/api-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 ou .DE ou .NL /* $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{'ip_dns_master'} = ""; # si dnsslave => fournir l'IP du master $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 => partenaire [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 partenaire ------- */ /* $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 partenaire # $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, $forcedns )
$extid c'est le numéro d'id d'un contact qui est utilisé comme titulaire du nom de domaine dans le cas ou n'est pas possible de l'obtenir auprès de l'ancien bureau d'enregistrement.
$forcedns, tableau de DNS qui permet de faire un changement de DNS en même temps qu'un changement de bureau d'enregistrement.
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.
domain_transfer() retourne un tableau retfields[]
[retfields] => Array ( [tid] = 6070148 [owner_id] = 1184377 [validhash] = 8173a877f7bce2ba [parent_id] = 12345 [lastupdate] = 2018-04-14 17:11:54 [lastupdate_ip] = 1.2.3.4 [handle] = DUMMY12345-FREE ... )
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, $owner_id ); print_r( $result ); /* relance un transfert */ $authkey = "NewSecret5678"; $result = $client->domain_transfer( $dist_id, $dist_passwd, $domain, $authkey, $owner_id ); 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"), $owner_id ); 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 est utilisé comme titulaire du nom de domaine dans le cas ou n'est pas possible de l'obtenir auprès de l'ancien bureau d'enregistrement.
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é)
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_transfer_out( $dist_id, $dist_passwd, $domain, $authkey, $mode )
$mode = “TransferReject” ou “TransferApprove”
Valeurs de retour:
retcode | retval | Commentaire |
---|---|---|
-1 | -1 | $dist_id ou $dist_passwd invalide |
-1 | -2 | domain,authkey,mode vide |
-1 | -3 | authkey invalide |
-1 | -4 | mode invalide (TransferApprove ou TransferReject) |
-1 | -5 | no transout receive for this domain |
-1 | -6 | acces denied (invalide domain not in dist_id) |
-1 | -7 | TransferReject allready processed (.fr) |
1 | 1 | OK, voir la liste des nom de domaine en état=“TransOut” de api_pending_status |
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_price( $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 |
Cette fonction permet de connaitre le prix des operations qu'il est possible de faire pour un nom de domaine.
Exemple:
$domain = "domaine-de-test.com"; $period = 10; $result = $client->domain_price( $dist_id, $dist_passwd, $domain, $period ); print_r( $result ); // les valeurs de retour sont toujours en centimes d'euros // exemple pour nom de domain de domain qui n'existe pas dans la base [retcode] => 1 [retval] => 11 [retfields] => Array ( [create 1 domaine-de-test.com] => 790 [create 2 domaine-de-test.com] => 1580 [create 3 domaine-de-test.com] => 2370 [create 4 domaine-de-test.com] => 3160 [create 5 domaine-de-test.com] => 3950 [create 6 domaine-de-test.com] => 4740 [create 7 domaine-de-test.com] => 5530 [create 8 domaine-de-test.com] => 6320 [create 9 domaine-de-test.com] => 7110 [create 10 domaine-de-test.com] => 7900 [transfer 1 domaine-de-test.com] => 790 ) [exectime] => 0.028565
// exemple pour un .be qui existe [retcode] => 1 [retval] => 1 [retfields] => Array ( [renew 1 domaine-de-test.be] => 520 ) [exectime] => 0.029040
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 | -4 | Update nom de domaine impossible (status EPP) |
-1 | -5 | Mot de passe invalide / trop simple |
0 | 0 | Nom de domaine invalide/absent - boite invalide |
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_validhash] = 6aa89763e2e6af70 [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 partenaire $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 ) [7] => Array ( [transout_id] => 123456 [domain] => un-domain-transout-pending.com [type] => Domain [etat] => TransOut [status] => Pending [reply_value] => 0 [reply_msg] => [date_notify] => 2017-10-24 12:29:28 [registrar_name] => NAME (IANA number) )
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( $withpromo=1 )
Valeurs de retour:
retcode | retval | Commentaire |
---|---|---|
1 | 1 |
Exemple PHP:
// liste les prix des operations pour chaque TLDs que gere l'API avec les promotions en cours $result = $client->api_priceslist(1); print_r( $result ); // liste les prix des operations pour chaque TLDs que gere l'API SANS les promotions en cours $result = $client->api_priceslist(0); 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 );
Typage:
function api_invoice_list( $dist_id, $dist_passwd )
Valeurs de retour:
retcode | retval | Commentaire |
---|---|---|
-1 | -1 | $dist_id ou $dist_passwd invalide |
1 | n | ou n est le nombre de facture |
Exemple PHP:
// liste les factures id, period, montant sur 36 mois. $result = $client->api_invoice_list( $dist_id, $dist_passwd ); print_r( $result );
retourne un tableau retfields[]
Exemple de contenu:
[retcode] => 1 [retval] => 3 [retfields] => Array ( [0] => Array ( [facture_id] => 1234 [period] => 2023-02 [montant] => 4516.4800 ) [1] => Array ( [facture_id] => 5678 [period] => 2023-01 [montant] => 5794.2400 ) [2] => Array ( [facture_id] => 9012 [period] => 2022-12 [montant] => 4161.1100 ) ) [exectime] => 0.039386
Exemple Perl:
# liste les factures id, period, montant sur 36 mois. $result = $client->api_invoice_list( $dist_id, $dist_passwd ); print Data::Dumper->Dump([$result->result]);
Exemple de contenu:
$VAR1 = { 'exectime' => '0.034729', 'retcode' => '1', 'retfields' => [ { 'facture_id' => '423456', 'montant' => '45167.4800', 'period' => '2023-02' }, { 'montant' => '57964.2400', 'facture_id' => '54321', 'period' => '2023-01' }, { 'period' => '2022-12', 'facture_id' => '9856', 'montant' => '41601.1100' }, ], 'retval' => '3' };
Typage:
function api_invoice( $dist_id, $dist_passwd, $facture_id )
Valeurs de retour:
retcode | retval | Commentaire |
---|---|---|
-1 | -1 | $dist_id ou $dist_passwd invalide |
1 | -1 | acces impossible à la facture |
1 | 0 | numéro de facture invalide |
1 | 1 | données sont disponibles dans 'retfields' |
Exemple PHP:
// obtenir le PDF d'une facture $result = $client->api_invoice( $dist_id, $dist_passwd, $facture_id ); print_r( $result );
retourne un tableau retfields[]
Exemple de contenu:
[retcode] => 1 [retval] => 1 [retfields] => Array ( [period] => 2023-02 [montant] => 4516.74 [b64pdf] => (encodage base64 du fichier PDF) ) [exectime] => 0.188000
Exemple Perl:
# obtenir le PDF d'une facture $result = $client->api_invoice( $dist_id, $dist_passwd, $facture_id ); print Data::Dumper->Dump([$result->result]);
Exemple de contenu:
$VAR1 = { 'exectime' => '0.326261', 'retcode' => '1', 'retval' => '1', 'retfields' => { 'period' => '2020-03', 'b64pdf' => '(encodage base64 du fichier PDF)' 'montant' => '46745.38' } };
Exemple PHP de décodage du fichier PDF:
$facture_id ="123456"; $result = $client->api_invoice( $dist_id, $dist_passwd, $facture_id ); if( 1 == $result['retcode'] && 1 == $result['retval'] && '' != $result['retfields']['period'] ) { $fp = fopen( sprintf("/tmp/facture-api%d-%s.pdf",$facture_id,$result['retfields']['period']), "w" ); if ( $fp ) { fwrite( $fp, base64_decode($result['retfields']['b64pdf']) ); fclose( $fp ); } }
Exemple Perl de décodage du fichier PDF:
my $facture_id=123456; my $result = $client->api_invoice($dist_id, $dist_passwd,$facture_id) ; if (( $result->result->{'retcode'} == 1 ) && ( $result->result->{'retval'} == 1 ) && $result->result->{'retfields'}->{'period'}) { if (open( FIC,">".sprintf("/tmp/facture-api%d-%s.pdf",$facture_id,$result->result->{'retfields'}->{'period'}))) { print FIC MIME::Base64::decode_base64($result->result->{'retfields'}->{'b64pdf'}); close(FIC); }; }
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.
La mise à jour des entrées DNSSEC se réalise via la fonction domain_update() et les champs 'dsrecords'
Pour presque l'ensemble des TLDs il y a besoin du digest,
['dsrecord'][ KEYTAG ][ 'algds' ]
['dsrecord'][ KEYTAG ][ 'digesttype' ]
['dsrecord'][ KEYTAG ][ 'digest' ]
pour les .EU , .BE , .DE et .NL il y a besoin de la clef publique:
['dsrecord'][ KEYTAG ][ 'algds' ]
['dsrecord'][ KEYTAG ][ 'digesttype' ]
['dsrecord'][ KEYTAG ][ 'pubkey' ]
Voici la liste des TLDs, les algorithmes et digests supportés (au moment de la rédaction):
TLD | DNS Security Algorithm Numbers | Delegation Signer (DS) Resource Record (RR) Type Digest Algorithms |
---|---|---|
tld | 1 = RSAMD5 (obsolète) 2 = Diffie-Hellman (obsolète) 3 = DSA/SHA1 (obsolète) 5 = RSA/SHA1 (obsolète) 6 = DSA-NSEC3-SHA1 (obsolète) 7 = RSASHA1-NSEC3-SHA1 (obsolète) 8 = RSASHA256 10 = RSASHA512 12 = ECC-GOST 13 = ECDSAP256SHA256 14 = ECDSAP384SHA384 15 = ED25519 16 = ED448 | 1 = SHA-1 (obsolète) 2 = SHA-256 3 = GOST R 34.11-94 4 = SHA-384 |
fr | 6, 7, 8, 10, 12, 13, 14 | 1, 2, 3, 4 |
me | 8, 13 | 2 |
paris | 8, 13 | 2 |
bzh | 8, 13 | 2 |
online | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
com | 6, 7, 8, 10, 12, 13, 14 | 1, 2, 3, 4 |
net | 6, 7, 8, 10, 12, 13, 14, 15, 16 | 1, 2, 4 |
org | 6, 7, 8, 10, 12, 13, 14, 15, 16 | 1, 2, 4 |
info | 8, 13 | 2 |
biz | 6, 7, 8, 10, 12, 13, 14, 15, 16 | 1, 2, 4 |
name | 6, 7, 8, 10, 12, 13, 14 | 1, 2, 3, 4 |
eu | 6, 7, 8, 10, 13, 14, 15, 16 | |
be | 6, 7, 8, 10, 13, 14, 15, 16 | |
me | 8, 13 | 2 |
tv | 6, 7, 8, 10, 12, 13, 14 | 1, 2, 3, 4 |
cc | 6, 7, 8, 10, 12, 13, 14 | 1, 2, 3, 4 |
io | 6, 7, 8, 10, 12, 13, 14, 15, 16 | 1, 2, 4 |
la | 8, 13 | 2 |
pm | 6, 7, 8, 10, 12, 13, 14 | 1, 2, 3, 4 |
pw | 8, 13 | 2 |
re | 6, 7, 8, 10, 12, 13, 14 | 1, 2, 3, 4 |
tf | 6, 7, 8, 10, 12, 13, 14 | 1, 2, 3, 4 |
wf | 6, 7, 8, 10, 12, 13, 14 | 1, 2, 3, 4 |
yt | 6, 7, 8, 10, 12, 13, 14 | 1, 2, 3, 4 |
academy | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
accountants | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
agency | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
alsace | 8, 13 | 2 |
apartments | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
art | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
associates | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
auction | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
audio | 8, 13 | 2 |
baby | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
bar | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
bargains | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
beauty | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
beer | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
bike | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
bingo | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
black | 8, 13 | 2 |
blackfriday | 8, 13 | 2 |
blog | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
blue | 8, 13 | 2 |
bond | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
boutique | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
build | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
builders | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
business | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
cab | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
cafe | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
cam | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
camera | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
camp | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
capital | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
cards | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
care | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
careers | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
casa | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
cash | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
casino | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
catering | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
center | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
charity | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
chat | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
cheap | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
christmas | 8, 13 | 2 |
church | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
city | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
claims | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
cleaning | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
click | 8, 13 | 2 |
clinic | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
clothing | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
coach | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
codes | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
coffee | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
college | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
community | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
company | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
computer | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
condos | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
construction | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
contractors | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
cooking | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
cool | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
country | 8, 13 | 2 |
coupons | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
credit | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
creditcard | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
cruises | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
cyou | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
dating | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
deals | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
degree | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
delivery | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
dental | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
desi | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
design | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
diamonds | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
diet | 8, 13 | 2 |
digital | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
direct | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
directory | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
discount | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
doctor | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
dog | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
domains | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
education | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
6, 7, 8, 10, 12, 13, 14 | 1, 2 | |
energy | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
engineer | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
engineering | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
enterprises | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
equipment | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
estate | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
events | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
exchange | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
expert | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
exposed | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
express | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
fail | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
fans | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
farm | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
fashion | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
finance | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
financial | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
fish | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
fishing | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
fit | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
fitness | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
flights | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
florist | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
flowers | 8, 13 | 2 |
football | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
foundation | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
fun | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
fund | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
furniture | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
fyi | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
gallery | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
games | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
garden | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
gift | 8, 13 | 2 |
gifts | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
gives | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
glass | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
gmbh | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
gold | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
golf | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
graphics | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
gratis | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
green | 8, 13 | 2 |
gripe | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
group | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
guide | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
guitars | 8, 13 | 2 |
guru | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
hair | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
healthcare | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
help | 8, 13 | 2 |
hiphop | 8, 13 | 2 |
hiv | 8, 13 | 2 |
hockey | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
holdings | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
holiday | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
horse | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
host | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
house | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
icu | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
immo | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
industries | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
ink | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
institute | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
insure | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
international | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
investments | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
irish | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
jetzt | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
jewelry | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
kim | 8, 13 | 2 |
kitchen | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
land | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
lease | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
legal | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
lgbt | 8, 13 | 2 |
life | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
lighting | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
limited | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
limo | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
link | 8, 13 | 2 |
loans | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
lol | 8, 13 | 2 |
love | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
ltd | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
maison | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
makeup | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
management | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
market | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
marketing | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
mba | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
media | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
memorial | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
mom | 8, 13 | 2 |
money | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
monster | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
mortgage | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
network | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
news | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
observer | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
ooo | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
partners | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
parts | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
photo | 8, 13 | 2 |
photography | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
photos | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
pics | 8, 13 | 2 |
pictures | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
pink | 8, 13 | 2 |
pizza | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
place | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
plumbing | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
plus | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
poker | 8, 13 | 2 |
press | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
productions | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
properties | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
property | 8, 13 | 2 |
quest | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
recipes | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
red | 8, 13 | 2 |
rehab | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
reise | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
reisen | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
rent | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
rentals | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
repair | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
report | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
rest | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
restaurant | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
rodeo | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
run | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
saarland | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
salon | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
sarl | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
school | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
schule | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
services | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
sexy | 8, 13 | 2 |
shoes | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
shopping | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
show | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
singles | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
site | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
skin | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
soccer | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
social | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
software | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
solar | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
solutions | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
space | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
store | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
style | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
supplies | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
supply | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
support | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
surf | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
surgery | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
systems | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
tattoo | 8, 13 | 2 |
tax | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
taxi | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
team | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
tech | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
technology | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
tennis | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
theater | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
tienda | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
tips | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
tires | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
today | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
tools | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
tours | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
town | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
toys | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
training | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
university | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
uno | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
vacations | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
ventures | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
vet | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
viajes | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
villas | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
vin | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
vision | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
vodka | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
voyage | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
watch | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
website | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
wedding | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
wiki | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
wine | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
work | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
works | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
world | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
wtf | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
xyz | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
yoga | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
zone | 6, 7, 8, 10, 12, 13, 14 | 1, 2 |
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
Copyright
2006-2021 © BookMyName
Client API, merci de TOUJOURS nous fournir votre identifiant API dans vos messages, nous ne répondrons à aucun message sans cette information.