Histórico de mensagens sobre Client_ID em pix

EXIBINDO CONVERSAS RECENTES:

Texto: Client_ID
Canal: pix
Avatar discord do usuario rafaaoki

rafaaoki

Ver Respostas

public CobGerada pixCreateImmediateCharge(ClienteDto cliente) throws JSONException, EfiPayException {
try {
Credentials credentials = new Credentials();

JSONObject options = new JSONObject();
options.put("client_id", credentials.getClientId());
options.put("client_secret", credentials.getClientSecret());
options.put("certificate", credentials.getCertificate());
options.put("sandbox", credentials.isSandbox());


JSONObject body = new JSONObject();

System.out.println(cliente.toString());

String cpf = cliente.cpf().replaceAll("\\.", "");
cpf = cpf.replaceAll("-", "");

String rg = cliente.rg().replaceAll("\\.", "");
rg = rg.replaceAll("-", "");

body.put("calendario", new JSONObject().put("expiracao", 3600));
body.put("devedor", new JSONObject().put("cpf", cpf ).put("nome" , cliente.nome_completo()));
body.put("valor", new JSONObject().put("original", "0.01"));
body.put("chave", "3c4961f4-0921-4eda-97bc-71704defb09f");

EfiPay efi = new EfiPay(options);
JSONObject response = efi.call("pixCreateImmediateCharge", new HashMap(), body);
CobGerada res = new Gson().fromJson(response.toString() , CobGerada.class);
return res;
}catch (EfiPayException e){
System.out.println(e.getError());
System.out.println(e.getErrorDescription());
throw new RuntimeException(e.getMessage());
}
catch (Exception e) {
System.out.println(e.getMessage());
throw new RuntimeException(e.getMessage());
}
}

esse codigo funcionaria como um envio de pagamento pix via api?

Avatar discord do usuario emiliocalvet

emiliocalvet

java
@Getter
public class Credentials {
private final String clientId;
private final String clientSecret;
private final String certificate;
private final boolean sandbox;
private final boolean debug;

public Credentials() {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream credentialsFile = classLoader.getResourceAsStream("credentials.json");
assert credentialsFile != null;
JSONTokener tokenizer = new JSONTokener(credentialsFile);
JSONObject credentials = new JSONObject(tokenizer);
try {
credentialsFile.close();
} catch (IOException e) {
System.out.println("Impossible to close file credentials.json");
}

this.clientId = credentials.getString("client_id");
this.clientSecret = credentials.getString("client_secret");
this.certificate = credentials.getString("certificate");
this.sandbox = credentials.getBoolean("sandbox");
this.debug = credentials.getBoolean("debug");
}

public HashMap getOptionsMap() {
HashMap options = new HashMap<>();
options.put("client_id", this.getClientId());
options.put("client_secret", this.getClientSecret());
options.put("certificate", this.getCertificate());
options.put("sandbox", this.isSandbox());
return options;
}

public JSONObject getOptionsJson() {
return new JSONObject(this.getOptionsMap());
}
}

Avatar discord do usuario _.merce

_.merce

Ver Respostas

@guilherme_efi, boa tarde.
No projeto de exemplo C# da EFi na classe PixSend.cs,
Na linha:
dynamic efi = new EfiPay(JObject.Parse(File.ReadAllText("credentials.json")));

O token já vem preenchido, sendo que no credentials.json só temos o client_id, secret, sandbox e certificate.

Sabe me informar em qual momento/classe esse token é obtido?

Avatar discord do usuario eu_jonas

eu_jonas

Ver Respostas

TS
const rawResult = await axios({
url: https://pix-h.api.efipay.com.br/v2/cob/${txid},
method: 'PUT',
headers: {
'Content-Type': 'application/json'
},
auth: {
username: process.env.EFI_CLIENT_ID,
password: process.env.EFI_CLIENT_SECRET
},
httpsAgent: agent,
data: body
})

Avatar discord do usuario he128

he128

Ver Respostas

Passo também o client_id e o client_secret ou somente o certificado e o AccessToken nessa requisição de cadastro de URL de Webhook ?

