Olá Martin,
vamos revisar o código e identificar possíveis problemas:
1. Tipo de conteúdo:
No código, você está definindo o cabeçalho 'Content-Type' como 'application/x-www-form-urlencoded', mas está enviando os dados em formato JSON usando 'json_encode($post_data)'.
Para a concessão de credenciais do cliente, os dados devem ser enviados como parâmetros codificados em URL, não em JSON.
2. Desativação da verificação SSL:
Você desabilitou a verificação SSL com 'CURLOPT_SSL_VERIFYHOST' e 'CURLOPT_SSL_VERIFYPEER' configurados como '0'. Embora isso possa funcionar para testes, não é recomendado para produção, pois representa riscos de segurança. Certifique-se de ter certificados SSL válidos e usar uma verificação SSL apropriada em produção.
seu código reescrito:
$client_id = "***";
$client_secret = "***";
// Definir a solicitação POST para recuperar o token
$post_data = array(
"grant_type" => "client_credentials",
"client_id" => $client_id,
"client_secret" => $client_secret
);
// Converter os dados para formato codificado em URL
$post_data = http_build_query($post_data);
$url = 'https://***.authentication.us10.hana.ondemand.com/oauth/token';
// Abrir conexão
$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 verificação SSL em produção
// curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array($content_type));
// Executar post
$result = curl_exec($ch);
// Verificar erros de curl
if (curl_errno($ch)) {
echo 'Erro de Curl: ' . curl_error($ch);
}
// Fechar conexão
curl_close($ch);
// Processar o resultado
if ($result !== false) {
// Sucesso na recuperação do token, processar o token (geralmente em formato JSON)
$token_data = json_decode($result, true);