Domaines et DNS - Commande domaine via API
BMPCreated with Sketch.BMPZIPCreated with Sketch.ZIPXLSCreated with Sketch.XLSTXTCreated with Sketch.TXTPPTCreated with Sketch.PPTPNGCreated with Sketch.PNGPDFCreated with Sketch.PDFJPGCreated with Sketch.JPGGIFCreated with Sketch.GIFDOCCreated with Sketch.DOC Error Created with Sketch.
Frage

Commande domaine via API

Von
pppplus
Erstellungsdatum 2018-11-17 11:07:27 (edited on 2024-09-04 13:15:51) in Domaines et DNS

Bonjour à tous
Je cherche à commander un domaine expiré, qui va être dispo vers décembre.

Je faisais ça il y a longtemps, via soapi qui est abandonné.

J'ai un peu la flemme de regarder la doc API ovh, pour commander un domaine.
Quelqu'un a-t-il un script tout prêt ou presque (en PHP), utilisant l'API ovh ?

Y a-t-il des limites sur le nombre de tentatives d'achat du domaine via l'API ?

Merci d'avance pour ceux qui ont ça sous la main.


14 Antworten ( Latest reply on 2020-03-19 14:36:28 Von
Community Deleted user
)

Bonjour,

En soap, cela doit dater pas mal :) Tu as un wrapper php pour l'api ovh **https://github.com/ovh/php-ovh Le github**

Amicalement


En soap, cela doit dater pas mal

vi, ça date !! J'achetai à l'époque des domaines expirés pour un client.
Comme j'en faisais pas mal, j'avais potassé la doc, pour pouvoir faire ça correctement.

Là, j'avais pas trop envie de lire toute la doc, passer toutes les étapes, (genre comment récupérer l'état du domaine expiré, pour voir si je lance l'achat ou pas)...

D'où ma question, pour un script prêt à l'emploi, ou très rapidement adaptable.
Mais je sens que je vais devoir me coltiner un peu de doc, pour faire ça. Et comme toujours, le temps est le nerf de la guerre.

++ et merci quand même.

Bonjour,
Si besoin tu peux t'aider de ce petit remider des routes que tu devra utiliser (si je ne me trompe pas)

## Les domaines

**Pour récupérer la liste de tes domaines :**

GET /domain

**Pour récupérer le statut et la date de renewal de ton domaine:**

/domain/{domainName}/serviceInfos

Ce qui vas t'intéresser c'est le champ _status_ qui prend les valeurs

["expired","inCreation", "ok","pendingDebt","unPaid"]


Le champ _expiration_ qui as pour valeur une date au format YYYY-MM-DD

## Les paniers

**Pour créer un panier**

POST /order/cart

**Verifier la disponibilité d'un domaine**

GET /order/cart/{cartId}/domain

Ce qui vas t'intéresser c'est le champ _orderable_ qui prend un boolean comme valeur. Attention si le domaine est éligible à plusieurs type de pack la route retourne plusieurs tableau contenant ce boolean. Le champ _action_ te permettra de savoir s'il est achetable, transférable etc (d’ailleurs la doc de ce paramètre est manquant)

**Mettre le domaine au panier**

POST /order/cart/{cartId}/domain

**Verifier le contenu du panier**

GET /order/cart/{cartId}

Ce qui vas t'intéresser c'est le champ _items_ qui liste les produits du panier, utilise pour verifier ta commande avant de la lancer

**Vérifier un élément du panier**

/order/cart/{cartId}/item/{itemId}

**Assigner le panier à ton compte client**

POST /order/cart/{cartId}/assign

**Verifier que le panier à bien été assigné à ton compte**

GET /order/cart

**Vérification de la commande**

GET /order/cart/{cartId}/checkout

**Validation de la commande**

POST /order/cart/{cartId}/checkout

Ce qui vas t'intéresser c'est le champ _url_ qui te donne l'url du bon de commande et le champ _orderId_ avec l'id du bon de commande

## Les bon de commandes

**Verifier que le bon de commande est bien edité**

/me/order/{orderId}

**Lister les moyens de paiements disponible pour ce bon de commande**

GET /me/order/{orderId}/availableRegisteredPaymentMean

**$ Passe à la caisse $**

