Modification d'une entrée DNS via l'API

  • Auteur de la discussion flo
  • Date de début

flo

New Member
#1
Bonjour,

J'ai un hébergement et un nom de domaine (n0c - The World) et je voudrais utiliser l'API pour modifier régulièrement une entrée DNS par script.
L'adresse de cette API est : https://api.planethoster.net/n0c-api/dns/edit-zone
J'ai déjà mis l'IP en whitelist et j'ai pu faire des requêtes de lecture pour récupérer les divers paramètres.
La doc

J'ai essayé d'utiliser les librairie PHP et node.js trouvé sur github :
https://github.com/PlanetHoster/ph-node-api
https://github.com/PlanetHoster/planethoster-php

Dans ces 2 librairies il y a beaucoup de choses mais je ne trouve pas l'utilisation de cette page.
J'ai l'impression qu'il y a toutes les autres rubriques sauf n0c/DNS.

Pouvez-vous m'indiquer ce que j'ai manqué ou comment faire l'appel correctement à cet API ?
Comme il n'y a que le site qui peut faire l'appel, je ne peux pas faire de test direct avec postman et je n'arrive ni à faire l'appel directement (et que le résultat soit pris en compte), ni à utiliser ces librairies pour le faire.

Merci d'avance.
 

flo

New Member
#3
Bonjour et merci pour la réponse.

J'ai bien vu cette page puisque j'ai même donné l'adresse de la page API à appeler.
J'ai créé un pull request sur le dépôt https://github.com/PlanetHoster/ph-node-api pour ajouter la prise en compte de la section N0c DNS de l'API.

Mais je n'arrive toujours pas à faire la requête. Avant de faire la requête de mise à jour, je fais des lectures pour être certain que tout fonctionne. Voici mon code :

JavaScript:
const apikey = '????????????????';
const apiuser = '???';
const domain = 'yyyyyy';

const PhNodeApi = require('ph-node-api');

async function runAPI(api) {
  try {
    //Get id
    api.world().getAccounts().then(function(resp) {
        var response = JSON.stringify(resp);
        var n0caccount = resp.world_accounts[0].id;
        response += '\r\n' + JSON.stringify(resp.world_accounts[0].id);

        //Test get domains list
        api.n0c(n0caccount).domain().getAll().then(function(resp2) {
            response += '\r\n' + JSON.stringify(resp2);

            //Test get dns
            api.n0c(n0caccount).dns().getRecords(domain).then(function(resp3) {
                response += '\r\n' + JSON.stringify(resp3);
                var http = require('http');
                var server = http.createServer(function(req, res) {
                    res.writeHead(200, {'Content-Type': 'text/plain'});
                    res.end(response);
                });
                server.listen();
            });
        });
    });
  } catch (e) {
    console.log(e);
  }
}

const api = new PhNodeApi(apikey, apiuser);
runAPI(api);

//Close server after 10s
setTimeout(() => {
  server.close(() => { });
}, 10 * 1000);
Le résultat est le suivant :
JSON:
{"nb_active_or_suspended_accounts":1,"world_accounts":[{"id":xxxxxx,"username":"????","domain":"yyyyyy","status":"Active","hostname":"??????","location":"fr","plateform":"N0C","ressources":{"cpu":8,"mem":16,"io":16}}],"reseller_id":"??????"}
xxxxxx
{"error_code":5004,"error":"N0C account not found","error_world_account_not_found":true,"reseller_id":"??????"}
{"error_code":5002,"error":"An internal error occured - please contact PlanetHoster support!"}
Alors je veux bien contacter le support pour le dernier appel mais le 2ème appel ne fonctionne déjà pas en ayant utilisé ce qui a été envoyé par la première requête.
Il doit y avoir une erreur quelque part.
 
Dernière édition:

PH-Marc-André.B.

Conseiller technique
Membre du personnel
#4
Bonjour,

Effectivement, n'hésitez-pas à nous contacter par ticket pour que nous puissions vérifier le tout de plus près avec l'équipe.
 

flo

New Member
#5
J'ai contacté le support.
J'ai aussi essayé de faire une requête N0c ftp à la place de N0c domain et j'ai le même message.
Soit il y a un problème dans mon appel à N0c(id) et je m'y prend mal, soit il y a un problème avec mon compte et la partie N0c de l'api n'arrive pas à trouver mon id.

Pour l'appel au dns, maintenant j'ai un autre message :
JSON:
{"reseller_id":"??????","success":false,"error_code":5000,"errors":["user must be provided"]}
 

PH-Marc-André.B.

Conseiller technique
Membre du personnel
#6
Bonjour,

Ce message indique effectivement un échec de connexion à l'API et pas nécessairement un problème de syntaxe.

Prière revérifier la clé d'API svp (reseller_id) ainsi que API UserID:

X-API-USER
required
string
Utilisateur de l'API fourni dans l'espace client.
X-API-KEY
required
string
Clé API fournie dans l'espace client.


Ces renseignements devraient être indiqués dans l'espace client PlanetHoster sur la page suivante: https://my.planethoster.com/v2/domain-reseller/information
 

flo

New Member
#7
Bonjour,

J'ai vérifié et j'ai bien mis les informations qui sont dans mon espace client dans le fichier dans apikey et apiuser.
Le reseller_id des messages de retour est bien le mien.

Et dans ce cas, comment expliquer que api.world() fonction et pas api.n0c(n0caccount) ?
Pour le n0caccount j'ai pris celui qui est indiqué dans la 1ère requête comme indiqué dans la doc de l'api.

J'ai donné plus de détails dans le ticket.
 

flo

New Member
#8
En utilisant directement le script fourni par le support tout fonctionne.
Je ne sais pas pourquoi la librairie ne fonctionne pas mais du moment que j'arrive à envoyer les commandes c'est tout ce qui compte.

Merci.

ps : Je ne trouve pas comment clore le sujet.
 
Haut