Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Consumir WebService con SOAP de Redsys/Sermepa

Estas en el tema de Consumir WebService con SOAP de Redsys/Sermepa en el foro de PHP en Foros del Web. Buenos días. Llevo semana pegándome de bruces con un Webservices mediante SOAP que no hay forma de echarlo a andar... he probado a crear y ...
  #1 (permalink)  
Antiguo 22/05/2013, 05:31
Avatar de Tollelle  
Fecha de Ingreso: enero-2005
Mensajes: 64
Antigüedad: 19 años, 3 meses
Puntos: 0
Información Consumir WebService con SOAP de Redsys/Sermepa

Buenos días.

Llevo semana pegándome de bruces con un Webservices mediante SOAP que no hay forma de echarlo a andar... he probado a crear y consumir webservice más sencillos y no hay problema... el caso es que este en particular siempre me termina devolviendo:

object(stdClass)#2 (1) { ["trataPeticionPagoReturn"]=> string(209) "SOAP-TPVPC0000Se ha producido un error al validar el mensajejava.lang.NullPointerException" }


SOAP-TPVPC0000 es el primer error de la documentación de Redsys pero no aclaran a qué se debe ni como solucionarlo...

Yo creo que el problema lo tengo en los atributos de las etiquetas que no construyo bien el mensaje como ellos piden... pero no sé cómo verificar que envío lo que quieren... el soporte dice que no me puede ayudar porque no son expertos en PHP.

Sólo me dicen como es el tipo de mensaje que espera recibir el servidor:

Código XML:
Ver original
  1. <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://webservices.tpvpc.sermepa.es">
  2.   <soapenv:Header/>
  3.   <soapenv:Body>
  4.      <trataPeticionPago xmlns="http://webservices.tpvpc.sermepa.es">
  5.         <entradaXML>
  6.     <![CDATA[
  7.           <Operaciones version="6.0">
  8.              <operacion>
  9.                 <datosPago>
  10.                    <datosPagoTarjeta>
  11.                       <tarjeta>4545840300508033</tarjeta>
  12.                       <caducidad>0707</caducidad>
  13.                       <cvc2>567</cvc2>
  14.                    </datosPagoTarjeta>
  15.                 </datosPago>
  16.                 <datosCompra>
  17.                    <moneda>978</moneda>
  18.                    <importe>0.01</importe>
  19.                    <comercio>123443210</comercio
  20.                    <terminal>1</terminal>
  21.                    <tipoPago>PAGO</tipoPago>
  22.                 </datosCompra>
  23.                 <timestamp>20050629 141506</timestamp>
  24.                 <firma>302eec952437b1110557a4e9d95da80047c8f3ab</firma>
  25.              </operacion>
  26.           </Operaciones>
  27.           ]]>
  28.         </entradaXML>
  29.      </trataPeticionPago>
  30.   </soapenv:Body>
  31. </soapenv:Envelope>

El XML-SCHEMA:
http://sis-d.redsys.es/TPV_PC/wsdl/PAGOSoap_v6d0.xsd

El PHP con SOAP (también he probado con Nusoap y nada...)
Código PHP:
Ver original
  1. $url_pruebas='http://sis-d.redsys.es/TPV_PC/wsdl/SerClsEntradaTPVPCv6d0.wsdl';  /// URL DE PRUEBAS
  2.  
  3. //// DATOS REDSYS
  4. $comercio = 123456789;  //// COMERCIO DE PRUEBA
  5. $terminal=1;            //// TERMINAL DE PRUEBA
  6. $clave='AAAAAA';        //// CLAVE DE PRUEBA
  7.  
  8. //// OPERACION PRUEBA
  9. $tarjeta=1111222233334444;
  10. $caducidad=1602;            /// AAMM
  11. $cvc2=333;
  12. $importe=20;
  13. $moneda=978;
  14. $timestamp=date("Ymd His");
  15. $tipoPago='PAGO';
  16. $cadena = "$tipoPago$tarjeta$caducidad$importe$moneda$comercio$terminal$timestamp$clave";
  17. $firma = sha1($cadena);
  18.  
  19. //// CONSTRUYO EL XML
  20. $param =        array("Operaciones"=>
  21.                                 array("operacion"=>
  22.                                         array("datosPago"=>
  23.                                                 array("datosPagoTarjeta"=>     
  24.                                                         array("tarjeta"=>"$tarjeta","caducidad"=>"$caducidad","cvc2"=>"$cvc2")),
  25.                                         "datosCompra"=>        
  26.                                                 array("moneda"=>"$moneda","importe"=>"$importe","comercio"=>"$comercio","terminal"=>"$terminal","tipoPago"=>"$tipoPago"),
  27.                                 "timestamp"=>"$timestamp","firma"=>"$firma")),
  28.                                 "Operaciones_attr"=>
  29.                                 array("version" => "6.0"));
  30.  
  31. //// CREO CLIENTE SOAP
  32. $client = new SoapClient("$url_pruebas");
  33. $response = $client->__soapCall("trataPeticionPago", $param);
  34.  
  35. //// RESPUESTA
  36. var_dump($response);

