Hola Martin,
vamos a revisar el código e identificar posibles problemas:
1. Tipo de contenido:
En el código, estás estableciendo el encabezado 'Content-Type' a 'application/x-www-form-urlencoded', pero estás enviando los datos en formato json usando 'json_encode($post_data)'.
Para el tipo de concesión de credenciales del cliente, los datos deben enviarse en forma de parámetros codificados en URL, no en JSON.
2. Eliminación de la verificación SSL:
Has deshabilitado la verificación SSL con 'CURLOPT_SSL_VERIFYHOST' y 'CURLOPT_SSL_VERIFYPEER' configurados en '0'. Si bien esto puede funcionar para pruebas, no se recomienda para producción, ya que representa riesgos de seguridad. Asegúrate de tener certificados SSL válidos y usar una verificación SSL adecuada en producción.
tu código reescrito:
$client_id = "***";
$client_secret = "***";
// Definir la solicitud POST para recuperar el token
$post_data = array(
"grant_type" => "client_credentials",
"client_id" => $client_id,
"client_secret" => $client_secret
);
// Convertir los datos a formato codificado en URL
$post_data = http_build_query($post_data);
$url = 'https://***.authentication.us10.hana.ondemand.com/oauth/token';
// Abrir conexión
$ch = curl_init();
$content_type = 'Content-Type: application/x-www-form-urlencoded';
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
// Habilitar verificación SSL en producción
// curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array($content_type));
// Ejecutar post
$result = curl_exec($ch);
// Verificar errores de curl
if (curl_errno($ch)) {
echo 'Error de Curl: ' . curl_error($ch);
}
// Cerrar conexión
curl_close($ch);
// Procesar el resultado
if ($result !== false) {
// Éxito en la recuperación del token, procesar el token (generalmente en formato JSON)
$token_data = json_decode($result, true)