POST /me/order/{orderId}/payWithRegisteredPaymentMean

Par contre je n'ai pas pas pu tester cette route là, je n'avais rien à acheter lors de l'écriture de ce tuto, désole.

En espérant que cela t'aidera

Bonne soirée

merci à toi, je vais essayer de regarder ça d'ici la fin de semaine.
Et mettre au moins un truc en test.

Merci pour les infos que tu as mises, ça me fait gagner énormément de temps.

Par contre, lorsque je teste sur le domaine que je vise, je vois ça :
[description] => Demande de transfert d'un domaine .com

Hors, c'est un domaine expiré.
Je ne veux pas un transfert, je veux juste l'acheter dès qu'il est disponible !

Y a-t-il un truc que j'ai raté ?

Mon script actuel :
include 'zzconf.php';

/**
* First, download the latest release of PHP wrapper on github
* And include this script into the folder with extracted files
*/
require __DIR__ . '/vendor/autoload.php';
use \Ovh\Api;

/**
* Instanciate an OVH Client.
* You can generate new credentials with full access to your account on
* the token creation page
*/
$ovh = new Api( $appKey, // Application Key
$appSecret, // Application Secret
'ovh-eu', // Endpoint of API OVH Europe (List of available endpoints)
$consKey); // Consumer Key

//je crée mon panier
$result = $ovh->post('/order/cart', array(
'description' => 'achat', // Description of your cart (type: string)
'expire' => date('Y-m-d').'T23:59:59+01:00', // Time of expiration of the cart (type: datetime)
'ovhSubsidiary' => 'FR', // OVH Subsidiary where you want to order (type: nichandle.OvhSubsidiaryEnum)
)

);
$idCart = $result['cartId'];

//vérifie la dispo d'un domaine
$result = $ovh->post('/order/cart/'.$idCart.'/domain', array(
'domain' => $domain, // Domain name requested (type: string)
));
//print_r( $result );

//vérifie le contenu du panier
$result = $ovh->get('/order/cart/'.$idCart);
//print_r( $result );

//assigne le panier à la commande
$result = $ovh->post('/order/cart/'.$idCart.'/assign');

//vérification de la commande
$result = $ovh->get('/order/cart/'.$idCart.'/checkout');

//validation de la commande
$result = $ovh->post('/order/cart/'.$idCart.'/checkout');

$idOrder = $result['orderId'];
$urlOrder = $result['url'];
print_r( $result );

//Vérifier que la commande est bien éditée
$result = $ovh->get('/me/order/'.$idOrder);

Je vois que si je passe par le manager, je peux payer le transfert du domaine...
Galère... Bon, faut que je trouve la commande qui indique le statut du domaine.

Tu peux me communiquer le nom du domaine ? En MP si ca t'arrange que le nom ne soit pas public.

Quelle route te retourne une description ?

pour le domaine, je ne veux vraiment pas le donner.

Je vais en chercher un tout à l'heure, expiré, pour l'exemple.
Pas compris la question sur le route qui retourne une description.
++


Par contre, lorsque je teste sur le domaine que je vise, je vois ça :
[description] => Demande de transfert d'un domaine .com


Quelle route à tu utilisé ?


//vérifie la dispo d'un domaine
$result = $ovh->post('/order/cart/'.$idCart.'/domain', array(
'domain' => $domain, // Domain name requested (type: string)
));


C'est automatique.
Si je passe par une commande manuelle OVH, le même domaine expiré est indiqué transférable.
Si je teste chez d'autres registres, c'est la même chose. Pas logique pour moi (mais ça doit être logique quand même quelque part, mais je vois pas bien où)

Je précise que le domaine (.com) est expiré depuis 15 jours seulement. Donc pas encore achetable.

qu'y a t il dans le whois?
dans les lignes * status: il devrait y avoir redemptionPeriod?
https://www.icann.org/resources/pages/epp-status-codes-2014-06-16-en#redemptionPeriod

s'il est indiqué transférable, c'est qu'il a encore un proprio, ce n'est pas étonnant, par contre transférable pendant une redemption le serait effectivement

Pour l'instant, le domaine est : clientHold
Domain Status: clientHold http://www.icann.org/epp#clientHold