También he probado a construir los parámetros del XML a envíar directamente y nada:

Código PHP:
Ver original
  1. $param='<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://webservices.tpvpc.sermepa.es">
  2.  <soapenv:Header/>
  3.  <soapenv:Body>
  4.     <trataPeticionPago xmlns="http://webservices.tpvpc.sermepa.es">
  5.        <entradaXML>
  6.     <![CDATA[
  7.           <Operaciones version="6.0">
  8.              <operacion>
  9.                 <datosPago>
  10.                    <datosPagoTarjeta>
  11.                       <tarjeta>4545840300508033</tarjeta>
  12.                       <caducidad>0707</caducidad>
  13.                       <cvc2>567</cvc2>
  14.                    </datosPagoTarjeta>
  15.                 </datosPago>
  16.                 <datosCompra>
  17.                    <moneda>978</moneda>
  18.                    <importe>0.01</importe>
  19.                    <comercio>123443210</comercio>
  20.                    <terminal>1</terminal>
  21.                    <tipoPago>PAGO</tipoPago>
  22.                 </datosCompra>
  23.                 <timestamp>20050629 141506</timestamp>
  24.                 <firma>302eec952437b1110557a4e9d95da80047c8f3ab</firma>
  25.              </operacion>
  26.           </Operaciones>
  27.           ]]>
  28.        </entradaXML>
  29.     </trataPeticionPago>
  30.  </soapenv:Body>
  31. </soapenv:Envelope>';

O así... y nada tampoco:

Código PHP:
Ver original
  1. $param =  '<Operaciones version="6.0">
  2. <operacion>
  3. <datosPago>
  4. <datosPagoTarjeta>
  5. <tarjeta>'.$tarjeta.'</tarjeta><caducidad>'.$caducidad.'</caducidad><cvc2>'.$cvc2.'</cvc2>
  6. </datosPagoTarjeta>
  7. </datosPago>
  8. <datosCompra><moneda>'.$moneda.'</moneda><importe>'.$importe.'</importe><comercio>'.$comercio.'</comercio><terminal>'.$terminal.'</terminal><tipoPago>'.$tipoPago.'</tipoPago>
  9. </datosCompra>
  10. <timestamp>'.$timestamp.'</timestamp>
  11. <firma>'.$firma.'</firma>
  12. </operacion>
  13. </Operaciones>';

Y nada... no paso del error básico... según dicen en soporte técnico no falta ningún parámentro pero supongo que algo me falta configurar o parsear o construir en el XML que no averiguo...

Les agradezco cualquier posible aportación

Gracias y un saludo.

Última edición por Tollelle; 22/05/2013 a las 05:36 Razón: Añadir más opciones que he probado
  #2 (permalink)  
Antiguo 23/05/2013, 14:31
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Consumir WebService con SOAP de Redsys/Sermepa

SOAP-TPVPC0000 es el primer error de la documentación de Redsys pero no aclaran a qué se debe ni como solucionarlo... y qué dice la documentación?
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 28/05/2013, 07:04
Avatar de Tollelle  
Fecha de Ingreso: enero-2005
Mensajes: 64
Antigüedad: 19 años, 3 meses
Puntos: 0
Respuesta: Consumir WebService con SOAP de Redsys/Sermepa

Lo que dice la documentación:

Cita:
13. Anexo V. Códigos de Error TPV PC
A continuación se detallan los códigos de error más comunes que puede devolver el TPV PC:

SOAP-TPVPC0000 - Se ha producido un error al validar el mensaje.
Esto y nada es lo mismo... y por internet no hay nadie que haya trabajado con esto por mucho que busco... encontré un iraní un día pero no he podido volver a localizarlo...

Yo creo que el problema lo tengo en como construyo el mensaje XML que envío...

Pero ya he probado de todo y no hay forma...
  #4 (permalink)  
Antiguo 05/06/2013, 12:49
Avatar de Tollelle  
Fecha de Ingreso: enero-2005
Mensajes: 64
Antigüedad: 19 años, 3 meses
Puntos: 0
Respuesta: Consumir WebService con SOAP de Redsys/Sermepa

Tanto rollo y era el CDATA :)

Última edición por Tollelle; 06/06/2013 a las 03:23
  #5 (permalink)  
Antiguo 28/03/2014, 13:13
 
Fecha de Ingreso: mayo-2003
Ubicación: Cantabria
Mensajes: 20
Antigüedad: 20 años, 11 meses
Puntos: 0
Respuesta: Consumir WebService con SOAP de Redsys/Sermepa

