Webservices (soap,rest,...) - Conectarse a servicios web con xml y soap

 
Vista:
sin imagen de perfil
Val: 1
Ha mantenido su posición en Webservices (soap,rest,...) (en relación al último mes)
Gráfica de Webservices (soap,rest,...)

Conectarse a servicios web con xml y soap

Publicado por Vicky (1 intervención) el 23/10/2019 11:24:51
Hola,
Estoy integrando un web service de una mayorista de viajes en una web.
Tengo creada una clase con todos los métodos de llamada que necesito y luego las funciones que ejecutarán estos métodos dependiendo de las elecciones del usuario. Hay una llamada que se me resiste.
Tengo que solicitar la disponibilidad para un determinado circuito, fecha, punto de salida y número de pasajeros por ejemplo (1 habitación con ocupación de una persona edad 30 años y otra habitación con ocupación 2 personas de 35 y 45 años respectivamente)
Estos datos se han sacado previamente de un formulario.
Esta es el ejemplo de Request soap

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
<?xml version = "1.0" encoding = "UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="http://localhost:8080/ITRCIRSRV/itinerary">
<SOAP-ENV:Body>
<ns1:availability>
<arg0>
<destinyCode>ES</destinyCode>
<distribution>
<distributionId>1</distributionId>
<pax>
<age>30</age>
<paxId>1</paxId>
<pickUpPointCode>MAD00</pickUpPointCode>
</pax>
</distribution>
<distribution>
<distributionId>2</distributionId>
<pax>
<age>35</age>
<paxId>2</paxId>
<pickUpPointCode>MAD00</pickUpPointCode>
</pax>
<pax>
<age>35</age>
<paxId>3</paxId>
<pickUpPointCode>MAD00</pickUpPointCode>
</pax>
</distribution>
<itineraryCode>PBC1T2</itineraryCode>
<startDate>03-11-2019</startDate>
</arg0>
</ns1:availability>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

El método que tengo creado es el siguiente
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
public function availability($destinyCode = '', $itineraryCode = '', $startDate, $distribution = array(), $nuevaSesion = FALSE, $itineraryType = FALSE)
{
    if($startDate && $distribution)
    {
        $this->entrada['arg0']['startDate'] = $startDate;
        if($destinyCode) $this->entrada['arg0']['destinyCode'] 	= $destinyCode;
        if($itineraryCode) $this->entrada['arg0']['itineraryCode'] 	= $itineraryCode;
 
        foreach($distribution as $h=>$dis)
        {
            $this->entrada['arg0']['distribution']['distributionId'] = $h;
            foreach($dis as $p=>$d)
            {
                $this->entrada['arg0']['distribution']['pax']['paxId']= $p;
                $this->entrada['arg0']['distribution']['pax']['age'] = $d['age'];
                $this->entrada['arg0']['distribution']['pax']['pickUpPointCode'] = $d['pickUpPointCode'];
            }
        }
        if($nuevaSesion)
        {
            self::setNodoLogin();
        }
        else
        {
            $this->entrada['arg0']['sessionId'] = $this->idSesion;
        }
        //LLAMADA
        $this->ws = new SoapClient($this->url,$this->entrada);
        //RESPUESTA
        $this->respuesta = $this->ws->availability($this->entrada);
        self::iniciarRequest();
        //	echo "REQUEST:\n" . htmlentities($this->ws->__getLastRequest()) . "\n<br><br>";  //REQUEST Desarrollo
 
    }
}

Hasta aquí todo bien, tengo creada una función que llama al método disponibilidad con los parámetros que necesita

$wsi->availability($destinyCode,$itineraryCode,$startDate,$params);

$params, es un array que guarda las distribuciones,
$distributionId = 1; // (este número irá incrementando según el número de distribuciones, tengo un campo oculto de formulario con el número de habitaciones)
$paxId = 1; // (lo mismo irá aumentando según número de pasajeros, también campo oculto de formulario con número de pasajeros en cada tipo de habitación)
$age = 30; // (edad sacada de formulario)
$pickupPointCode = 'MAD00'; //(punto de salida sacado de formulario)
Tengo puesto este de prueba

1
2
3
4
5
6
7
8
9
10
11
12
$params =array (
	'distribution' =>  array (
    	  'distributionId' => $distributionId,
   	   'pax' =>
    	  array (
     		   'age' => $age,
     		   'paxId' => $paxId,
     		   'pickUpPointCode' => $pickupPointCode,
     		 ),
 	   ),
 
);

El problema me surge a la hora de obtener más de una distribución, no sé cómo armar el array para que me funcione.
Es decir convertir la siguiente petición soap en la función anterior

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<distribution>
<distributionId>1</distributionId>
<pax>
<age>30</age>
<paxId>1</paxId>
<pickUpPointCode>MAD00</pickUpPointCode>
</pax>
</distribution>
<distribution>
<distributionId>2</distributionId>
<pax>
<age>35</age>
<paxId>2</paxId>
<pickUpPointCode>MAD00</pickUpPointCode>
</pax>
<pax>
<age>35</age>
<paxId>3</paxId>
<pickUpPointCode>MAD00</pickUpPointCode>
</pax>
</distribution>

Alguien me puede orientar?.
Muchas gracias de antemano
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