PHP SoapClient gibt null zurück, obwohl es eine Antwort gab

8

Mit dem PHP SoapClient rufe ich die WSDL unter Ссылка und an Ich bekomme die folgende XML-Antwort (wie von $soapclient->__last_response angezeigt)

%Vor%

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:

%Vor%

Es werden keine Ausnahmen ausgelöst, aber $result ist null

    
Yirmiyahu Fischer 04.09.2017, 14:32
quelle

3 Antworten

3

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

    
Kodaloid 08.09.2017 09:14
quelle
1

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:

Ссылка

    
suther 13.09.2017 20:49
quelle
1

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.

    
DvTr 13.09.2017 21:01
quelle

Tags und Links