Comment consommer facilement un service web à partir de PHP

Existe - t-il un outil pour PHP qui peut être utilisé pour générer du code pour 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.

56
demandé sur Edo 2008-08-07 09:48:33

7 réponses

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.

20
répondu pix0r 2014-10-23 19:04:18

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

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

Et $client est maintenant un objet qui a des méthodes de classe telles que définies dans certains.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 de cela serait (évidemment) dans la variable $ result. Vous pouvez utiliser la méthode __getFunctions pour renvoyer une liste de toutes les méthodes disponibles.

86
répondu DavidM 2013-12-26 05:40:41

J'ai utilisé NuSOAP dans le passé. Je l'ai aimé parce que c'est juste 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 a également le support WSDL, ce qui est un bonus.

10
répondu Wally Lawless 2018-06-11 15:35:59

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

Vous n'auriez pas ces outils si (par exemple) vous utilisiez le bloc-notes pour écrire du code. Donc, 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

2
répondu Vaibhav 2008-08-07 07:17:55

Cet article explique comment vous pouvez utiliser PHP SoapClient pour appeler un service Web api.

2
répondu Hoan 2011-07-26 09:50:11

Salut, je l'ai obtenu de ce site: http://forums.asp.net/t/887892.aspx?Consume+un + ASP + NET + Web + Service + avec + PHP

Le service web a la 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")));
?>
1
répondu Mashudu Muleya 2015-09-09 09:32:51

Dites que vous avez reçu ce qui suit:

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

1
répondu Luke Wenke 2016-05-06 09:24:11