bacen / pix-api

API Pix: a API do Arranjo de Pagamentos Instantâneos Brasileiro, Pix, criado pelo Banco Central do Brasil.
https://bacen.github.io/pix-api
2.23k stars 257 forks source link

Acesso as funcionalidades da API #578

Closed BHM871 closed 7 months ago

BHM871 commented 7 months ago

Olá, estou desenvolvendo um projeto que disponibiliza presentes de casamento para serem comprados e o dinheiro é mandado para os noivos, é apenas um projeto pessoal para estudo, mas, tenho intenção de utilizar a API para facilitar os pagamentos.

Entretanto, eu sou inexperiente, tenho pouco mais de 1 ano e meio de experiência, portanto, ainda não entendo bem questões de segurança.

Desta forma, como faço para conseguir o acess token com meu _clientid e _clientsecret?

Ainda não implementei os requisitos se segurança exigidos para utilização, mas supondo que eu já tenha feito a implementação do protocolo TLS, o que devo fazer?

rubenskuhl commented 7 months ago

Olá, estou desenvolvendo um projeto que disponibiliza presentes de casamento para serem comprados e o dinheiro é mandado para os noivos, é apenas um projeto pessoal para estudo, mas, tenho intenção de utilizar a API para facilitar os pagamentos.

Entretanto, eu sou inexperiente, tenho pouco mais de 1 ano e meio de experiência, portanto, ainda não entendo bem questões de segurança.

Desta forma, como faço para conseguir o acess token com meu _clientid e _clientsecret?

Ainda não implementei os requisitos se segurança exigidos para utilização, mas supondo que eu já tenha feito a implementação do protocolo TLS, o que devo fazer?

Você faz uma requisição POST em /oauth/token, Basic Auth com username sendo o client_id e password o client_secret, com o certificado emitido pelo PSP que você escolheu. Algo parecido com:

curl_setopt_array($curl, array( CURLOPT_URL => "$rota_base"."/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 ".base64_encode($config["client_id"] . ":" . $config["client_secret"]);, "Content-Type: application/json"

A resposta é um JSON assim: { "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c", "token_type": "Bearer", "expires_in": 3600, "scope": "cob.read cob.write pix.read pix.write" }

Nas próximas requisições você tem que passar o token (como Bearer) e o certificado.

BHM871 commented 7 months ago

Olá, estou desenvolvendo um projeto que disponibiliza presentes de casamento para serem comprados e o dinheiro é mandado para os noivos, é apenas um projeto pessoal para estudo, mas, tenho intenção de utilizar a API para facilitar os pagamentos.

Entretanto, eu sou inexperiente, tenho pouco mais de 1 ano e meio de experiência, portanto, ainda não entendo bem questões de segurança.

Desta forma, como faço para conseguir o acess token com meu _clientid e _clientsecret?

Ainda não implementei os requisitos se segurança exigidos para utilização, mas supondo que eu já tenha feito a implementação do protocolo TLS, o que devo fazer?

Você faz uma requisição POST em /oauth/token, Basic Auth com username sendo o client_id e password o client_secret, com o certificado emitido pelo PSP que você escolheu. Algo parecido com:

curl_setopt_array($curl, array( CURLOPT_URL => "$rota_base"."/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 ".base64_encode($config["client_id"] . ":" . $config["client_secret"]);, "Content-Type: application/json"

A resposta é um JSON assim: { "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c", "token_type": "Bearer", "expires_in": 3600, "scope": "cob.read cob.write pix.read pix.write" }

Nas próximas requisições você tem que passar o token (como Bearer) e o certificado.

Como posso conseguir esse certificado?

rubenskuhl commented 7 months ago

Como posso conseguir esse certificado?

Com o seu PSP, o mesmo que te fornece client_id e client_secret. Para uso da API Pix você precisa dos 3 elementos.

BHM871 commented 7 months ago

Entendi, muito obrigado