tutorial - php warenkorb script




Wie man einen Webservice von PHP einfach konsumiert (5)

Angenommen, Ihnen wurde Folgendes zur Verfügung gestellt:

<x:Envelope xmlns:x="http://schemas.xmlsoap.org/soap/envelope/" xmlns:int="http://thesite.com/">
    <x:Header/>
    <x:Body>
        <int:authenticateLogin>
            <int:LoginId>12345</int:LoginId>
        </int:authenticateLogin>
    </x:Body>
</x:Envelope>

und

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <authenticateLoginResponse xmlns="http://thesite.com/">
            <authenticateLoginResult>
                <RequestStatus>true</RequestStatus>
                <UserName>003p0000006XKX3AAO</UserName>
                <BearerToken>Abcdef1234567890</BearerToken>
            </authenticateLoginResult>
        </authenticateLoginResponse>
    </s:Body>
</s:Envelope>

Nehmen wir an, dass der Zugriff auf http://thesite.com/ besagt, dass die WSDL-Adresse lautet: http://thesite.com/PortalIntegratorService.svc?wsdl

$client = new SoapClient('http://thesite.com/PortalIntegratorService.svc?wsdl');
$result = $client->authenticateLogin(array('LoginId' => 12345));
if (!empty($result->authenticateLoginResult->RequestStatus)
    && !empty($result->authenticateLoginResult->UserName)) {
    echo 'The username is: '.$result->authenticateLoginResult->UserName;
}

Wie Sie sehen können, werden die im XML angegebenen Elemente im PHP-Code verwendet, obwohl der LoginId-Wert geändert werden kann.

Gibt es ein Tool für PHP, mit dem Code für die Nutzung eines Web-Services basierend auf seiner WSDL generiert werden kann? Etwas vergleichbar mit dem Klicken auf "Add Web Reference" in Visual Studio oder dem Eclipse-Plugin, das dasselbe für Java tut.



Ich hatte großen Erfolg mit wsdl2php . Es erstellt automatisch Wrapper-Klassen für alle Objekte und Methoden, die in Ihrem Web-Service verwendet werden.


In PHP 5 können Sie mit SoapClient in der WSDL die Web-Service-Funktionen aufrufen. Zum Beispiel :

$client = new SoapClient("some.wsdl");

und $ client ist jetzt ein Objekt, das Klassenmethoden wie in sws.wsdl definiert hat. Wenn es also eine Methode namens getTime in der WSDL gäbe, würden Sie einfach anrufen:

$result = $client->getTime();

Und das Ergebnis davon wäre (offensichtlich) in der Variable $ result. Sie können die __getFunctions-Methode verwenden, um eine Liste aller verfügbaren Methoden zurückzugeben.


Nun, diese Funktionen sind spezifisch für ein Tool, das Sie für die Entwicklung in diesen Sprachen verwenden.

Sie würden diese Werkzeuge nicht haben, wenn Sie (zum Beispiel) den Editor zum Schreiben von Code verwenden würden. Also, vielleicht sollten Sie die Frage für das Werkzeug, das Sie verwenden, stellen.

Für PHP: http://webservices.xml.com/pub/a/ws/2004/03/24/phpws.html





wsdl