Avatar discord do usuario luizcubas

luizcubas

Ver Respostas

Bom dia equipe Efi, espero que estejam bem. Por gentileza, estou utilizando a SDK de vocês para NodeJS e estou com uma dúvida, nas opções de inicialização do EfyPay, eu posso passar diretamente o certificado em Base64 através de uma variável de ambiente ou é obrigatório o uso de um arquivo?

Exemplo da documentação:

module.exports = {
sandbox: true,
client_id: 'seuClientId',
client_secret: 'seuClientSecret',
certificate: 'caminho/Ate/O/Certificado/Pix',
cert_base64: false, // Indica se o certificado está em base64 ou não
}

Como pretendo utilizar:

const options = {
sandbox: true,
client_id: process.env.EFIAPI_CLIENTID || "",
client_secret: process.env.EFIAPI_CLIENTSECRET || "",
certificate: process.env.EFIAPI_CERT,
cert_base64: true,
}
A ideia é que a variável de ambiente EFIAPI_CERT contenha diretamente o valor do certificado em BASE64, dessa forma evito ter que subir o arquivo para o servidor, seria possível?

Avatar discord do usuario daviqsh

daviqsh

Ver Respostas

//Desenvolvido pela Consultoria Técnica da Efí

"use strict";
const https = require("https");
var axios = require("axios");
var fs = require("fs");

//Insira o caminho de seu certificado .p12 dentro de seu projeto
var certificado = fs.readFileSync("./certs/SorteioCabelo_hml_cert.pem");

//Insira os valores de suas credenciais em desenvolvimento do pix
var credenciais = {
client_id: process.env.CLIENT_ID_HML,
client_secret: process.env.CLIENT_SECRET_HML,
};


var data = JSON.stringify({ grant_type: "client_credentials" });
var data_credentials = credenciais.client_id + ":" + credenciais.client_secret;

// Codificando as credenciais em base64
var auth = Buffer.from(data_credentials).toString("base64");

const agent = new https.Agent({
cert: certificado,
passphrase: '',
});

//Consumo em desenvolvimento da rota post oauth/token
const config = {
method: "POST",
url: "https://pix-h.api.efipay.com.br/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);
});

Avatar discord do usuario guilherme_efi

guilherme_efi

Ver Respostas

Bom dia, @daviqsh! O que o Rubens quis dizer é que, depois de obter o access_token, nas próximas requisições você deve enviar o access_token e continuar usando o certificado, sem precisar incluir o client_id e o client_secret.
Você já conseguiu obter o access_token? Como está montando a requisição?

Avatar discord do usuario logaaaa

logaaaa

Ver Respostas

Boa tarde, estou usando o código de exemplo em PHP para cobrança imediata do PIX...
Me atentei ao card que explica sobre a inserção do Client_id e Client_Secret, Sandbox e a pasta e a conversão do certificado, no entanto, quanto rodo esse exemplo nos seguintes cenários, tenho retornos inesperados:

Produção: Ocorreu um erro - Mensagem: 401invalid_client - Credenciais inválidas ou inativas
Homologação : Gerou o QRCode e Chave Copia e Cola normalmente.

Servidor: Apache
Linguagem: PHP
BD: MySQL
SDK Composer Instalado
imagem enviada na mensagem pelo usuario logaaaa

Avatar discord do usuario jessica_efi

jessica_efi

Ver Respostas

Certo. Para utilizar nossa API Pix, você vai precisar criar uma aplicação em sua conta Efí para obter as credenciais de autenticação, client_id e client_secret, e ativar os escopos da API Pix e também será necessário criar uma certificado. Para obter essa informações, você pode seguir esse tutorial.

Avatar discord do usuario aleque0169

aleque0169

Ver Respostas

Boa noite, pessoal.

Ao realizar a seguinte requisição: https://pix-h.api.efipay.com.br/oauth/token, utilizando meu Client_Id, Client_Secret e o certificado p12 de homologação. Nesse ambiente, consigo obter o token corretamente.

