Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/05/2013, 05:31
Avatar de Tollelle
Tollelle
 
Fecha de Ingreso: enero-2005
Mensajes: 64
Antigüedad: 19 años, 4 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