2017-08-17 1 views
0

Ich versuche, einen SOAP-Webservice in PHP zu erstellen, aber ich habe einige Probleme Ich versuche, in einem XML-Header zu drucken, um mit dem Webservice-Team zu überprüfen, ob gültig ist oder nicht.Drucken xml von neuen SoapClient

ich es auf diese Weise zu erstellen:

class WsseAuthHeader extends SoapHeader 
{ 
    private $wss_ns = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd'; 
    private $wsp_ns = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText'; 
    private $wsu_ns = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd'; 

    function __construct($user, $pass) 
    { 

     $auth = new stdClass(); 
     $auth->username = new SoapVar($user, XSD_STRING, NULL, $this->wss_ns, NULL, $this->wss_ns); 
     $auth->password = new SoapVar($pass, XSD_STRING, NULL, $this->wss_ns, NULL, $this->wsp_ns); 

     $username_token = new stdClass(); 
     $username_token->UsernameToken = new SoapVar($auth, SOAP_ENC_OBJECT, NULL, $this->wss_ns, 'UsernameToken', $this->wsu_ns); 

     //echo "<pre>"; print_r($username_token); exit(); 

     $security_sv = new SoapVar(
      new SoapVar($username_token, SOAP_ENC_OBJECT, NULL, $this->wss_ns, 'UsernameToken', $this->wss_ns), 
      SOAP_ENC_OBJECT, NULL, $this->wss_ns, 'Security', $this->wss_ns); 
     parent::__construct($this->wss_ns, 'Security', $security_sv, true); 
    } 
} 

Dann versuche ich Webservice aufzurufen und die xml drucken:

$client = new SoapClient("http://xxxxxx?wsdl", array('trace' => 1)); 
$client->__setSoapHeaders(Array(new WsseAuthHeader("myuser", "mypass"))); 

$result = $client->myfunction(51000286); 
echo "REQUEST:\n" . $client->__getLastRequest() . "\n"; 

Ich sah __getLastRequest() in php.net Handbuch, aber es funktioniert nicht Ich kann nur sehen "java.lang.NullPointerException"

Gibt es eine andere Methode? Ich brauche das generierte XML, um es mit Webservice-Jungs zu überprüfen.

Vielen Dank im Voraus

+0

Okay, mal sehen, ob wir gerade die Dinge bekommen. Ich denke, dass Sie einen Klienten in PHP bauen wollen, der einen Webservice verbraucht, der von einem anderen Team, webservice-Kerle, gebaut wird. Wenn das der Fall ist, werden Sie eine ziemlich große Aufgabe haben. Ich kann erklären, wie es geht, aber vorher muss ich erst wissen, ob es das ist, was du willst. – RWC

+0

Ich muss den XML-Header sehen, weil, sie sagten mir, der XML-Header ist leer, und ich glaube nicht. Ich denke, meine Funktion sollte einen "SoapHeader" generieren, und ich denke, das ist ein XML – Alex

+0

Nein, das ist wahrscheinlich nicht das, was Sie tun sollten. Yo sollte nur eine Methode auf dem Web-Service aufrufen (mit Ihrem Client, den Sie bauen müssen) und danach können Sie alles untersuchen, was Sie möchten. Yo sollte sich nicht wirklich um den Header kümmern. Wenn Sie die Webdienst-WSDL sehen können, können Sie eine Anfrage an den Webservice senden, und Sie erhalten eine Antwort, die eine Kopfzeile hat und nicht leer bleibt. Warum sagen die Webservice-Leute Ihnen die Kopfzeile? ist leer? Welcher Header? – RWC

Antwort

0

ich mit lösen könnte:

$client = new SoapClient("http://xxxxxxx?wsdl", array('trace' => 1,'exceptions'=>0));