Cómo consumir fácilmente un servicio web desde PHP


¿Existe alguna herramienta para PHP que pueda ser usada para generar código para consumir un servicio web basado en su WSDL? Algo comparable a hacer clic en "Agregar referencia web" en Visual Studio o el complemento Eclipse que hace lo mismo para Java.

Author: Edo, 2008-08-07

7 answers

He tenido un gran éxito con wsdl2php. Creará automáticamente clases de envoltura para todos los objetos y métodos utilizados en su servicio web.

 20
Author: pix0r,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-23 19:04:18

En PHP 5 puede usar SoapClient en el WSDL para llamar a las funciones del servicio web. Por ejemplo:

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

Y client client es ahora un objeto que tiene métodos de clase como se define en algunos.wsdl. Así que si hubiera un método llamado getTime en el WSDL entonces solo llamarías a:

$result = $client->getTime();

Y el resultado de eso (obviamente) estaría en la variable result result. Puede usar el método _ _ getFunctions para devolver una lista de todos los métodos disponibles.

 86
Author: DavidM,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-26 05:40:41

He usado NuSOAP en el pasado. Me gustó porque es solo un conjunto de archivos PHP que puedes incluir. No hay nada que instalar en el servidor web y no hay opciones de configuración que cambiar. Tiene soporte WSDL, así que es un bono.

 10
Author: Wally Lawless,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-11 15:35:59

Bueno, esas características son específicas de una herramienta que está utilizando para el desarrollo en esos lenguajes.

No tendría esas herramientas si (por ejemplo) estuviera usando el bloc de notas para escribir código. Por lo tanto, tal vez debería hacer la pregunta para la herramienta que está utilizando.

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

 2
Author: Vaibhav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-07 07:17:55

Este artículo explica cómo puede usar PHP SoapClient para llamar a un servicio web api.

 2
Author: Hoan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-26 09:50:11

HOLA tengo esto de este sitio: http://forums.asp.net/t/887892.aspx?Consume+an + ASP + NET + Web + Service + with + PHP

El servicio web tiene el método Add que toma dos parámetros:

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

     print_r( $client->Add(array("a" => "5", "b" =>"2")));
?>
 1
Author: Mashudu Muleya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-09 09:32:51

Digamos que se le proporcionó lo siguiente:

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

Y

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

Digamos que accediendo http://thesite.com / dijo que la dirección WSDL es: 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;
}

Como puede ver, los elementos especificados en el XML se utilizan en el código PHP, aunque el valor LoginID se puede cambiar.

 1
Author: Luke Wenke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-06 09:24:11