• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Alfahosting DNS API (Soap)

Hallo,

ich stehe nun vor folgendem Problem:
Ich habe bei Alfahosting das Name 500 Packet gemietet. Nun möchte ich über die API meine Domain und DNS Einträge verwalten.
Ich bin kein newbe in PHP und schon recht erfahren. Doch leider stoße ich hier an meine Grenzen, was wohl auch daran liegt dasich ganze ganze Prinzip noch garnicht nachvollziehen konnte.

Ich konnte bereits ein kleines Code Fragment erstellen. Aber hier kommt nichtmal ein vernünfitger Aufruf zu stande.

Ich habe viel im Internet nach Erklärungen oder Beispielen gesucht aber leider nichts gefunden was mir das ganze verständlich gemacht hat.

Fehler bei meinem Code ist folgender:
Warning: SoapClient::__soapCall() expects parameter 2 to be array, object given in /var/www/vhosts/meine-domain.de/development/api.meine-domain.de/alfadns.php on line 49

Klar, logisch. Der zweite Parameter muss ein array sein, im Internet hatte ich das nur so gefunden. Ich weiss nicht wie genau das Array aufgebaut werden muss und allgm. habe ich nicht viel Ahnung von soap.

Wenn ich versuche ein leeres Array zu übergeben kommt folgendes:

Code:
Fatal error: Uncaught SoapFault exception: [VersionMismatch] Wrong Version in alfadns.php:49 Stack trace: #0 alfadns.php(49): SoapClient->__soapCall('soa.create', Array) #1 alfadns.php(4): AlfaDNS->Execute('soa.create') #2 {main} thrown in alfadns.php on line 49

Mein print_r des Soap Objektes ergibt folgendes:
SoapVar Object ( [enc_type] => 147 [enc_value] => )

Ich wäre echt froh wenn mir jemand helfen kann.
btw. ich habe die PDF Dokumenatation im Anhang des Beitrags gepostet.

PHP:
<?php

$alfadns = new AlfaDNS("<meinkey>");
$alfadns->Execute("soa.create");

class AlfaDNS {
  
    private $url = "";
    private $key = "";
    private $uid = "";
  
    private $soap = null;
  
    public function __construct ($key, $sandbox = true) {
      
        if($sandbox) {
            $this->url = "https://dns-test.alfahosting.de/api/";
        } else {
            $this->url = "https://dns.alfahosting.de/api/";  
        }
      
        $this->key = $key;
        $this->uid = $this->getRandomString();
      
    }
  
    public function Execute ($command) {

        $this->soap = new SoapClient (null,
            array(
                'location' => $this->url,
                'uri' => $this->url,
                'trace' => 1,
                'use' => SOAP_LITERAL,
                'style' => SOAP_DOCUMENT,
            ));
  
      
        $data = $command . "-" . $this->uid;
      
        $params = new \SoapVar("<?xml version=”1.0”?><alfadns login=”foobert”><call command=”soa.list” uid=”12345” auth=”3bb35bc2963bbdd16af03467d650c3cd” /><!-- more calls --><call command=”soa.list” subuser=”sub2dns”uid=”12345” auth=”3bb35bc2963bbdd16af03467d650c3cd” /></alfadns>
        ", XSD_ANYXML);
              
        $hmac = hash_hmac("md5", $data, $this->key);
      
      
        print_r($params);
      
        $result = $this->soap->__soapCall($command, $params);
      
      
    }
  
    private function getRandomString () {
      
        return mt_rand(20, 20);
      
    }
  

  
  
}

?>

Beste Grüße
Der Eiskalteeistee
 

Anhänge

  • dns-api-en.pdf
    127 KB · Aufrufe: 8
Zuletzt bearbeitet von einem Moderator:
Werbung:
Also das was mir auffällt ist in der folgenden Zeile

$params = new \SoapVar("<?xml version=”1.0”?><alfadns login=”foobert”><call command=”soa.list” uid=”12345” auth=”3bb35bc2963bbdd16af03467d650c3cd” /><!-- more calls --><call command=”soa.list” subuser=”sub2dns”uid=”12345” auth=”3bb35bc2963bbdd16af03467d650c3cd” /></alfadns>
", XSD_ANYXML);

Im Text sind Zitat Anfürhungszeichen. Die müsstest du ersetzen und escapen. Also ” => " bzw. \".

Wenn du nun aus $params ein Array machst bekommst du auch ein "VersionMismatch" Error wieder. Aber da wüsste ich nun auch nicht weiter. Dachte nämlich ich versuch auch mal ein Request an die Testumgebung zu schicken, sollten ja ein Fehler zurück liefern wenn ich kein key angeben :D
 
Hi,

habs jetzt angepasst (Kann nicht der fehler sein da es andere Anführungsstriche sind) so dass es jetzt "" sind und der String mit ' ' angeführt wird.

Leider ändert es nichts an der Tatsache das das ganze nicht funktioniert.

Ich hoffe echt hier kann mir jemand dabei helfen.

LG
Eistee
 
Werbung:
Hi,

ja, habe da eine Lösung gefunden.
Ich bin mir nicht mehr 100%ig sicher, kann mich jetzt auch irren, aber versuche es mal ohne soap und einfach nur curl (per POST), dann sollte es gehen.

Kann sonst auch später mal ein kleinen Code Ausschnitt schicken.

LG
Eistee
 
Werbung:
Zurück
Oben