Hola.

Me he topado con tú post intentando conseguir documentación para configurar el webservice de Redsys.

En mi caso no soy capaz ni de acceder a la URL del webservice, desde el navegador entro perfectamente (en local) pero ni en local ni en remoto puedo acceder a la URL, incluso he pasado el wget la opción de --no-check-certificate y nada. El puerto está abierto etc etc.

En PHP me da este error:
Código:
Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://sis-t.redsys.es:25443/sis/services/SerClsWSEntrada?WSDL' : failed to load external entity "https://sis-t.redsys.es:25443/sis/services/SerClsWSEntrada?WSDL"
Es como si no pudiera acceder a la URL por algún motivo extraño.

Respecto a tú código, comentaste que solucionaste el código anterior por un tema del CDATA si pudieras ponerlo como ejemplo me serviría como punto de partida para cuando logre solventar el problema del acceso.

Un saludo, Amador.
  #6 (permalink)  
Antiguo 30/04/2014, 17:10
Avatar de Tollelle  
Fecha de Ingreso: enero-2005
Mensajes: 64
Antigüedad: 19 años, 3 meses
Puntos: 0
Respuesta: Consumir WebService con SOAP de Redsys/Sermepa

Hola acubino.

No había visto tu mensaje :/

Esto es lo que envío ;)

Código PHP:
Ver original
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://webservices.tpvpc.sermepa.es">
  3.   <soapenv:Header/>
  4.   <soapenv:Body>
  5.      <trataPeticionPago>
  6. <entradaXML>
  7. <![CDATA[
  8. <Operaciones version="6.0">
  9.     <operacion>
  10.         <datosPago>
  11.             <datosPagoTarjeta>
  12.                 <tarjeta>'.$tarjeta.'</tarjeta>
  13.                 <caducidad>'.$caducidad.'</caducidad>
  14.                 <cvc2>'.$cvc2.'</cvc2>
  15.             </datosPagoTarjeta>
  16.         </datosPago>
  17.         <datosCompra>
  18.             <moneda>'.$moneda.'</moneda>
  19.             <importe>'.$importe.'</importe>
  20.             <comercio>'.$comercio.'</comercio>
  21.             <terminal>'.$terminal.'</terminal>
  22.             <tipoPago>'.$tipoPago.'</tipoPago>
  23.         </datosCompra>
  24.         <timestamp>'.$timestamp.'</timestamp>
  25.         <firma>'.$firma.'</firma>
  26.     </operacion>
  27. </Operaciones>
  28. ]]>
  29. </entradaXML>
  30. </trataPeticionPago>
  31.   </soapenv:Body>
  32. </soapenv:Envelope>

Espero que te sirva ;)
  #7 (permalink)  
Antiguo 28/10/2015, 11:33
Usuario no validado
 
Fecha de Ingreso: octubre-2015
Mensajes: 10
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Consumir WebService con SOAP de Redsys/Sermepa

Cita:
Iniciado por Tollelle Ver Mensaje
Hola acubino.

No había visto tu mensaje :/

Esto es lo que envío ;)

Código PHP:
Ver original
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://webservices.tpvpc.sermepa.es">
  3.   <soapenv:Header/>
  4.   <soapenv:Body>
  5.      <trataPeticionPago>
  6. <entradaXML>
  7. <![CDATA[
  8. <Operaciones version="6.0">
  9.     <operacion>
  10.         <datosPago>
  11.             <datosPagoTarjeta>
  12.                 <tarjeta>'.$tarjeta.'</tarjeta>
  13.                 <caducidad>'.$caducidad.'</caducidad>
  14.                 <cvc2>'.$cvc2.'</cvc2>
  15.             </datosPagoTarjeta>
  16.         </datosPago>
  17.         <datosCompra>
  18.             <moneda>'.$moneda.'</moneda>
  19.             <importe>'.$importe.'</importe>
  20.             <comercio>'.$comercio.'</comercio>
  21.             <terminal>'.$terminal.'</terminal>
  22.             <tipoPago>'.$tipoPago.'</tipoPago>
  23.         </datosCompra>
  24.         <timestamp>'.$timestamp.'</timestamp>
  25.         <firma>'.$firma.'</firma>
  26.     </operacion>
  27. </Operaciones>
  28. ]]>
  29. </entradaXML>
  30. </trataPeticionPago>
  31.   </soapenv:Body>
  32. </soapenv:Envelope>

Espero que te sirva ;)
Buenas, se que este mensaje es antiguo, lo que sucede es que actualmente tengo el mismo problema desde hace mas de 2 meses. Soy nuevo en PHP y por mas que pongo el código bueno no logro que funcione. Me puede(n) facilitar el código en PHP.

gracias mil

Etiquetas: consumir, soap, webservice
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:54.