No entanto, ao tentar realizar a requisição utilizando o domínio https://pix.api.efipay.com.br/oauth/token com o Client_Id, Client_Secret e certificado p12 de produção, recebo a seguinte resposta de erro: "socket hang up".

O que devo fazer para resolver esse problema?
imagem enviada na mensagem pelo usuario aleque0169

Avatar discord do usuario guilherme_efi

guilherme_efi

Ver Respostas

Bom dia, @vinicio254! Tudo bem?

Você pode usar o exemplo abaixo para registrar o webhook. Sobre a configuração do mTLS, você pode conferir este vídeo que ensina a configuração em servidor Apache.

php

$homolog = true; // false para produção

$config = [
"certificado" => realpath(__DIR__ . "/certificado.pem"), // certificado em .pem de produção ou homologação
"client_id" => "Client_Id",
"client_secret" => "Client_Secret"
];

$chavePix = "suachavepix";

$webhookUrl = "https://seudominio.com.br/webhook/hash=hashdeseguranca&ignorar="

$autorizacao = base64_encode($config["client_id"] . ":" . $config["client_secret"]);
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $homolog ? "https://pix-h.api.efipay.com.br/oauth/token" : "https://pix.api.efipay.com.br/oauth/token",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 8,
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"
),
));
var_dump(curl_exec($curl));
$returnAuth = json_decode(curl_exec($curl), true);
$access_token = $returnAuth['access_token'];
curl_close($curl);


//Criação da cobrança
$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => $homolog ? "https://pix-h.api.efipay.com.br/v2/webhook/$chavePix" : "https://pix.api.efipay.com.br/v2/webhook/$chavePix"
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_POSTFIELDS => '{
"webhookUrl": $webhookUrl
}',
CURLOPT_SSLCERT => $config["certificado"], // Caminho do certificado
CURLOPT_SSLCERTPASSWD => "",
CURLOPT_HTTPHEADER => array(
"Authorization: Bearer $access_token",
"x-skip-mtls-checking: true",
"Content-Type: application/json"
),
));
$responsePix = json_decode(curl_exec($curl), true);
curl_close($curl);

echo '
' . json_encode($responsePix, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . '
';

Avatar discord do usuario guilherme_efi

guilherme_efi

Ver Respostas

Bom dia, @roxzin! Como vai?
Aqui está um código que funciona:

php

$homolog = true; // false para produção

$config = [
"certificado" => realpath(__DIR__ . "/certificado.pem"), // certificado em .pem de produção ou homologação
"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 => $homolog ? "https://pix-h.api.efipay.com.br/oauth/token" : "https://pix.api.efipay.com.br/oauth/token",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 8,
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"
),
));
var_dump(curl_exec($curl));
$returnAuth = json_decode(curl_exec($curl), true);
$access_token = $returnAuth['access_token'];
curl_close($curl);


//Criação da cobrança
$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => $homolog ? 'https://pix-h.api.efipay.com.br/v2/cob/' : 'https://pix.api.efipay.com.br/v2/cob/',
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 => '{
"calendario": {
"expiracao": 3600
},
"devedor": {
"cpf": "12345678909",
"nome": "Francisco da Silva"
},
"valor": {
"original": "0.45"
},
"chave": "[email protected]"
}',
CURLOPT_SSLCERT => $config["certificado"], // Caminho do certificado
CURLOPT_SSLCERTPASSWD => "",
CURLOPT_HTTPHEADER => array(
"Authorization: Bearer $access_token",
"Content-Type: application/json"
),
));
$responsePix = json_decode(curl_exec($curl), true);
curl_close($curl);

echo '
' . json_encode($responsePix, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . '
';

if ($responsePix['loc']['id']) {
$idlocationPix = $responsePix['loc']['id'];

// Obtêm o Pix Copia e Cola e QR Code
$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => $homolog ? 'https://pix-h.api.efipay.com.br/v2/loc/' . $idlocationPix . '/qrcode' : 'https://pix.api.efipay.com.br/v2/loc/' . $idlocationPix . '/qrcode',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_SSLCERT => $config["certificado"], // Caminho do certificado
CURLOPT_SSLCERTPASSWD => "",
CURLOPT_HTTPHEADER => array(
"Authorization: Bearer $access_token",
),
));

