Question

Existe-t-il un outil pour PHP pouvant être utilisé pour générer du code permettant de consommer un service Web basé sur son WSDL?Quelque chose de comparable à cliquer sur "Ajouter une référence Web" dans Visual Studio ou le plugin Eclipse qui fait la même chose pour Java.

Était-ce utile?

La solution

J'ai eu beaucoup de succès avec wsdl2php.Il créera automatiquement des classes wrapper pour tous les objets et méthodes utilisés dans votre service Web.

Autres conseils

En PHP 5, vous pouvez utiliser Client de savon sur le WSDL pour appeler les fonctions du service web. Par exemple:

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

et $client est maintenant un objet qui possède des méthodes de classe telles que définies dans some.wsdl.Donc, s'il y avait une méthode appelée getTime dans le WSDL, vous appelleriez simplement :

$result = $client->getTime();

Et le résultat serait (évidemment) dans la variable $result.Vous pouvez utiliser la méthode __getFunctions pour renvoyer une liste de toutes les méthodes disponibles.

j'ai utilisé NuSOAP dans le passé.Je l'ai aimé car il s'agit simplement d'un ensemble de fichiers PHP que vous pouvez inclure.Il n'y a rien à installer sur le serveur Web et aucune option de configuration à modifier.Il prend également en charge WSDL, ce qui est un bonus.

Ce article explique comment utiliser PHP SoapClient pour appeler un service Web API.

Eh bien, ces fonctionnalités sont spécifiques à un outil que vous utilisez pour le développement dans ces langages.

Vous n'auriez pas ces outils si (par exemple) vous utilisiez le bloc-notes pour écrire du code.Alors, vous devriez peut-être poser la question pour l'outil que vous utilisez.

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

Bonjour, j'ai récupéré ça sur ce site : http://forums.asp.net/t/887892.aspx?Consume+an+ASP+NET+Web+Service+with+PHP

Le service Web a une méthode Add qui prend deux paramètres :

<?php
    $client = new SoapClient("http://localhost/csharp/web_service.asmx?wsdl");

     print_r( $client->Add(array("a" => "5", "b" =>"2")));
?>

Supposons que l'on vous ait fourni les éléments suivants :

<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>

et

<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>

Disons que l'accès http://thesite.com/ a dit que l'adresse WSDL est :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;
}

Comme vous pouvez le voir, les éléments spécifiés dans le XML sont utilisés dans le code PHP bien que la valeur LoginId puisse être modifiée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top