Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/01/2015, 04:30
Avatar de NnikoO
NnikoO
 
Fecha de Ingreso: agosto-2008
Ubicación: Rosario
Mensajes: 245
Antigüedad: 15 años, 8 meses
Puntos: 0
Exclamación Problema WebService NuSOAP + Certificado.

Hola buenos días, inicio este tema por la razón que describe el título.
En mi lugar de trabajo estamos implementando un web service para el pago online de diversas cuestiones.

El punto es el siguiente: si realizo la acción sin implementar el certificado, el WS se conecta perfectamente con el server externo, pero no me deja realizar nada (correctamente) por tratarme de un ente inhabilitado o inválido.
Si la conexión la realizo adjuntando el certificado, me da como error lo siguiente "Error: wsdl error: Getting https://XXX.XX.XX.XXX/gpservices/GPService?wsdl - HTTP ERROR: cURL ERROR: 77: error setting certificate verify locations: CAfile: CA.cer CApath: /etc/ssl/certs" (el certificado se encuentra instalado correctamente en nuestro servidor en el directorio que ahí se apunta).

Dejo el código .php de ambas opciones.

Sin implementar certificado:
Código PHP:
require_once('lib/nusoap.php');

$client = new nusoap_client('https://200.45.17.242/gpservices/GPService?wsdl','wsdl');

$err $client -> getError();

if(
$err){    
    echo 
'Error en Constructor: ' $err 
}

$ip_cliente saberIp();

$armo_hash $ip_cliente $fecha 'SECRET_KEY';
$armo_hash sha1($armo_hash);

$request = array('SolicitudDePago' => array(
                                            
'Producto' => array(
                                                                
'IdProducto' => 'XX',
                                                                
'Version' => '0000.0000',
                                            ),
                                            
'Ente' => array(
                                                                
'IdEnte' => 'XXX',
                                                                
'Version' => '0000.0000',
                                            ),
                                            
'TokenAutEnte' => array(
                                                                
'TokenValue' => "'" $armo_hash "'",
                                                                
'Timestamp' => "'" $fecha "'",
                                                                
'ClienteIP' => "'" $ip_cliente "'",
                                            ),
                                            
'Detalles' => array(
                                                                
'FacturaLinkPagos' => array(
                                                                                        
'Cpe' => '00000000000',
                                                                                        
'Concepto' => '000',
                                                                                        
'Referencia' => '000000000000000000',
                                                                                        
'Importe' => '000000000000',
                                                                )
                                            )
                                        )
            );
                                    
$response $client->call('solicitarPago'$request);                                    

if(
$client->fault){
    echo 
'Fallo: ';
    
print_r($response);
}
else{    
    
//BUSCO ERRORES
    
$err $client->getError();
    if(
$err){        
        
//MUESTRO ERROR
        
echo 'Error: ' $err ;
    } 
    else{        
        
//MUESTRO RESULTADO
        
echo '';
        
print_r ($response);
    }

Implementando certificado:
Código PHP:
require_once('lib/nusoap.php');

$certificado "CA_Red_Link.cer";
$certRequest = array('cainfofile' => $certificado); 

$client = new nusoap_client('https://200.45.17.242/gpservices/GPService?wsdl','wsdl');

$err $client -> getError();

if(
$err){    
    echo 
'Error en Constructor: ' $err 
}

$autentico $client -> setCredentials('','','certificate',$certRequest); 

$ip_cliente saberIp();

$armo_hash $ip_cliente $fecha 'SECRET_KEY';
$armo_hash sha1($armo_hash);

$request = array('SolicitudDePago' => array(
                                            
'Producto' => array(
                                                                
'IdProducto' => 'XX',
                                                                
'Version' => '0000.0000',
                                            ),
                                            
'Ente' => array(
                                                                
'IdEnte' => 'XXX',
                                                                
'Version' => '0000.0000',
                                            ),
                                            
'TokenAutEnte' => array(
                                                                
'TokenValue' => "'" $armo_hash "'",
                                                                
'Timestamp' => "'" $fecha "'",
                                                                
'ClienteIP' => "'" $ip_cliente "'",
                                            ),
                                            
'Detalles' => array(
                                                                
'FacturaLinkPagos' => array(
                                                                                        
'Cpe' => '00000000000',
                                                                                        
'Concepto' => '000',
                                                                                        
'Referencia' => '000000000000000000',
                                                                                        
'Importe' => '000000000000',
                                                                )
                                            )
                                        )
            );
                                    
$response $client->call('solicitarPago'$request);                                    

if(
$client->fault){
    echo 
'Fallo: ';
    
print_r($response);
}
else{    
    
//BUSCO ERRORES
    
$err $client->getError();
    if(
$err){        
        
//MUESTRO ERROR
        
echo 'Error: ' $err ;
    } 
    else{        
        
//MUESTRO RESULTADO
        
echo '';
        
print_r ($response);
    }

Espero puedan darme una pista, ya que hace días estamos parados en el mismo lugar. Googleando mucho no encontré la verdad, posiblemente buscando mal, y desde el ente "prestador" del WS se obtuvieron muchas menos opciones que las encontradas en el buscador.

Muchas gracias de antemano, y aguardo respuestas.
Saludos!