$response = json_decode(curl_exec($curl), true);

curl_close($curl);


$PixCopiaCola = $response['qrcode'];
$imagemQrcode = $response['imagemQrcode'];


echo 'QR Code:';
echo '
' . json_encode($PixCopiaCola, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . '
';

echo 'Imagem:
';
echo '';
}
Também temos nossa SDK de PHP (https://github.com/efipay/sdk-php-apis-efi), que usa o Guzzle.

Avatar discord do usuario jackson.calixto

jackson.calixto

Ver Respostas

Bom dia, estou iniciando minha primeira integração com a efí pois em meu projeto estou na fase final onde vou agregar transações financeiras, meu certificado homologação esta correto, meu client_id e secrert esta correto, tudo correto no postman, mas esse é o retorno.
POST https://pix-h.api.efipay.com.br/oauth/token
Error: socket hang up
Request Headers
Authorization: Basic dW5kZWZpbmVkIHVuZGVmaW5lZDpDbGllbnRfU2VjcmV0XzAwNTMwMjg3N2M0N2JmZGVkMmVjYjg2OTUwZDU5MWQ4MWNiMTIwODA=
Content-Type: application/json
User-Agent: PostmanRuntime/7.30.0
Accept: /
Cache-Control: no-cache
Postman-Token: 7e23b1dc-3340-4eaf-8ba5-6e7111485a21
Host: pix-h.api.efipay.com.br
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Request Body
{
"grant_type": "client_credentials"
}

Avatar discord do usuario igor_efi

igor_efi

Ver Respostas

Boa tarde, @edsonpinheiro_! Tudo bem?
O username e password é o client_id e client_secret da aplicação registrada dentro da sua conta digital.
Nesta parte da nossa documentação citamos como é feito o registro de uma nova aplicação: https://dev.efipay.com.br/docs/api-pix/credenciais/#criar-uma-aplica%C3%A7%C3%A3o-ou-configurar-uma-j%C3%A1-existente

Avatar discord do usuario yasmin_efi

yasmin_efi

Caso for produção, mantenha sandbox = false e o certificado de produção. Caso o client_id e client_secret repassados sejam de homologaão, sandox = true e o certificado deve ser o de homologação

Avatar discord do usuario aguiar.dev

aguiar.dev

py
from efipay import EfiPay
from dotenv import dotenv_values
import os

env = dotenv_values(".env")

class EfiPayImpl():

def __init__(self) -> None:
credentials = {
"client_id": env["EFI_BANK_CLIENT_ID"],
"client_secret": env["EFI_BANK_CLIENT_SECRET"],
"sandbox": env["EFI_BANK_SANDBOX"],
"certificate": f"{os.getcwd()}/{env["EFI_BANK_CERTIFICATE"]}"
}
self.api = EfiPay(credentials)
um exemplo da implementação que fiz usando py. Ali em certificate eu pego a raiz do meu projeto e passo a variavel do .env pra ele saber qual arquivo devo usar, se é homol ou prod

Avatar discord do usuario hiagosilvas

hiagosilvas

Ver Respostas

php
$config [
"certificado" => "../certificados/homologacao-certificado_cert.pem",
"client_id" => "???",
"client_secret" => "???"
];

Avatar discord do usuario rodrigo_90439

rodrigo_90439

Ver Respostas

$config = [
"certificado" => "./certificados/homologacao-certificado_cert.pem",
"client_id" => "???",
"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_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_HTTPHEADER => array(
"Authorization: Basic $autorizacao",
"Content-Type: application/json"
),
));

$response = curl_exec($curl);

curl_close($curl);

if(curl_errno($curl)) {
echo 'Erro no cURL: ' . curl_error($curl);
} else {
echo $response;
}

Avatar discord do usuario rodrigo_90439

rodrigo_90439

Ver Respostas

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