Mit dem PHP SoapClient rufe ich die WSDL unter Ссылка und an Ich bekomme die folgende XML-Antwort (wie von $soapclient->__last_response
angezeigt)
Trotzdem gibt der Aufruf von $soapclient->simulateOrder()
null
zurück.
Wie bekomme ich den PHP SoapClient, um ein Objekt anstelle von null zurückzugeben?
Hinweis: Das XML, das ich für den Soap-Aufruf verwende, wird manuell durch eine Überschreibung auf SoapClient::__doRequest()
generiert. Der Code für den Soap-Call sieht folgendermaßen aus:
Es werden keine Ausnahmen ausgelöst, aber $result
ist null
Das Problem ist das SSL-Setup. Der Fehler, der beim Aufruf meines Codes auf meinem Server ausgelöst wird, ist folgender:
Schwerwiegender Fehler: Uncaught SoapFault-Ausnahme: [WSDL] SOAP-FEHLER: WSDL-Analyse: Konnte nicht von ' Ссылка ": Externe Entität konnte nicht geladen werden " Ссылка "in /home/repojarilo/public_html/sc.php:22 Stack-Trace: # 0 /home/repojarilo/public_html/sc.php(22): SoapClient- & gt; SoapClient (' Ссылка ... ', Array) # 1 {main} geworfen in ... in Zeile 22
Ich gehe davon aus, dass Sie versuchen, den Code mit einem selbstsignierten Zertifikat zu verwenden, wie in Ihrem SSL-Array innerhalb der Anfrage angegeben, aber es sieht so aus, als ob der SoapClient es nicht beachtet und trotzdem einen Fehler auslöst / p>
Also wäre meine Lösung, entweder ein SSL zu kaufen (heutzutage sehr billig, probiere Seiten wie namecheap usw. aus) oder verwende etwas wie Ссылка um ein SSL zu erhalten, mit dem Ihr Soap-Client korrekt arbeiten kann.
Schließlich habe ich einen Tippfehler bemerkt, in deinem Code eine Zeile vor dem letzten hast du ));
, was )));
lesen sollte.
Koda
Das Problem ist, dass SOAP ein gültiges SSL-Zertifikat benötigt.
Für einen Test-Server ist es manchmal nicht den Aufwand wert. Vielleicht hilft Ihnen dieser Link, ein kleines Workarround zu verwenden, um Ihre SOAP-Anfrage zu bearbeiten, ohne ein vollständig validiertes SSL-Zertifikat erstellen zu müssen:
Problem ist nicht Ihr Zertifikat als Client, sondern das Serverzertifikat selbst (versuchen Sie Ссылка in einem Browser), das ist ungültig. Sie können es perfekt ignorieren, als Server-Zertifikat ist es hauptsächlich Phishing zu vermeiden, und ich verstehe, dass es wirklich die URL ist, die Sie erreichen möchten. In der Befehlszeilencurl wird dies mit der Option -k realisiert. In PHP, SoapClient genau, können Sie dies (genau Ihr Problem, überprüfen Sie dritte Antwort und sehen, was über PHP7 sagt)
HINWEIS: Sie laden wsdl, die Definitionsdatei des Dienstes, bei jeder Konstruktion von SoapClient. Wenn Sie $ soapclient als statische Variable speichern, können Sie die Methoden jederzeit verwenden, ohne das Client-Objekt neu erstellen zu müssen (und so das erneute Laden und Uminterpretieren der WSDL-Datei zu vermeiden, die alle 1 bis 5 Sekunden verzögern kann) die Zeit.
Tags und Links php soap-client wsdl