Histórico de mensagens em devs

EXIBINDO CONVERSAS RECENTES:

Canal: devs
Avatar discord do usuario znuuxx

znuuxx

Acabei de rodar isso aqui que esta na doc do API Cobrança:

const https = require("https");
var axios = require("axios");
var fs = require("fs");
const efiOptions = require('./src/config/efi-config')

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

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

//Consumo em desenvolvimento da rota post oauth/token
var config = {
method: "POST",
url: "https://cobrancas-h.api.efipay.com.br/v1/authorize",
headers: {
Authorization: "Basic " + auth,
"Content-Type": "application/json",
},
data: data,
};

axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});

E ta dando erro de certificado:

$ node teste.js
AxiosError: self-signed certificate in certi
ficate chain

Avatar discord do usuario jessica_efi

jessica_efi

Executei o exemplo createCharge com sucesso

Avatar discord do usuario jessica_efi

jessica_efi

eu acabei de fazer um teste nessa versão da api e rodou com sucesso.

Avatar discord do usuario jessica_efi

jessica_efi

Para a api cobranças (boleto, cartão...) não é necessário certificado em nenhum requisição. O certificado só é necessário nas demais apis

Avatar discord do usuario znuuxx

znuuxx

@jessica_efi Precisa de certificado para o Oauth, certo?

Avatar discord do usuario znuuxx

znuuxx

Acabei de dar um copia e cola desse snippet na doc de vocês:

//Desenvolvido pela Consultoria Técnica da Efí

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

//Insira os valores de suas credenciais em desenvolvimento do pix
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;

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

//Consumo em desenvolvimento da rota post oauth/token
var config = {
method: "POST",
url: "https://cobrancas-h.api.efipay.com.br/v1/authorize",
headers: {
Authorization: "Basic " + auth,
"Content-Type": "application/json",
},
data: data,
};

axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});

O erro:
$ node teste.js
node:internal/validators:162
throw new ERR_INVALID_ARG_TYPE(name, 'st
ring', value);
^

TypeError [ERR_INVALID_ARG_TYPE]: The "paths
[1]" argument must be of type string. Receiv
ed undefined

Avatar discord do usuario znuuxx

znuuxx

Ver Respostas

Sim, tudo instalado sem warnings

Avatar discord do usuario znuuxx

znuuxx

Qual é a doc oficial do sdk da api de cobrança com nodejs?
Porque nas docs mostram uns métodos mas não vejo importar o sdk em nenhum

Avatar discord do usuario jessica_efi

jessica_efi

Ver Respostas

qual você executou o comando npm install sdk-node-apis-efi instalou com sucesso?

Avatar discord do usuario jessica_efi

jessica_efi

Para você visualizar os campos obrigatórios, é so clicar no botão Consultar atributos
imagem enviada na mensagem pelo usuario jessica_efi

Avatar discord do usuario znuuxx

znuuxx

@jessica_efi Crie um arquivo teste.js:
const EfiPay = require('sdk-node-apis-efi')
const efiOptions = require('./src/config/efi-config');


const efipay = new EfiPay(efiOptions)

let chargeInput = {
items: [
{
name: 'Product A',
value: 1000,
amount: 2,
},
],
}

efipay.createCharge({}, chargeInput)
.then((resposta) => {
console.log(resposta)
})
.catch((error) => {
console.log(error)
})

Mas quando rodei com as mesmas credenciais, deu esse erro:

$ node teste.js
node:internal/validators:162
throw new ERR_INVALID_ARG_TYPE(name, 'st
ring', value);
^

TypeError [ERR_INVALID_ARG_TYPE]: The "paths
[1]" argument must be of type string. Receiv
ed undefined

Na doc não achei quais são os campos obrigatórios... apenas esse trecho de código

Avatar discord do usuario znuuxx

znuuxx

"sdk-node-apis-efi": "^1.2.17",

Avatar discord do usuario jessica_efi

jessica_efi

Qual versão da sdk que você tentou?

Avatar discord do usuario znuuxx

znuuxx

Como se o certificado não fosse válido

Avatar discord do usuario znuuxx

znuuxx

@jessica_efi Ai eu tentei sem o sdk:

require('dotenv').config();
const axios = require('axios');
const fs = require('fs');
const https = require('https');
const path = require('path');

function loadP12Certificate(certPath) {
console.log("HttpAgent => ", certPath);

const cert = path.resolve(__dirname, certPath);
const p12File = fs.readFileSync(cert);

return new https.Agent({
pfx: p12File,
rejectUnauthorized: process.env.NODE_ENV !== 'production'
});
}

// Função para obter o token de acesso
async function getAccessToken() {
const authUrl = ${process.env.EFI_API_URL}/oauth/token;
const credentials = {
client_id: process.env.EFI_CLIENT_ID,
client_secret: process.env.EFI_CLIENT_SECRET,
grant_type: 'client_credentials'
};

console.log("Cred => ", credentials);

const httpsAgent = loadP12Certificate(process.env.EFI_CERTIFICATE_PATH);

console.log("Agent => ", httpsAgent);

try {
const response = await axios.post(authUrl, credentials, {
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
httpsAgent
});
return response.data.access_token;
} catch (error) {
console.error('Erro ao obter token:', error.response ? error.response.data : error.message);
throw new Error('Falha ao autenticar com o EFÍ Bank');
}
}

Só que a Efí retorna um 500:
Erro ao obter token: self-signed certificate in certificate chain
Error: Falha ao autenticar com o EFÍ Bank
at getAccessToken

Avatar discord do usuario znuuxx

znuuxx

Eu tentei com a sdk e fica dando erro na inicialização.
A api diz que é assim:


Instalação:
npm install sdk-node-apis-efi

Instância:
const EfiPay = require('sdk-node-apis-efi')
const options = {
// PRODUÇÃO = false
// HOMOLOGAÇÃO = true
sandbox: false,
client_id: 'seuClientId',
client_secret: 'seuClientSecret',
certificate: 'caminho/Ate/O/Certificado/Pix',
}

const efipay = new EfiPay(options)

efipay.createCharge({}, chargeInput)
.then((resposta) => {
console.log(resposta)
})
.catch((error) => {
console.log(error)
})

Só que no log mostra que efipay.createCharge é indefinido.

Eu tentei dar um log de efipay para ver quais métodos ele retorna, mas no log mostra efipay: {}, ou seja, nulo.

Avatar discord do usuario jessica_efi

jessica_efi

Ver Respostas

@znuuxx você esta utilizando nossa sdk de Node?

Avatar discord do usuario znuuxx

znuuxx

Ver Respostas

@jessica_efi eu consegui resolver esse problema.
Mas cai num ooutro de certificado:

"self-signed certificate in certificate chain"

Ja tentei passando caminho absoluto, caminho relativo, coloquei o certificado no mesmo nivel do .js e mesmo assim da o erro