WebService Soap

30 views
Skip to first unread message

sret...@oneconsultores.com

unread,
Oct 1, 2015, 5:06:00 PM10/1/15
to KumbiaPHP Framework
Hola a todos, recurro a ustedes por un problema que estoy teniendo al responder los datos una vez fueron procesados por un webservice soap
lo que pasa es lo siguiente:

MODO 1
si uso: 

$server = new SoapServer(null,array('uri' => $path_wsdl));

los datos que responde son devueltos de esa manera:

<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="informar-pago.wsdl" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns2="http://xml.apache.org/xml-soap" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
   
<SOAP-ENV:Body>
     
<ns1:InformarPagoResponse>
         
<return xsi:type="ns2:Map">
           
<item>
               
<key xsi:type="xsd:string">Status</key>
               
<value xsi:type="xsd:string">ERROR</value>
           
</item>
           
<item>
               
<key xsi:type="xsd:string">Mensaje</key>
               
<value xsi:type="xsd:string">Rut invalido</value>
           
</item>
           
<item>
               
<key xsi:type="xsd:string">Id</key>
               
<value xsi:type="xsd:int">11111</value>
           
</item>
           
<item>
               
<key xsi:type="xsd:string">dsdsd</key>
               
<value xsi:type="xsd:int">11111</value>
           
</item>
         
</return>
     
</ns1:InformarPagoResponse>
   
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

MODO 2
si uso:

$server = new SoapServer($wsdl_file, array('encoding' => 'ISO-8859-1', 'compression' => true));

o incluso asi

$server = new SoapServer($wsdl_file);


los datos que responde son devueltos de esta otra manera:


<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:tempuri-informarPago" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
   
<SOAP-ENV:Body>
     
<ns1:InformarPagoResponse>
         
<Status xsi:type="xsd:string">ERROR</Status>
         
<Mensaje xsi:type="xsd:string">Rut invalido</Mensaje>
         
<Id xsi:type="xsd:string">11111</Id>
     
</ns1:InformarPagoResponse>
   
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>


El problema es que necesito que vengan del MODO 2 lo cual funciona pero NO DESDE UN CONTROLADOR DE KUMBIA sino que desde fuera del framework
solo sirve el MODO 1 dentro de KUMBIA y no es lo que yo necesito, el modo 2 si es ejecutado dentro de kumbia da el siguiente error:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   
<SOAP-ENV:Body>
     
<SOAP-ENV:Fault>
         
<faultcode>WSDL</faultcode>
         
<faultstring>SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://localhost/servicio/informar-pago.php?wsdl' : failed to load external entity "http://localhost/servicio/informar-pago.php?wsdl"</faultstring>
         
<detail></detail>
     
</SOAP-ENV:Fault>
   
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Cabe mencionar que la parte donde se define la salida en el archivo wsdl es la misma en ambos casos y es la siguiente


<message name="informarPagoResponse">
 
<part name="Status" type="xsd:string">
 
<documentation>Indica si el resultado de la operación fue exitoso.
                Uilizar "OK" (en mayúculas) para informar éxito. Cualquier otro valor será considerado un error.
                En caso de error se recomienda responder con un código de error definido por la institución que consista de una cominación de letras y números, ejemplo: ERR1, PW, BD01, BD02, etc.
</documentation>
 
</part>
 
<part name="Mensaje" type="xsd:string">
 
<documentation>En caso de error (status distinto a "OK") mostrará el mensaje de error, por ejemplo: "Password incorrecto" o "Error de base de datos"</documentation>
 
</part>
 
<part name="Id" type="xsd:string">
 
<documentation>En caso de éxito (status "OK") contendrá un ID único identificando el documento procesado. En caso de consultas posteriores enviando el mismo documento, el web service deberá retornar el mismo ID retornado originalmente</documentation>
 
</part>
</message>



Si fuera posible obtener ayuda por parte de ustedes estaría muy agradecido :)









fastandfurious

unread,
Oct 5, 2015, 10:40:40 AM10/5/15
to KumbiaPHP Framework
Hola.

No se si sea la razon pero puede ser que la url "http://localhost/servicio/informar-pago.php?wsdl" Kumbia la vea como un mal request segun el estandar de KumbiaPHP haciendo que el Framework devuelva un error HTTP y no el WSDL del servicio.

Prueba entrando directamente a http://localhost/servicio/informar-pago.php?wsdl y si te muestra el wsdl pues deberia tambien funcionar dentro del controlador si te muestra un error de KumbiaPHP debes editar el archivo .htacces para que la ruta *.wsdl no sea manejada por el contralador frontal de KunbiaPHP o puedes colocar el WSDL en la carpeta publica del proyecto (donde estan los "assets") si la seguridad de tu proyecto te lo permite.

Saludos cordiales.
Reply all
Reply to author
Forward
0 new messages