Ich bin es gewohnt, PHP-Code zu schreiben, verwende aber nicht oft objektorientierte Codierung. Ich muss jetzt mit SOAP (als Client) interagieren und kann die Syntax nicht richtig verstehen. Ich habe eine WSDL-Datei, mit der ich mithilfe der SoapClient-Klasse eine neue Verbindung ordnungsgemäß einrichten kann. Ich kann jedoch nicht den richtigen Anruf tätigen und keine Daten zurückerhalten. Ich muss die folgenden (vereinfachten) Daten senden:
- Kontakt-ID
- Kontaktname
- Allgemeine Beschreibung
- Menge
Im WSDL-Dokument sind zwei Funktionen definiert, aber ich benötige nur eine ("FirstFunction" unten). Hier ist das Skript, das ich ausführe, um Informationen zu den verfügbaren Funktionen und Typen zu erhalten:
$client = new SoapClient("http://example.com/webservices?wsdl");
var_dump($client->__getFunctions());
var_dump($client->__getTypes());
Und hier ist die Ausgabe, die es generiert:
array(
[0] => "FirstFunction Function1(FirstFunction $parameters)",
[1] => "SecondFunction Function2(SecondFunction $parameters)",
);
array(
[0] => struct Contact {
id id;
name name;
}
[1] => string "string description"
[2] => string "int amount"
}
Angenommen, ich möchte die FirstFunction mit den Daten aufrufen:
- Kontakt-ID: 100
- Name des Ansprechpartners: John
- Allgemeine Beschreibung: Ölfass
- Betrag: 500
Was wäre die richtige Syntax? Ich habe alle möglichen Optionen ausprobiert, aber es scheint, dass die Seifenstruktur ziemlich flexibel ist, so dass es sehr viele Möglichkeiten gibt, dies zu tun. Konnte es auch nicht aus dem Handbuch herausfinden ...
UPDATE 1: Probe von MMK ausprobiert:
$client = new SoapClient("http://example.com/webservices?wsdl");
$params = array(
"id" => 100,
"name" => "John",
"description" => "Barrel of Oil",
"amount" => 500,
);
$response = $client->__soapCall("Function1", array($params));
Aber ich bekomme diese Antwort : Object has no 'Contact' property
. Wie Sie in der Ausgabe von sehen können getTypes()
, gibt es einen struct
Aufruf Contact
, also muss ich wohl irgendwie klarstellen, dass meine Parameter die Kontaktdaten enthalten, aber die Frage ist: Wie?
UPDATE 2: Ich habe auch diese Strukturen ausprobiert, der gleiche Fehler.
$params = array(
array(
"id" => 100,
"name" => "John",
),
"Barrel of Oil",
500,
);
Ebenso gut wie:
$params = array(
"Contact" => array(
"id" => 100,
"name" => "John",
),
"description" => "Barrel of Oil",
"amount" => 500,
);
Fehler in beiden Fällen: Objekt hat keine 'Kontakt'-Eigenschaft`