Hola amigos .....para variar sufriendo con los servicios web, necesito una ayuda urgente , ahora tengo que conectarme desde php aun web service en wcf,para recibir los datos no tengo problemas pero tengo que enviar los datos a un servicio el cual recibe un arreglo de datos.
Este es el arreglo "DatosDetalleConsumo" que recibe el web service:
<d4p1:DatosDetalleConsumo>
<d4p1:Cantidad>10</d4p1:Cantidad>
<d4p1:CodigoConsumo>30</d4p1:CodigoConsumo>
<d4p1:FechaConsumo>2010-12-01T16:51:00</d4p1:FechaConsumo>
<d4p1:IdCasino>1</d4p1:IdCasino>
<d4p1:IdTipoServicio>1</d4p1:IdTipoServicio>
<d4p1:NumeroContrato>4500002505</d4p1:NumeroContrato>
<d4p1:RutContratista>78454860-0</d4p1:RutContratista>
<d4p1:ValorNeto>15</d4p1:ValorNeto>
</d4p1:DatosDetalleConsumo>
He realizado el envio de 3 formas y tengo error:
Forma 1:
$client = new SoapClient('http://IP/DemandaWs/Demandas.svc?wsdl');
$param = array('Cantidad' => $Cantidad,'CodigoConsumo' => $CodigoConsumo,
'FechaConsumo' =>$FechaConsumo, 'IdCasino' => $IdCasino, 'IdTipoServicio' => $IdTipoServicio,'NumeroContrato' => $NumeroContrato,
'RutContratista' => $RutContratista,'ValorNeto' => $ValorNeto);
$result =$client->Consumos($param);
var_dump($param);
De esta Forma me retorno el sgte error:
object(stdClass)#2 (1) { ["ConsumosResult"]=> object(stdClass)#3 (3) { ["ConError"]=> bool(true) ["Detalle"]=> string(40) "El par{ametro consumos no puede ser nulo" ["Mensaje"]=> string(43) "El informe de consumo debe contener valores" } }
Converse con el proveedor del Servicio y me indico que estaba enviando los parametros en forma directa al servicio y que no estaba pasando primero por el arreglo DatosDetalleConsumo, me indico que en .net ello hacia asi:
using (DemandasClient proxy = new DemandasClient())
{
List<DatosDetalleConsumo> detallesConsumo = new List<DatosDetalleConsumo>();
detallesConsumo.Add(new DatosDetalleConsumo() { Cantidad = 0, CodigoConsumo = 1, FechaConsumo = DateTime.Now, IdCasino = 1, IdTipoServicio = 1, NumeroContrato = "4500002505", RutContratista = "78454860-0", ValorNeto = 100 });
Respuesta r = proxy.Consumos(detallesConsumo);
}
Por lo tanto intente hacerlo asi
Forma 2
$client = new SoapClient('http://10.120.2.30/DemandaWs/Demandas.svc?wsdl');
$param = array('DatosDetalleConsumo' => array('Cantidad' => $Cantidad,'CodigoConsumo' => $CodigoConsumo,
'FechaConsumo' =>$FechaConsumo, 'IdCasino' => $IdCasino, 'IdTipoServicio' => $IdTipoServicio,'NumeroContrato' => $NumeroContrato,
'RutContratista' => $RutContratista,'ValorNeto' => $ValorNeto));
$result =$client->Consumos($param);
var_dump($param);
Forma 3
$client = new SoapClient('http://10.120.2.30/DemandaWs/Demandas.svc?wsdl');
$param = array('Cantidad' => $Cantidad,'CodigoConsumo' => $CodigoConsumo,'FechaConsumo' =>$FechaConsumo, 'IdCasino' => $IdCasino, 'IdTipoServicio' => $IdTipoServicio,'NumeroContrato' => $NumeroContrato, 'RutContratista' => $RutContratista,'ValorNeto' => $ValorNeto);
$result =$client->Consumos("DatosDetalleConsumo",$param);
var_dump($result);
El error que me indica para las formas 2 y 3 :
Fatal error: Uncaught SoapFault exception: [a:DeserializationFailed] The formatter threw an exception while trying to deserialize the message: Error in deserializing body of request message for operation 'Consumos'. End element 'Body' from namespace 'http://schemas.xmlsoap.org/soap/envelope/' expected. Found element 'param1' from namespace ''. Line 2, position 149. in C:\Archivos de programa\Apache Group\Apache2\htdocs\WEB\consumo.php:26 Stack trace: #0 C:\Archivos de programa\Apache Group\Apache2\htdocs\WEB\consumo.php(26): SoapClient->__call('Consumos', Array) #1 C:\Archivos de programa\Apache Group\Apache2\htdocs\WEB\consumo.php(26): SoapClient->Consumos('DatosDetalleCon...', Array) #
El problema que tengo es que no se como pasar los parametros al arreglo que recibe el servicio?
Se agradece cualquier ayuda....