SoloCodigo

Programación Web y Scripting => PHP => Mensaje iniciado por: JuanImp en Martes 22 de Febrero de 2011, 23:36

Título: Leer XML con nuSoap
Publicado por: JuanImp en Martes 22 de Febrero de 2011, 23:36
Hola, llevo todo el día buscando por internet y rompiéndome la cabeza y no he encontrado la solución a este problema:
necesito crear un servidor SOAP para la recepción de la notificación de pagos de un TPV virtual, la página del TPV envía un string con formato XML y en mi servidor nusoap tengo que comprobar el código de error, el problema es que no consigo leer este string desde el servidor.
Este es el código del servidor:
Código: PHP
  1. <?php
  2. require_once('libs/nusoap.php');
  3. $server = new nusoap_server;
  4. $server->configureWSDL('InotificacionSIS', 'url_del_namespace');
  5. $server->wsdl->schemaTargetNamespace = 'url_del_namespace';
  6. $server->register('procesaNotificacionSIS',
  7.             array('value' => 'xsd:string'),
  8.             array('return' => 'xsd:string'),
  9.             'urn:InotificacionSIS',
  10.             'urn:InotificacionSIS#procesaNotificacionSIS');
  11.  
  12. function procesaNotificacionSIS($value){
  13.    
  14.     if($value['Ds_Response'] == '0000'){
  15.         return "No ha habido ningun error";
  16.     }
  17.     else{
  18.          return "Ha ocurrido un error";
  19.     }
  20. }
  21.  
  22. $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
  23.  
  24. $server->service($HTTP_RAW_POST_DATA);
  25. ?>
  26.  

y este es el código del cliente:
Código: PHP
  1. <?php
  2. require_once('libs/nusoap.php');
  3.  
  4. $url = "./soap/server.php?wsdl";
  5. $client = new nusoap_client($url);
  6.  
  7. $err = $client->getError();
  8.  
  9. if ($err) {
  10.     echo '<p><b>Error: ' . $err . '</b></p>';
  11. }
  12.  
  13. $return = $client->call('procesaNotificacionSIS', "<Message><Request Ds_Version='0.0'>
  14.        <Fecha>01/04/2011</Fecha>
  15.        <Hora>16:57</Hora>
  16.        <Ds_SecurePayment>1</Ds_SecurePayment>
  17.        <Ds_Amount>345</Ds_Amount>
  18.        <Ds_Currency>978</Ds_Currency>
  19.        <Ds_Order>165446</Ds_Order>
  20.        <Ds_MerchantCode>123456</Ds_MerchantCode>
  21.        <Ds_Terminal>001</Ds_Terminal>
  22.        <Ds_Card_Country>724</Ds_Card_Country>
  23.        <Ds_Response>0000</Ds_Response>
  24.        <Ds_MerchantData>Alfombrilla para raton</Ds_MerchantData>
  25.        <Ds_Card_Type>C</Ds_Card_Type>
  26.        <Ds_TransactionType>1</Ds_TransactionType>
  27.        <Ds_ConsumerLanguage>1</Ds_ConsumerLanguage>
  28.    </Request>
  29. </Message>");
  30.  
  31. echo $return;
  32. ?>
  33.  


Agradezco vuestras respuestas.
Saludos.
Título: Re: Leer XML con nuSoap
Publicado por: F_Tanori en Miércoles 23 de Febrero de 2011, 12:17
Pero que error te devuelve?

retorna el string que envias como parametro para asegurar que si estas recibiendo el parametro.

Código: PHP
  1.  function procesaNotificacionSIS($value){
  2.     return $value;
  3.  }
  4.  

si es asi, puedes leer la cadena como  XML, usando simplexml,

http://www.php.net/manual/es/function.s ... string.php (http://www.php.net/manual/es/function.simplexml-load-string.php" onclick="window.open(this.href);return false;)

o si requiere un manejo mas complejo de XML

http://www.php.net/manual/es/refs.xml.php (http://www.php.net/manual/es/refs.xml.php" onclick="window.open(this.href);return false;)


Saludos
Título: Re: Leer XML con nuSoap
Publicado por: JuanImp en Jueves 24 de Febrero de 2011, 17:19
Hola,
lo primero gracias por la respuesta, efectivamente al final conseguí leer la cadena con SimpleXMLElement y ahora se que la conexión al servicio es correcta lo que me da problemas ahora es el envió de otro XML de vuelta al TPV y no se si tiene que ver con la forma de enviar el string:
Código: PHP
  1. $server->register('procesaNotificacionSIS',
  2.             array('value' => 'xsd:string'),
  3.             array('return' => 'xsd:string'),
  4.             'urn:InotificacionSIS',
  5.             'urn:InotificacionSIS#procesaNotificacionSIS');
  6.  
o será un problema de recepción de los datos, me he puesto en contacto con el soporte del TPV y cuando tenga una respuesta la publicaré aquí por si alguien tiene el mismo problema.
Saludos.
Título: Re: Leer XML con nuSoap
Publicado por: arkascr en Sábado 26 de Febrero de 2011, 15:23
Hola que tal, me gustaria que pudieras postear tu codigo JuanImp, ya que tengo el mismo problema y necesito realizar la misma funcion, el recibir un String que contiene un XML y en donde tengo que devolver como respuesta otro XML.

Saludos y gracias
Título: Re: Leer XML con nuSoap
Publicado por: JuanImp en Viernes 4 de Marzo de 2011, 10:45
Hola, pues de momento no he conseguido solucionarlo, el código es el mismo solo que el return es la cadena que el servidor del TPV me pide.
arkascr estas trabajando con un TPV de sermepa?