PHP - Consumiendo servicios SOAP por PHP

 
Vista:

Consumiendo servicios SOAP por PHP

Publicado por DvD (2 intervenciones) el 23/02/2017 15:19:06
Estoy iniciándome en esto de los servicios con PHP. Y necesita gran ayuda.

Tenemos el siguiente servicio:

www.hostinternet.net/.../WS_APP_desa/default.asmx

Cómo deberia hacer para poder ejeuctar una función de ese servicio llamada WS_FunctionA, y pasarle el parametro "agente=23"?

Estoy totalmente desorientado con esto.

Decir que el servicio acepta SOAP 1.1 - 1.2 - Get y POST.

Solo quiero saber cómo sacar en un ECHO la respuesta de ese servicio (es un string-Dentro de la respuesta XML claro)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alberto

Consumiendo servicios SOAP por PHP

Publicado por Alberto (12 intervenciones) el 24/02/2017 05:43:54
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public function ConsumirWS() {
        try {
            $client = new SOAPClient("www.hostinternet.net/.../WS_APP_desa/default.asmx?wsdl"); //Debes apendizar ?wsdl que es la descripción del lenguaje
            $params = array(
                'agente' => 23
            );
            $return = $client->WS_FunctionA($params);
            $datos = $return->RespuestaWS_FunctionA; //debes de saber como te va a regresar los datos.
            ....
            // AQUI PONES LO QUE VAS A HACER CON LOS DATOS ($datos).
            ....
            } else {
                //SI EL WS TE REGRESA ALGUN CÓDIGO DE ERROR, LO IMPRIMES AQUI O LO MANDAS A UN ARCHIVO DE LOG.
            }
        } catch (SoapFault $soap) {  //SI FALLA LA COMUNICACIÓN SOAP POR CUALQUIER RAZÓN AQUI LA ATRAPAS Y PROCESAS EL ERROR.
               print_r($soap); //REGULARMENTE UTILIZO $soap->getMessage(); y $soap->getCode(); Que es el mensaje de error y el código del error respectivamente.
 
                    }
    }

Si tienes alguna duda hazmelo saber y con gusto te apoyo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consumiendo servicios SOAP por PHP

Publicado por DvD (2 intervenciones) el 24/02/2017 08:39:47
Muchas gracias por la respuesta.

Al implementar dicha función y llamarla obtengo los siguientes errores:

1
SoapFault Object ( [message:protected] => SOAP-ERROR: Parsing WSDL: Couldn't load from 'www.hostinternet.net/.../WS_APP_desa/default.asmx?wsdl' : failed to load external entity "www.hostinternet.net/.../WS_APP_desa/default.asmx?wsdl" [string:Exception:private] => [code:protected] => 0 [file:protected] => C:\xampp\htdocs\index_prueb.php [line:protected] => 7 [trace:Exception:private] => Array ( [0] => Array ( [file] => C:\xampp\htdocs\index_prueb.php [line] => 7 [function] => SoapClient [class] => SoapClient [type] => -> [args] => Array ( [0] => www.hostinternet.net/.../WS_APP_desa/default.asmx?wsdl ) ) [1] => Array ( [file] => C:\xampp\htdocs\index_prueb.php [line] => 26 [function] => ConsumirWS [args] => Array ( ) ) ) [previous:Exception:private] => [faultstring] => SOAP-ERROR: Parsing WSDL: Couldn't load from 'www.hostinternet.net/.../WS_APP_desa/default.asmx?wsdl' : failed to load external entity "www.hostinternet.net/.../WS_APP_desa/default.asmx?wsdl" [faultcode] => WSDL )

He de decir que al servicio yo accedo introduciendo USUARIO y PASSWORD.

Estoy viendo que en la descripción del servicio tengo esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
SOAP 1.1
 
A continuación se muestra un ejemplo de solicitud y respuesta para SOAP 1.1. Es necesario reemplazar los marcadores de posición que aparecen con valores reales.
 
POST /WS_APP_desa/default.asmx HTTP/1.1
Host: www.hostinternet.net
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "WServiceLUMA/WS_GetAgentesMediador"
 
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <WS_GetAgentesMediador xmlns="WServiceLUMA">
      <codeMediador>string</codeMediador>
    </WS_GetAgentesMediador>
  </soap:Body>
