Correção de Erro de Autenticação com API usando cURL

EXIBINDO RESPOSTAS:

Avatar discord do usuario luizfeleal

luizfeleal

Olá, bom dia! Estou tendo um erro ao tentar enviar uma requisição para me autenticar com a API. O erro é o seguinte:
Exception: OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 0 in file.
Conseguem me ajudar?

Avatar discord do usuario joaolucas_efi

joaolucas_efi

Bom dia, @luizfeleal, tudo bem?
Como você esta fazendo a requisição?

Avatar discord do usuario luizfeleal

luizfeleal

$credenciaisBase64 = base64_encode($cliente_id . ":" . $client_secret);

$url = env('URL_EFI') . "/oauth/token";

// Inicializa a sessão cURL
$ch = curl_init();


curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); // Verifica o certificado do servidor
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // Verifica o host do certificado
curl_setopt($ch, CURLOPT_SSLCERT, $certificado); // Define o certificado a ser usado


// Adiciona os dados do cliente como autenticação básica
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/x-www-form-urlencoded',
"Authorization: Basic " . $credenciaisBase64

]);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([
'grant_type' => 'client_credentials',
]));

// Executa a requisição e obtém a resposta
$resposta = curl_exec($ch);

Avatar discord do usuario joaolucas_efi

joaolucas_efi

@luizfeleal existem algumas falha em como você montou a requisição, segue um exemplo de como fazer a autenticação:

php
//Desenvolvido pela Consultoria Técnica da Efí
$config = [
"certificado" => "./certificado.pem",
"client_id" => "YOUR-CLIENT-ID",
"client_secret" => "YOUR-CLIENT-SECRET"
];
$autorizacao = base64_encode($config["client_id"] . ":" . $config["client_secret"]);

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => "https://pix-h.api.efipay.com.br/oauth/token", // Rota base, homologação ou produção
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => '{"grant_type": "client_credentials"}',
CURLOPT_SSLCERT => $config["certificado"], // Caminho do certificado
CURLOPT_SSLCERTPASSWD => "",
CURLOPT_HTTPHEADER => array(
"Authorization: Basic $autorizacao",
"Content-Type: application/json"
),
));

$response = curl_exec($curl);

curl_close($curl);

echo "
";
echo $response;
echo "
";
?>

Avatar discord do usuario luizfeleal

luizfeleal

Agora o erro retornado é esse:
Exception: unable to set private key file: '/projeto_maquina_api/storage/app/Certificados/certificate12.pem' type PEM in file /projeto_maquina_api/app/Services/Efi/AuthService.php on line 59

Avatar discord do usuario joaolucas_efi

joaolucas_efi

@luizfeleal tente fazer com o arquivo .p12, por favor.

Avatar discord do usuario luizfeleal

luizfeleal

recebi esse erro com o arquivo .p12:
Exception: could not load PEM client certificate from /projeto_maquina_api/storage/app/Certificados/certificate12.p12, OpenSSL error error:0480006C:PEM routines::no start line, (no key found, wrong pass phrase, in file /projeto_maquina_api/app/Services/Efi/AuthService.php on line 62

Avatar discord do usuario joaolucas_efi

joaolucas_efi

@luizfeleal verifiquei aqui e o arquivo é .pem mesmo. Como você fez a conversão do arquivo para .pem?

Avatar discord do usuario luizfeleal

luizfeleal

Eu tenho um código em php que faz isso, e também já testei utilizando o conversor de vocês, mas o mesmo erro é retornado

Avatar discord do usuario joaolucas_efi

joaolucas_efi

@luizfeleal uma coisa que pode estar ocasionando a falha é o caso o caminho do certificado esteja incorreto, verifique se o arquivo esta de fato sendo encontrado.

Avatar discord do usuario luizfeleal

luizfeleal

eu faço essa verificação:
if (!file_exists($certificado) || !is_readable($certificado)) {
throw new \Exception("O arquivo de certificado não foi encontrado: " . $certificado);
}

Avatar discord do usuario luizfeleal

luizfeleal

e passa certinho

Avatar discord do usuario joaolucas_efi

joaolucas_efi

@luizfeleal vou abrir um atendimento para podermos verificar algumas informações junto à você.