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!