Nesta página, você encontra informações sobre credenciais, certificado e autorização da API Open Finance Efí.
Através da API Open Finance, oferecemos serviços que possibilitam a comunicação com a iniciadora Efí (participante autorizado) e recebedor (e-commerce que pode ou não fazer parte dos participantes Open Finance). Com nossa API é possível iniciar o processo open finance de forma prática e facilitar o pagamento do cliente final.
Para integrar a API Open Finance ao seu sistema ou sua plataforma, é necessário ter uma Conta Digital Efí. Uma vez com acesso, você poderá obter as credenciais e o certificado necessários para a comunicação com a API Open Finance.
Veja a seguir como obter as credenciais, certificados e detalhes sobre a autorização e segurança da sua integração com a Efí.
Segurança no gerenciamento de credenciais Dentro dos sitemas integrados à nossa API, é importante que as operações de login e a alteração das chaves de integração sejam realizadas com segurança. Sugerimos a implementação de autenticação de dois fatores e outras práticas de segurança.
Obtendo as credenciais da aplicação Uma pessoa integradora pode criar várias aplicações conforme necessário. Para cada aplicação, serão gerados dois pares de chaves,Client_Id
e Client_Secret
, um para o ambiente de Produção (? ) e outro para Homologação (? ).
Para usar a API Open Finance da Efí, é preciso ativar os escopos necessários na sua aplicação.
Entendendo os escopos de aplicação Ao criar ou editar uma aplicação em sua Conta Efí, você precisará configurar os escopos que a aplicação terá acesso. Esses escopos definem as ações que uma aplicação poderá realizar através da API.
Confira, a seguir, os escopos disponíveis na API Open Finance, juntamente com suas descrições de permissões:
gn.opb.participants.read
- consulta de participantes do Open Finance;gn.opb.payment.pix.send
- iniciar Pix via Open Finance;gn.opb.payment.pix.read
- listar as informações dos pagamentos efetuados;gn.opb.payment.pix.refund
- realizar a devolução de um pagamento;gn.opb.payment.pix.cancel
- realizar o cancelamento de um pagamento agendado;gn.opb.config.write
- escrever na configuração de URLs da conta;gn.opb.config.read
- ler a configuração de URLs da conta;Criar uma aplicação ou configurar uma já existente Veja como criar uma nova aplicação ou usar uma aplicação já existente para fazer integração com a API Open Finance Efí.
Criar uma aplicação Aproveitar uma aplicação existente Para criar uma aplicação e usar a API Open Finance , siga os passos a seguir:
Acesse sua conta e clique no item "API" na parte inferior do menu à esquerda da conta Efí; Clique em "Criar aplicação" Habilite a API Open Finance e escolha os escopos que deseja liberar em ambiente de Produção e Homologação (você pode editá-los no futuro); Com os escopos selecionados, clique em "Continuar". Para utilizar uma aplicação já cadastrada em sua conta e integrá-la com a API Open Finance, siga os passos a seguir:
Acesse sua conta Efí e clique em "API" no menu inferior esquerdo; Selecione "Aplicações". Escolha a aplicação que deseja editar, clique nos três pontinhos e, em seguida, em configurações; Habilite a API Open Finance e escolha os escopos que deseja liberar em ambiente de Produção e Homologação (você pode editá-los quando quiser); Após selecionar os escopos desejados, clique em "Continuar"." Gerando e convertendo um certificado P12 Para gerar e converter um certificado, se necessário, você pode acessar aqui .
Rotas base Para se comunicar com os ambientes de produção ou homologação da Efí, utilize as rotas base ou URLs base a seguir.
Ambiente Rota base Produção https://openfinance.api.efipay.com.br
Homologação https://openfinance-h.api.efipay.com.br
A API Open Finance Efí utiliza o o protocolo OAuth 2.0 para autorizar as requisições feitas. O objetivo é obter um token de acesso (access_token
), que permite à aplicação autorizada consumir os endpoints da API.
A autenticação das requisições é feita usando HTTP Basic Auth com as credenciais Client_Id
e Client_Secret
da aplicação criada na conta Efí.
Dessa forma, o OAuth responde com as autorizações concedidas à aplicação, permitindo ou negando as requisições com base nessas informações.
Atenção! O Certificado P12/PEM gerado nos passos anteriores é obrigatório em todas as requisições feitas à API Open Finance, incluindo a solicitação de autorização.
Collection Postman API Open Finance Este é o link da nossa Collection que manteremos atualizada com os endpoints da API Open Finance Efí.
Executar no Postman
Configurando o Postman para testes Antes de prosseguir com a configuração do Postman, certifique-se de ter:
Um par de credenciais Client_Id
e Client_Secret
de uma aplicação cadastrada em sua Conta Efí; Um certificado P12/PEM gerado em sua conta Efí; O software Postman instalado em seu computador (Caso não tenha, baixe aqui ); 1. Criando um Environment A criação de um Environment no Postman é necessária para que algumas automações embutidas na collection funcionem. Essas automações foram projetadas para dar mais facilidade aos desenvolvedores durante os testes.
Isso permitirá que você solicite a autorização apenas uma vez, gravando o access_token
como uma variável de ambiente (environment) do Postman, disponível para uso em outras requisições subsequentes.
Para criar um Environment siga os passos a seguir:
Pressione Ctrl+N
para acionar o atalho e selecione "Environment"; Atribua um nome preferencialmente especificando se esse Environment será apontado para o ambiente de Produção ou Homologação; Crie a variável efi-of-api
e como valor inicial (Initial value) insira a URL da API Open Finance de Produção ou Homologação; Salve o seu Environment; Selecione o Environment desejadopara que o Postman entenda a variável criada. As imagens a seguir mostram os passos ilustrados acima. Neste exemplo, foi criado um Environment para o ambiente de Produção da API Open Finance da Efí.
Dica Repita os passos acima criar Environment apontado para o ambiente de Produção. Assim, você pode alternar facilmente entre os Environments, garantindo que suas requisições estejam sempre direcionadas corretamente.
2. Configurando o certificado no Postman Todas as requisições feitas à API Open Finance Efí precisam do certificado gerado em sua conta Efí. Portanto, para facilitar seus testes utilizando o Postman, siga os passos abaixo para configurar o uso do certificado durante as requisições de maneira automática:
Clique no ícone de engrenagem no canto superior direito do Postman; Em seguida, clique em "Settings" para abrir as configurações; Na aba superior, clique em "Certificates"; Em seguida, clique em "Add Certificate"; Na janela de configuração do novo certificado, preencha o campo "Host" com a Rota base do ambiente ao qual o certificado pertence (Produção ou Homologação); Utilize o campo "PFX File" para informar ao Postman onde o arquivo do seu certificado P12/PEM está localizado; Finalize clicando em "Add" para salvar suas configurações. Ao seguir esses passos, o Postman utilizará automaticamente o certificado em todas as requisições feitas ao ambiente configurado.
Dica É ideal que você configure o certificado do ambiente de homologação, mas você também pode repetir os passos acima para configurar o Postman com um certificado para o ambiente de Produção.
As imagens abaixo ilustram o passo a passo da configuração do certificado.
3. Atribuindo o Client_Id e Client_Secret no Postman Para finalizar a configuração do seu Postman é necessário configurar as credenciais de uma aplicação da sua conta Efí. Essas credenciais são usadas para o Basic Auth e para obter o access_token
junto ao OAuth.
Siga os passos a seguir para incluir as credenciais e realizar o seu primeiro teste na API Open Finance Efí.
Na collection importada, navegue até a rota /v1/oauth/token
e clique duas vezes para abrir; Acesse o menu "Authorization" e verifique o "Type" (tipo de autorização) está selecionado como "Basic Auth"; Preencha os campos "username" e "password" com as credenciais da sua aplicação, ou seja, o Client_Id e o Client_Secret, respectivamente; Para testar, clique no botão "Send" para enviar a requisição. A imagem abaixo ilustra os passos acima. Se tudo foi seguido corretamente, você deve obter uma resposta em formato JSON, contendo o access_token
, token_type
, expires_in
e scope
(como na imagem abaixo).
Obter autorização POST /v1/oauth/token
Este endpoint é utilizado para autorizar as credenciais de uma aplicação e obter os escopos de acesso à API Open Finance Efí. Para garantir a segurança na comunicação entre cliente e servidor, é essencial que o certificado P12/PEM esteja presente na requisição de autorização.
Exemplos de autorização utilizando o certificado .P12 Para usar a API Open Finance Efí, o cliente e o servidor devem se comunicar por uma conexão verificada. Isso é feito através do certificado bidirecional (.PEM ou .P12), onde servidor e cliente possuem um certificado de chave privada e um de chave pública para garantir suas identidades.
Portanto, ao fazer qualquer requisição HTTP à API Open Finance, incluindo a solicitação de autorização pelo OAuth2, é fundamental que o certificado .P12 ou .PEM esteja presente nos cabeçalhos da requisição.
A seguir, apresentamos exemplos de como obter a autorização na API Open Finance Efí, incorporando esse certificado na requisição.
PHP Node Python .Net Ruby Java Go //Desenvolvido pela Consultoria Técnica da Efí <?php $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://openfinance-h.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" ] , CURLOPT_SSLCERTPASSWD => "" , CURLOPT_HTTPHEADER => array ( "Authorization: Basic $autorizacao " , "Content-Type: application/json" ) , ) ) ; $response = curl_exec ( $curl ) ; curl_close ( $curl ) ; echo "<pre>" ; echo $response ; echo "</pre>" ; ?>
"use strict" ; const https = require ( "https" ) ; var axios = require ( "axios" ) ; var fs = require ( "fs" ) ; var certificado = fs . readFileSync ( "./certificado.p12" ) ; var credenciais = { client_id : "YOUR-CLIENT-ID" , client_secret : "YOUR-CLIENT-SECRET" , } ; var data = JSON . stringify ( { grant_type : "client_credentials" } ) ; var data_credentials = credenciais . client_id + ":" + credenciais . client_secret ; var auth = Buffer . from ( data_credentials ) . toString ( "base64" ) ; const agent = new https . Agent ( { pfx : certificado , passphrase : "" , } ) ; var config = { method : "POST" , url : "https://openfinance-h.api.efipay.com.br/v1/oauth/token" , headers : { Authorization : "Basic " + auth , "Content-Type" : "application/json" , } , httpsAgent : agent , data : data , } ; axios ( config ) . then ( function ( response ) { console . log ( JSON . stringify ( response . data ) ) ; } ) . catch ( function ( error ) { console . log ( error ) ; } ) ;
import requests import base64 credentials = { "client_id" : "YOUR-CLIENT-ID" , "client_secret" : "YOUR-CLIENT-SECRET" , } certificado = './certificado.pem' auth = base64 . b64encode ( ( f" { credentials [ 'client_id' ] } : { credentials [ 'client_secret' ] } " ) . encode ( ) ) . decode ( ) url = "https://openfinance-h.api.efipay.com.br/v1/oauth/token" payload = "{\r\n \"grant_type\": \"client_credentials\"\r\n}" headers = { 'Authorization' : f"Basic { auth } " , 'Content-Type' : 'application/json' } response = requests . request ( "POST" , url , headers = headers , data = payload , cert = certificado ) print ( response . text )
using System ; using System . Security . Cryptography . X509Certificates ; using System . Collections . Generic ; using RestSharp ; namespace Exemplo { class Authorize { public static string Base64Encode ( string plainText ) { var plainTextBytes = System . Text . Encoding . UTF8 . GetBytes ( plainText ) ; return System . Convert . ToBase64String ( plainTextBytes ) ; } static void Main ( string [ ] args ) { var credencials = new Dictionary < string , string > { { "client_id" , "YOUR-CLIENT-ID" } , { "client_secret" , "YOUR-CLIENT-SECRET" } } ; var authorization = Base64Encode ( credencials [ "client_id" ] + ":" + credencials [ "client_secret" ] ) ; var client = new RestSharp . RestClient ( "https://openfinance-h.api.efipay.com.br/v1/oauth/token" ) ; var request = new RestRequest ( Method . POST ) ; X509Certificate2 uidCert = new X509Certificate2 ( "./certificado.p12" , "" ) ; client . ClientCertificates = new X509CertificateCollection ( ) { uidCert } ; request . AddHeader ( "Authorization" , "Basic " + authorization ) ; request . AddHeader ( "Content-Type" , "application/json" ) ; request . AddParameter ( "application/json" , "{\r\n \"grant_type\": \"client_credentials\"\r\n}" , ParameterType . RequestBody ) ; IRestResponse restResponse = client . Execute ( request ) ; string response = restResponse . Content ; Console . WriteLine ( response ) ; } } }
require "uri" require "net/http" require "openssl" client_id = "YOUR-CLIENT-ID" ; client_secret = "YOUR-CLIENT-SECRET" ; certfile = File . read ( "certificado.pem" ) url = URI ( "https://openfinance-h.api.efipay.com.br/v1/oauth/token" ) https = Net :: HTTP . new ( url . host , url . port ) ; https . use_ssl = true https . cert = OpenSSL :: X509 :: Certificate . new ( certfile ) https . key = OpenSSL :: PKey :: RSA . new ( certfile ) request = Net :: HTTP :: Post . new ( url ) request . basic_auth ( client_id , client_secret ) request [ "Content-Type" ] = "application/json" request . body = "{\r\n \"grant_type\": \"client_credentials\"\r\n}" response = https . request ( request ) puts response . read_body
import java . io . BufferedReader ; import java . io . InputStreamReader ; import java . io . OutputStream ; import java . net . URL ; import java . util . Base64 ; import javax . net . ssl . HttpsURLConnection ; import javax . net . ssl . SSLSocketFactory ; public class Auth { public static void main ( String [ ] args ) throws Exception { String client_id = "YOUR-CLIENT-ID" ; String client_secret = "YOUR-CLIENT-SECRET" ; ; String basicAuth = Base64 . getEncoder ( ) . encodeToString ( ( ( client_id + ':' + client_secret ) . getBytes ( ) ) ) ; System . setProperty ( "javax.net.ssl.keyStore" , "certificado.p12" ) ; SSLSocketFactory sslsocketfactory = ( SSLSocketFactory ) SSLSocketFactory . getDefault ( ) ; URL url = new URL ( "https://openfinance-h.api.efipay.com.br/v1/oauth/token" ) ; HttpsURLConnection conn = ( HttpsURLConnection ) url . openConnection ( ) ; conn . setDoOutput ( true ) ; conn . setRequestMethod ( "POST" ) ; conn . setRequestProperty ( "Content-Type" , "application/json" ) ; conn . setRequestProperty ( "Authorization" , "Basic " + basicAuth ) ; conn . setSSLSocketFactory ( sslsocketfactory ) ; String input = "{\"grant_type\": \"client_credentials\"}" ; OutputStream os = conn . getOutputStream ( ) ; os . write ( input . getBytes ( ) ) ; os . flush ( ) ; InputStreamReader reader = new InputStreamReader ( conn . getInputStream ( ) ) ; BufferedReader br = new BufferedReader ( reader ) ; String response ; while ( ( response = br . readLine ( ) ) != null ) { System . out . println ( response ) ; } conn . disconnect ( ) ; } }
package main import ( "fmt" "strings" "net/http" "io/ioutil" "crypto/tls" ) const ( client_id = "YOUR-CLIENT-ID" client_secret = "YOUR-CLIENT-SECRET" ) func main ( ) { url := "https://openfinance-h.api.efipay.com.br/v1/oauth/token" method := "POST" payload := strings . NewReader ( `{"grant_type": "client_credentials"}` ) cert , _ := tls . LoadX509KeyPair ( "CA.crt.pem" , "KEY.crt.pem" ) client := & http . Client { Transport : & http . Transport { TLSClientConfig : & tls . Config { Certificates : [ ] tls . Certificate { cert } , } , } , } req , err := http . NewRequest ( method , url , payload ) if err != nil { fmt . Println ( err ) return } req . SetBasicAuth ( client_id , client_secret ) req . Header . Add ( "Content-Type" , "application/json" ) res , err := client . Do ( req ) if err != nil { fmt . Println ( err ) return } defer res . Body . Close ( ) body , err := ioutil . ReadAll ( res . Body ) if err != nil { fmt . Println ( err ) return } fmt . Println ( string ( body ) ) }
Exemplo de resposta da autorização O trecho de código abaixo representa um exemplo de resposta do OAuth à sua requisição de autorização.
{ "access_token" : "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" , "token_type" : "Bearer" , "expires_in" : 3600 , "scope" : "gn.opb.participants.read gn.opb.payment.pix.send gn.opb.payment.pix.read..." }