Mais je trouve bizarre qu'on puisse acheter le transfert, sachant que le propriétaire actuel ne pourra sans doute pas valider ? et/ou le registre actuel car domaine expiré ?

oui, c'est curieux
hold c'est litige? pas encore en redemption donc?
par exemple, ovh avec leur contrat à tacite reconduction doivent mettre en hold (supposition) retardant le processus?


Verifier la disponibilité d'un domaine

GET /order/cart/{cartId}/domain



Tu as fait un post non ?

sur un get, il me sort :
[duration] => Array
(
[0] => P1Y
)

[pricingMode] => default
[offer] => gold
[quantityMax] => 1
[deliveryTime] =>
[phase] =>
[offerId] => com-transfer
[configurations] => Array
(
)

[productId] => domain
[action] => transfer
[orderable] => 1

S'il est expiré peut être qu'il y a un délai pendant lequel le détenteur du domaine peut encore le récupérer ? Ce qui expliquerai qu'il est juste transférable

Je ne crois pas qu'on puisse transférer un domaine expiré. Mais peut-être que si finalement, puisque j'ai fait le test chez plusieurs registres, et ils proposent tous le transfert.
Mais du coup, c'est très pénible, car je dois tester l'état, avant d'envoyer l'achat !
Car si je paie pour un transfert qui n'aura finalement jamais lieu... je sens que j'aurai énormément de mal à me faire rembourser.

tu n'as pas dit qu'il était en *hold* ?
après il doit passer en redemption

j'l'ai pas dit, j'l'ai écrit un peu plus haut.

Bonjour,

Des avancées dans ton développement

Amicalement

Salut
Non, je n'ai pas avancé, là, je suis overbooké.
J'ai juste regardé avant-hier, ovh renvoyait un message d'erreur, mais je n'ai pas pris le temps de regarder.
Normalement, je vais regarder dans la semaine.

`Fatal error: Uncaught exception 'GuzzleHttp\Exception\ClientException' with message 'Client error: `GET https://api.ovh.com/1.0/order/cart/2044a973-3236-4303-996c-b4afedac1b20/domain?domain=monpetitdomaineici.com` resulted in a `400 Bad Request` response: {"message":"Check timeout. Please retry later"} ' in /home/admin/domains/moi.fr/public_html/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php:107 Stack trace: #0 /home/admin/domains/moi.fr/public_html/vendor/guzzlehttp/guzzle/src/Middleware.php(65): GuzzleHttp\Exception\RequestException::create(Object(GuzzleHttp\Psr7\Request), Object(GuzzleHttp\Psr7\Response)) #1 /home/admin/domains/moi.fr/public_html/vendor/guzzlehttp/promises/src/Promise.php(199): GuzzleHttp\Middleware::GuzzleHttp\{closure}(Object(GuzzleHttp\Psr7\Response)) #2 /home/admin/domains/moi.fr/public_html/vendor/guzzlehttp/promises/src/Promise.php(152): GuzzleHttp\Promise\Promise::callHandler(1, Object(GuzzleHttp\Psr7\Response), Array) #3 /home/admin/domains/moi.fr/public_html/vendor/guzzlehttp/pro in /home/admin/domains/moi.fr/public_html/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php on line 107`

Voilà le petit message d'erreur reçu.
Le domaine est en statut redemptionPeriod, ceci explique peut-être cela.
Je recreuserai dans la journée ou demain.

j'essaie tant bien que mal de faire fonctionne l'api d'ovh. Je suis le process décrit ci dessus aimablement décrit par Lota.

Malheureusement, lors de l'assignation d'un cart, j'ai cette erreur :

Client error: `POST https://api.ovh.com/1.0/order/cart/5dc57210-4099-409d-aefc-30a8857d5372/assign` resulted in a `400 Bad Request` response: {"message":"Invalid signature","httpCode":"400 Bad Request","errorCode":"INVALID_SIGNATURE"}

Pourtant, l'id du cart est le bon, lorsque je teste avec la console en ligne https://api.ovh.com/console/ , cela fonctionne. Or avec l'appel api à distance non !

Quelqu'un aurait-il une piste de réflexion ? :)
Merci par avance

Antworten sind derzeit für diese Frage deaktiviert.