Bitte um Hilfe. Xml php Problem

thomas1985

Grünschnabel
Hallo, scheint eine super Seite hier sein, ich hoffe ihr könnt mir helfen :(

Was ich bereits geschafft habe:

Es geht darum, mir einen kleinen Lösungsansatz zu einem bereits kompletten Script zu geben. Es geht darum, mit einer API (xml) unter PHP z.b. eine Domain zu registrieren und ein Handle zu erstellen.

Vom Anbieter: nicdirekt wird ein vollständiges Script vorgelegt. Dieses funktioniert bei mir sehr gut wenn es um die funktion get geht.

Zusammenhang:

Verwendet wird folgendes Script von (Example 1.2. PHP Demo, ganz unten auf der Seite der URL) http://xmlapi.nic-direct.de/ch01.html

Entscheident sind eigentlich nur die unteren Zeilen also

Code:
$obj = new httpRequest("backend.nic-direct.de",80);
$uri = "/bdom/contact/status/NIRAA0002/19/";

print "Unparsed response:\n";
print $obj->get($uri);

Dies funktioniert bereits: Durch Freischaltung meiner IP und meiner Zugangsdaten ist es mir gelungen durch simples ändern von $uri = "/bdom/contact/create/xxx/yyy/"; den Status beispielsweise eines Handels per xml abzurufen. Dies funktioniert also.

Problembeschreibung:

Ich möchte nun z.b. einen Kontakt erstellen, oder einen neuen Nameserver erstellen.

Die Anleitung des Anbieters lautet wie folgt:

Example 2.2. Contact Create:valid request: Siehe: http://xmlapi.nic-direct.de/ch02.html#id2619272

REQUEST:

Generic Operation: PUT(http://backend.nic-direct.de/bdom/contact/create/-/1/,xml)

Generic reference: /contact/OPCODE/HANDLE/USER_ID/

Where:
OPCODE(operation type) availables values:create,status,all,update
HANDLE: Your handle
USER_ID: Your specific id assigned by BDOM system
Where xml:


<?xml version="1.0" encoding="UTF-8"?>
<request xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNameSpaceSchemaLocation="Handle.xsd">
<userid>1</userid>
<type>PERS</type>
<sex>MALE</sex>
<first-name>Johann</first-name>
<last-name>Dous</last-name>
<remarks>Personal Account</remarks>
<organisation>Acme Gmbh.</organisation>
<street>Main Street</street>
<number>10</number>
<postcode>1900</postcode>
<city>Big City</city>
<region>Bayern</region>
<country>DE</country>
<phone>+49.2343233545</phone>
<fax>+49.2343233546</fax>
<protection>YES</protection>
<password>multipass</password>
<email>jdous@dous.com</email>
<operation>REQUEST</operation>
<pin></pin>
</request>


Ich habe seit mehreren Tagen google nach einer Lösung durchforstet, nicdirekt angeschrieben (die nichteinmal antworten). Unter google immer das selbe: Alle suchen nach einer Lösung aber keiner gibt sie :(

Bitte könnt ihr mir helfen, vom prinzip her:

Obige xml in Datei speichern, dann auslesen und dann versenden?!

Ich habe es so versucht: (test2.xml ist obige xml als datei + Handle.xsd von nicdirekt)

$obj = new httpRequest("backend.nic-direct.de",80);
$uri = "/bdom/contact/create/xxxx/yyyy/";

define( "XML_FILE", "test2.xml" );
$body = implode( "", file(XML_FILE) );

print "Unparsed response:\n";
print $obj->get($uri);

Nur leider funktioniert dies nicht...

Bitte helft mir.
 
Zuletzt bearbeitet:
Willkommen im Forum!
Dein Beitrag ist ja schon gut strukturiert bis zum Anfang vom Code.
Weiter habe ich aber auch nicht gelesen weils unübersichtlich wurd.
Schließe PHP bitte in Tags ein.
Und verkürze dein Beitrag ruhig aufs wesentliche.
Ist schon schön vollständig was du geliefert hast, aber arg viel.

Schaus mir dann danach nochmal an ;)
 
Moin!

Ich glaube die Lösung ist recht einfach; kann es sein das Du nur vergessen hast die POST-Daten an den Request zu hängen?
PHP:
$o = new HttpRequest("http://backend.nic-direct.de/bdom/contact/create/xxxx/yyyy/");
$o->setRawPostData(file_get_contents("./test2.xml"));
echo $o->getUrl();
Eventuell musst Du auch den entsprechenden Mime-Typen für den Request setzen, mittels setContentType();
Im Übrigen bin ich mir nicht sicher, ob Du das HttpRequest Objekt bisher richtig angesprochen hast. Laut Doku werden z.B. im Konstruktor doch etwas andere Parameter erwartet...

Gruß
Enum
 
Zuletzt bearbeitet:
Erstmal danke für die Hilfe. Ich denke auch das es nur ein kleines Problem ist, aber ich kenn mich da einfach nicht vernünftig aus. Ich habe Ihre Lösung versucht:

PHP:
$o = new HttpRequest("http://backend.nic-direct.de/bdom/contact/create/xxx/yyy/",80);
$o->setRawPostData(file_get_contents("./test2.xml"));
echo $o->getUrl();

Erhalte aber leider folgende Fehlermeldung:

PHP:
Fatal error: Call to undefined method httpRequest::setRawPostData() in /var/www/web3/html/xml2.php on line: (  $o->setRawPostData(file_get_contents("./test2.xml"));  )

Wäre echt super wenn mir jemand hier helfen könnte.
 
Leider ist also diese Funktion (setRawPostData) nicht verfügbar. Gibt es noch eine andere Möglichkeit?
Vorhanden ist die neueste Version von php (5.2.x) also z.b auch simplexml und sowas.
 
Auf dem Server ist folgendes PECL installiert:

1.0.1 $Id: pdo_sqlite.c,v 1.10.2.6 2006/01/01 12:50:12 sniper Exp $

Sollte doch also funktionieren... tuts aber nicht...
 
Hi!

1.0.1 $Id: pdo_sqlite.c,v 1.10.2.6 2006/01/01 12:50:12
Bist Du Dir sicher dass Du so die PECL-Version herausfindest? Egal, es gibt noch andere Möglichkeiten. Wie wär's mit cURL?
PHP:
$data = file_get_contents($filename);
$length = strlen($data);
$curl = curl_init();

curl_setopt_array($curl
, CURLOPT_URL => $url
, CURLOPT_POST => true
, CURLOPT_RETURNTRANSFER => true
, CURLOPT_HEADER => array(
  "Content-length: $length"
, "Content-type: text/xml"
)
, CURLOPT_POSTFIELDS => $data
);

if(($response = curl_exec($curl)) !== FALSE) {
  // mach irgendwas mit dem kram
}
else {
  die(sprintf(
    "Fehler no. %d: %s"
  , curl_errno($curl)
  , curl_error($curl)
  ));
}

Gruß
Enum
 
Vielen Dank Enumerator. :)

Zwar hat dein Script mir eine Fehlermeldung ausgespuckt (irgend nen Fehler wahrscheinlich im Array),
aber nach langem ausprobieren funktioniert nun alles. (Grundlage war dein Script mit curl)

=> D.h ich kann nun über xml Handles erstellen, Kontakte erstellen, Domains registrieren usw. Und das nur dank deiner Hilfe. Nochmals vielen Dank.
 
Zurück