</soap:Envelope>
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
 
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <WS_GetAgentesMediadorResponse xmlns="WServiceLUMA">
      <WS_GetAgentesMediadorResult>string</WS_GetAgentesMediadorResult>
    </WS_GetAgentesMediadorResponse>
  </soap:Body>
</soap:Envelope>
 
SOAP 1.2
 
A continuación se muestra un ejemplo de solicitud y respuesta para SOAP 1.2. Es necesario reemplazar los marcadores de posición que aparecen con valores reales.
 
POST /WS_APP_desa/default.asmx HTTP/1.1
Host: www.hostinternet.net
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length
 
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <WS_GetAgentesMediador xmlns="WServiceLUMA">
      <codeMediador>string</codeMediador>
    </WS_GetAgentesMediador>
  </soap12:Body>
</soap12:Envelope>
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length
 
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <WS_GetAgentesMediadorResponse xmlns="WServiceLUMA">
      <WS_GetAgentesMediadorResult>string</WS_GetAgentesMediadorResult>
    </WS_GetAgentesMediadorResponse>
  </soap12:Body>
</soap12:Envelope>
 
HTTP GET
 
A continuación se muestra un ejemplo de solicitud y respuesta para HTTP GET. Es necesario reemplazar los marcadores de posición que aparecen con valores reales.
 
GET /WS_APP_desa/default.asmx/WS_GetAgentesMediador?codeMediador=string HTTP/1.1
Host: www.hostinternet.net
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
 
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="WServiceLUMA">string</string>
 
HTTP POST
 
A continuación se muestra un ejemplo de solicitud y respuesta para HTTP POST. Es necesario reemplazar los marcadores de posición que aparecen con valores reales.
 
POST /WS_APP_desa/default.asmx/WS_GetAgentesMediador HTTP/1.1
Host: www.hostinternet.net
Content-Type: application/x-www-form-urlencoded
Content-Length: length
 
codeMediador=string
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
 
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="WServiceLUMA">string</string>

Yo quiero obtener como sea los agentes que tiene un mediador. Teniendo yo el codigo del mediador el servicio me debe devolver (y asi lo hace) una cadena tal que asi:

A234|A567|A456|A987|A765

¿Alguien que me pueda echar un cable?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alberto

Consumiendo servicios SOAP por PHP

Publicado por Alberto (12 intervenciones) el 24/02/2017 18:52:35
Te puedo ayudar solo que tendría que ver tu código completo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alberto

Consumiendo servicios SOAP por PHP

Publicado por Alberto (12 intervenciones) el 24/02/2017 22:43:34
Te pongo mas o menos como deberia de quedarte, si quieres que te ayude necesitaria ver como estas llamando y ayudarte a debuggear, que es muy importante para saber como debes mandar llamar correctamente el WS, que aunque se supone que es un estandar, algunos funcionan de otras maneras.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public function ConsumirWS() {
        try {
            $client = new SOAPClient("www.hostinternet.net/.../WS_APP_desa/default.asmx?wsdl"); //Debes apendizar ?wsdl que es la descripción del lenguaje
            $params = array(
                'codeMediador' => '23'
            );
            $return = $client->WS_GetAgentesMediador($params);
            $datos = $return->WS_GetAgentesMediadorResponse ; //debes de saber como te va a regresar los datos. te los resgresa en un objeto parametrizado.
            $result = $datos->WS_GetAgentesMediadorResult; //este es el resultado en un string.
            ....
            // AQUI PONES LO QUE VAS A HACER CON LOS DATOS ($datos).
            ....
            } else {
                //SI EL WS TE REGRESA ALGUN CÓDIGO DE ERROR, LO IMPRIMES AQUI O LO MANDAS A UN ARCHIVO DE LOG.
            }
        } catch (SoapFault $soap) {  //SI FALLA LA COMUNICACIÓN SOAP POR CUALQUIER RAZÓN AQUI LA ATRAPAS Y PROCESAS EL ERROR.
               print_r($soap); //REGULARMENTE UTILIZO $soap->getMessage(); y $soap->getCode(); Que es el mensaje de error y el código del error respectivamente.
 
                    }
    }
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alberto

Consumiendo servicios SOAP por PHP

Publicado por Alberto (12 intervenciones) el 28/02/2017 22:01:33
Si entras con usuario y contraseña habra que ver como te lo pide, por que al ver la descripción en ningun lugar te lo esta requiriendo, solo el codeMediador
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar