Eine Seifenoper und happy end

Paspirgilis

Weißer Powerranger
Hi,
Ich hab wieder ein Problem mit SOAP.
Ich möchte einen SOAP request absetzen um Userinformationen zu bekommen.
Das Sicherheits verfahren "usernameToken" wird verwendet.

Bitte im thread von den hypothetischen Spezifikationen ausgehen:
url der website: http://www.site.de
loginUsername: user123
loginPassword: pw123
WSDL-File: http://www.provider.de/wsdl
UserId des User dessen userinfos ich bekommen will: 78256
Funktion des Webservices die ich nutzen will: getEmployee

Ich habe ein Codebeispiel auf php.net gefunden, komme aber nicht klar :(
Soweit mein Code:
PHP:
Step1: Create two classes to create a structure for WSSE headers  <br/><br/>

<?php

class clsWSSEAuth {

    private $Username;
    private $Password;

    function __construct($username, $password) {
        $this->Username = $username;
        $this->Password = $password;
    }

}

class clsWSSEToken {

    private $UsernameToken;

    function __construct($innerVal) {
        $this->UsernameToken = $innerVal;
    }

}
?>

Step2: Create Soap Variables for UserName and Password<br/><br/>

<?php
$username = 'user123';
$password = 'pw123';

//Check with your provider which security name-space they are using.
$strWSSENS = "http://schemas.xmlsoap.org/ws/2002/07/secext";

$objSoapVarUser = new SoapVar($username, XSD_STRING, NULL, $strWSSENS, NULL, $strWSSENS);
$objSoapVarPass = new SoapVar($password, XSD_STRING, NULL, $strWSSENS, NULL, $strWSSENS);
?>

Step3: Create Object for Auth Class and pass in soap var<br/><br/>

<?php
$objWSSEAuth = new clsWSSEAuth($objSoapVarUser, $objSoapVarPass);
?>

Step4: Create SoapVar out of object of Auth class<br/><br/>

<?php
$objSoapVarWSSEAuth = new SoapVar($objWSSEAuth, SOAP_ENC_OBJECT, NULL, $strWSSENS, 'UsernameToken', $strWSSENS);
?>

Step5: Create object for Token Class<br/><br/>

<?php
$objWSSEToken = new clsWSSEToken($objSoapVarWSSEAuth);
?>

Step6: Create SoapVar out of object of Token class<br/><br/>

<?php
$objSoapVarWSSEToken = new SoapVar($objWSSEToken, SOAP_ENC_OBJECT, NULL, $strWSSENS, 'UsernameToken', $strWSSENS);
?>

Step7: Create SoapVar for 'Security' node<br/><br/>

<?php
$objSoapVarHeaderVal = new SoapVar($objSoapVarWSSEToken, SOAP_ENC_OBJECT, NULL, $strWSSENS, 'Security', $strWSSENS);
?>

Step8: Create header object out of security soapvar<br/><br/>

<?php
$objSoapVarWSSEHeader = new SoapHeader($strWSSENS, 'Security', $objSoapVarHeaderVal, true, 'http://abce.com');

//Third parameter here makes 'mustUnderstand=1
//Forth parameter generates 'actor="http://abce.com"'
?>

Step9: Create object of Soap Client<br/><br/>

<?php
$objClient = new SoapClient('http://www.provider.de/wsdl');
?>

Step10: Set headers for soapclient object<br/><br/>

<?php
$objClient->__setSoapHeaders(array($objSoapVarWSSEHeader));
?>

Step 11: Final call to method<br/><br/>

<?php
$objResponse = $objClient->__soapCall('getEmployee', array(78256));
?>

Der usernameToken soll eigentlich base64 codiert sein und den loginnamen und den tiemstamp in milisekunden beinhalten.

Bitte hilft mir :(

MfG
Mark Paspirgilis
 
Ich kriege folgende Fehlermeldung:
Code:
Fatal error: Uncaught SoapFault exception: [ns1:InvalidSecurity] An error was discovered processing the header in /home/markpaspirgilis/webdevelopement/saml-test/soap3.php:95 Stack trace: #0 /home/markpaspirgilis/webdevelopement/saml-test/soap3.php(95): SoapClient->__soapCall('getEmployee', Array) #1 {main} thrown in /home/markpaspirgilis/webdevelopement/saml-test/soap3.php on line 95
 
Zurück