¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Obtendo um Token de SAPI CPI: Solução para o Erro 401 - Credenciais Incorretas

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 8 Vistas
0
Cargando...

Estou tentando obter um token do SAPI CPI, mas estou recebendo um erro 401 - Credenciais incorretas. Aqui está o meu código: -

$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
);              

$url='https://***.authentication.us10.hana.ondemand.com/oauth/token';

//abrir conexão
$ch = curl_init();

$content_type = array('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, json_encode($post_data));
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, $content_type); 

//executar post
$result = curl_exec($ch);

Consegui fazer isso funcionar usando o POSTMAN com o mesmo Cliente Id e segredo. Qualquer ajuda é muito apreciada.

Obrigado

Martín

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

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);
        
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Olá Martin,

Apenas mudar essa linha não ajudaria. Por favor, dê outra olhada no código e veja o que alterei acima para formatar os dados.

Cumprimentos,
Jwan

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Também notei que ter meu client_id e client_secret envolvidos em aspas duplas em vez de simples não era bom.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Utilizei o Postman para chamar a API Get Token, o que funcionou. Pude ver o que o Postman estava fazendo em PHP CURL e usei isso.

Agora está funcionando.

A única diferença foi com o valor de POSTFIELDS. Deve estar no formato: -

CURLOPT_POSTFIELDS => 'grant_type=client_credentials&client_id=**&client_secret=**'

Obrigado

Martin

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?