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);
}
}
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);
}
}
Muchas gracias de antemano, y aguardo respuestas.
Saludos!