PHP Soap nicht-WSDL-Aufruf: Wie übergeben Sie Parameter?
-
06-09-2019 - |
Frage
Ich versuche, einen nicht-WSDL-Aufruf in PHP (5.2.5) wie folgt zu machen. Ich bin sicher, ich bin etwas fehlt einfach. Dieser Aufruf hat einen Parameter, eine Zeichenfolge, die so genannten „Zeitzone“:
$URL = 'http://www.nanonull.com/TimeService/TimeService.asmx';
$client = new SoapClient(null, array(
'location' => $URL,
'uri' => "http://www.Nanonull.com/TimeService/",
'trace' => 1,
));
// First attempt:
// FAILS: SoapFault: Object reference not set to an instance of an object
$return = $client->__soapCall("getTimeZoneTime",
array(new SoapParam('ZULU', 'timezone')),
array('soapaction' => 'http://www.Nanonull.com/TimeService/getTimeZoneTime')
);
// Second attempt:
// FAILS: Generated soap Request uses "param0" instead of "timezone"
$return = $client->__soapCall("getTimeZoneTime",
array('timezone'=>'ZULU' ),
array('soapaction' => 'http://www.Nanonull.com/TimeService/getTimeZoneTime')
);
Vielen Dank für alle Vorschläge
-Dave
Lösung 2
Danke. Hier ist das komplette Beispiel, das nun funktioniert:
$URL = 'http://www.nanonull.com/TimeService/TimeService.asmx';
$client = new SoapClient(null, array(
'location' => $URL,
'uri' => "http://www.Nanonull.com/TimeService/",
'trace' => 1,
));
$return = $client->__soapCall("getTimeZoneTime",
array(new SoapParam('ZULU', 'ns1:timezone')),
array('soapaction' => 'http://www.Nanonull.com/TimeService/getTimeZoneTime')
);
Andere Tipps
@ Dave C-Lösung nicht für mich arbeiten. Umsah kam ich mit einer anderen Lösung:
$URL = 'http://www.nanonull.com/TimeService/TimeService.asmx';
$client = new SoapClient(null, array(
'location' => $URL,
'uri' => "http://www.Nanonull.com/TimeService/",
'trace' => 1,
));
$return = $client->__soapCall("getTimeZoneTime",
array(new SoapParam(new SoapVar('ZULU', XSD_DATETIME), 'timezone')),
array('soapaction' => 'http://www.Nanonull.com/TimeService/getTimeZoneTime')
);
Hope dies jemand helfen kann.
Das Problem liegt irgendwo in den fehlenden Namespace-Informationen in den Parametern. Ich habe den ersten Fall von Ihrem Beispiel, da es am nächsten war, was ich kam mit.
Wenn Sie die Zeile:
array(new SoapParam('ZULU', 'timezone')),
zu:
array(new SoapParam('ZULU', 'ns1:timezone')),
sollte es geben Sie das Ergebnis Sie erwartet.
Sie könnten versuchen, einen anderen array()
Anruf um Ihren params wie folgt hinzuzufügen:
$params = array('timezone'=>'ZULU' );
$return = $client->__soapCall("getTimeZoneTime",
array($params),
array('soapaction' => 'http://www.Nanonull.com/TimeService/getTimeZoneTime')
);
Das kann ich nicht testen, aber man könnte.