Author Image

rodrigo_90439

Aug 21, 2024

Utilização de CURL para Integração sem SDK

CurlintegraçãoSDKcertificadoprogramaçãoclient_idclient_secret

Bom dia pessoal, dei inicio na integração hoje em PHP com API Pix e API de pagamentos de contas.
Segui todos os passos, criei aplicação, gerei e converti o certificado e não retorna o access_token.
Retorna vazio e no Postman dá um erro.
Alguém poderia me ajudar nesse início?

Respostas (17):
Avatar discord do usuario guilherme_efi

guilherme_efi

21/08/2024

Olá, @rodrigo_90439! Bom dia! Tudo bem?
Recomendamos usar nossa SDK em PHP. Ela já possui os métodos preparados para seu sistema consumir.
No caso da API de pagamento de contas, você pode usar os exemplos disponibilizados: https://github.com/efipay/sdk-php-apis-efi/tree/main/examples/payments/billets

Avatar discord do usuario rodrigo_90439

rodrigo_90439

21/08/2024

Tudo bem Guilherme.
Eu gostaria de utilizar o CURL mesmo, não quero utilizar o SDK em minha aplicação, tem como me ajudar?
$config = [
"certificado" => "certificado.pem",
"client_id" => "Client_Id???",
"client_secret" => "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",
CURLOPT_URL => "https://pagarcontas.api.efipay.com.br/v1/oauth/token",
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 guilherme_efi

guilherme_efi

21/08/2024

Entendido. Sem problemas.
O erro provavelmente está no certificado. O CURL não reconhece o caminho do certificado sendo uma URL como havia colocado. Você deve colocar o caminho para o certificado no local do servidor.
Exemplo:

php
$config = [
"certificado" => "../certificado.pem",
"clientid" => "Client_Id???",
"client_secret" => "Client_Secret???"
];

Avatar discord do usuario rodrigo_90439

rodrigo_90439

21/08/2024

Entendi...

Avatar discord do usuario rodrigo_90439

rodrigo_90439

21/08/2024

Guilherme, nesse caso eu utilizo o .pem mesmo?

Avatar discord do usuario guilherme_efi

guilherme_efi

21/08/2024

Sim. utilizando o cURL deve usar o certificado convertido em .pem

Avatar discord do usuario rodrigo_90439

rodrigo_90439

21/08/2024

Vou tentar aqui, o estranho que deu erro no Postman também.

Avatar discord do usuario guilherme_efi

guilherme_efi

21/08/2024

No Postman se usa o certifica em .p12 mesmo.

Avatar discord do usuario rodrigo_90439

rodrigo_90439

21/08/2024

Ah, entendi...
Vou testar e te aviso, obrigado.

Avatar discord do usuario rodrigo_90439

rodrigo_90439

21/08/2024

Guilherme, o que é client_credentials?

Avatar discord do usuario guilherme_efi

guilherme_efi

21/08/2024

Onde está essa informação?

Avatar discord do usuario rodrigo_90439

rodrigo_90439

21/08/2024

{
"nome": "erro_autorizacao",
"mensagem": "O grant_type deve ser informado"
}

Avatar discord do usuario rodrigo_90439

rodrigo_90439

21/08/2024

{
"grant_type": "client_credentials"
}

Avatar discord do usuario rodrigo_90439

rodrigo_90439

21/08/2024

eu enviaria as credenciais novamente?
CURLOPT_POSTFIELDS =>'{
"grant_type": "client_credentials",
"client_id": "' . CLIENT_ID . '",
"client_secret": "' . CLIENT_SECRET . '"
}',

Avatar discord do usuario guilherme_efi

guilherme_efi

21/08/2024

É o body da requisição que deve ser enviada para indicar o padrão de autenticação.

Avatar discord do usuario guilherme_efi

guilherme_efi

21/08/2024

Esse mensagem você obteve na requisição com cURL ou no Postman?

Avatar discord do usuario rodrigo_90439

rodrigo_90439

21/08/2024

Postman, deu certo agora.
Vou testar no CURL.