Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/11/2014, 10:48
wilmer30
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 3 meses
Puntos: 12
Tratamiento de ComplexType en WSDL con SOAP Nativa de PHP

Hola:

Voy creando un Web Service, el nusoap no me funciona en windows o posteriores a php 5.3, por lo que trabajo con SOAP nativa de php, el caso es que el servicio está creado y me devuelven datos pero lo que necesito es que me devuelva un array de datos para recibirlos en el cliente y guardarlo en otra BD,

Mi servicio Web
Código PHP:
Ver original
  1. function pagos($fecha){
  2.     require_once "include/conexion.php";
  3.     $result = sqlsrv_query2("
  4. consulta");
  5.     $datos = array();
  6.     $c=0;
  7.     while($row = sqlsrv_fetch_array($result)){
  8.         for($i = 0; $i<6;$i++){
  9.             $datos[$c][$i]=$row[$i];
  10.         }
  11.         $c++;
  12.     }
  13.     return $datos; //devuelvo un array multidimensional de 6 columnas
  14. }
  15.  
  16. $server->AddFunction("pagos");
  17. $server->handle();
Mi WSDL es como sigue:
Código XML:
Ver original
  1. <?xml version="1.0"?>
  2. <definitions name="AritmeticaServicio"
  3.    targetNamespace="urn:Aritmetica"
  4.     xmlns:tns="urn:Aritmetica"
  5.     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  6.     xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
  7.     xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
  8.     xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
  9.     xmlns="http://schemas.xmlsoap.org/wsdl/">
  10.  
  11.     <wsdl:types>
  12.     <xsd:schema targetNamespace="urn:Aritmetica">
  13.       <xsd:complexType name="resultArray">
  14.         <complexContent>
  15.           <restriction base="SOAP-ENC:Array">
  16.             <attribute ref="SOAP-ENC:arrayType"
  17.                       wsdl:arrayType="xsd:string[][]"/>
  18.           </restriction>
  19.         </complexContent>
  20.       </xsd:complexType>
  21.     </xsd:schema>
  22.     </wsdl:types>
  23.  
  24.     <message name="AritmeticaPeticion">
  25.     <part name="operando1" type="xsd:string" />
  26.   </message>
  27.  
  28.   <message name="AritmeticaRespuesta">
  29.     <part name="respuesta" type="xsd:resultArray" />
  30.   </message>
  31.  
  32.   <portType name="AritmeticaPort">
  33.     <operation name="pagos">
  34.       <input message="tns:AritmeticaPeticion" />
  35.       <output message="tns:AritmeticaRespuesta" />
  36.     </operation>
  37.   </portType>
  38.  
  39.   <binding name="AritmeticaBinding" type="tns:AritmeticaPort">
  40.     <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
  41.     <operation name="pagos">
  42.         <soap:operation soapAction="urn:Aritmetica#pagos" />
  43.         <input>
  44.           <soap:body use="encoded" namespace="urn:Aritmetica"
  45.                     encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
  46.         </input>
  47.         <output>
  48.           <soap:body use="encoded" namespace="urn:Aritmetica"
  49.                     encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
  50.         </output>
  51.     </operation>
  52.   </binding>  
  53.     <service name="AritmeticaServicio">
  54.       <port name="AritmeticaPort" binding="tns:AritmeticaBinding">
  55.         <soap:address location="http://localhost:8080/proyecto/server.php" />
  56.       </port>
  57.     </service>    
  58. </definitions>
Bajo mi percepcion <AritmeticaRespuesta> deberìa devolver el array que necesito, pero cuando en el lado del cliente lo imprimo
Código PHP:
Ver original
  1. try{
  2.  $clienteSOAP = new SoapClient('http://localhost:8080/proyecto/aritmetica.wsdl');
  3.  $resultado_pago = $clienteSOAP->pagos('2014-06-30');
  4.   echo '<pre>';
  5.  var_dump($resultado_pago);
  6.  
  7. } catch(SoapFault $e){
  8. echo '<pre>';
  9.  print_r($e);
  10. }
Como ven si ingresa por try{} pero me està devolviendo un objeto sin dato alguno.

Por favor quisiera por lo menos me den una idea de cual mi problema. Gracias.