Histórico de mensagens

EXIBINDO CONVERSAS RECENTES:

Data: 12/11/2023
# pix
Avatar discord do usuario peterfritz

peterfritz

Algo assim funcionaria:

js
import axios from "axios";
import https from "https";

const subdomain = process.env.NODE_ENV === "production" ? "pix" : "pix-h";

const clientCreds = clientId + ":" + clientSecret;
const authorization = Basic ${Buffer.from(clientCreds).toString("base64")};

const certificate = Buffer.from(certificateBase64Encoded, "base64");

const httpsAgent = new https.Agent({
pfx: certificate,
passphrase: "",
});

const oAuthResponse = await axios.post(
https://${subdomain}.api.efipay.com.br/oauth/token,
{
grant_type: "client_credentials",
},
{
headers: {
Authorization: authorization,
"Content-Type": "application/json",
},
httpsAgent,
}
);

const token = oAuthResponse.data.access_token;

const efiApi = axios.create({
baseURL: https://${subdomain}.api.efipay.com.br,
headers: {
Authorization: Bearer ${token},
"Content-Type": "application/json",
},
httpsAgent,
});

await efiApi.put(
/v2/webhook/${process.env.PIX_KEY},
{
webhookUrl:
${process.env.WEBHOOK_BASE_URL}/api/webhook/efi?secret=${process.env.WEBHOOK_SECRET}&ignore=.replace(
"//api",
"/api"
),
},
{
headers: {
"x-skip-mtls-checking": "true",
},
}
);

# pix
Avatar discord do usuario blini_10032

blini_10032

nao, mas tanto faz

# pix
Avatar discord do usuario peterfritz

peterfritz

Pretende usar a SDK?

# pix
Avatar discord do usuario blini_10032

blini_10032

a minha requisição de oauth tá assim:
const responseToken = await fetch(
"https://pix-h.api.efipay.com.br/oauth/token",
{
method: "POST",
headers: {
"Content-Type": "application/json",
"x-skip-mtls-checking": "true",
},
body: JSON.stringify({ grant_type: "client_credentials" }),
}
);

# pix
Avatar discord do usuario blini_10032

blini_10032

sim, claro rs

# pix
Avatar discord do usuario peterfritz

peterfritz

Sabe usar Axios?

# pix
Avatar discord do usuario blini_10032

blini_10032

js, nuxt, vercel

# pix
Avatar discord do usuario peterfritz

peterfritz

Você usa qual linguagem e framework? Vai "hospedar" em qual plataforma?

# pix
Avatar discord do usuario blini_10032

blini_10032

e eu passo esses parametros na minha requisição de oauth?
{
pfx: certificate,
passphrase: "",
}

# pix
Avatar discord do usuario peterfritz

peterfritz

Ver Respostas

Não, é CLI, faz parte do https://www.gnu.org/software/coreutils/>">GNU coreutils, se tu usa Linux ou Mac, quase certeza que ele já tá aí. Pra confirmar só rodar base64 --version

# pix
Avatar discord do usuario blini_10032

blini_10032

Ver Respostas

valeu man!! mto bom
esse comando base64 é do node? É algum pacote?

# pix
Avatar discord do usuario peterfritz

peterfritz

Ver Respostas

Para isso eu transformei o arquivo em base64 usando o comando base64 producao.p12 | tr -d '\n' | tr -d ' ' > output.txt e adicionei o conteúdo de output.txt em uma variável de ambiente.
Para converter de base64 para binário, uso o seguinte trecho de código em TypeScript:

ts
const certificate = Buffer.from(certificateBase64Encoded, "base64");

const httpsAgent = new https.Agent({
pfx: certificate,
passphrase: "",
});
Como o projeto no qual estou trabalhando é escrito em TypeScript e a tipagem do SDK sdk-typescript-apis-efi é basicamente nenhuma tipagem, eu decidi criar as requisições do zero adequando-as ao modelo serverless e com tudo tipado e validado como descrito na documentação já que há um time relativamente grande que trabalhará nesse projeto.
Mas se você quiser usar a SDK, provavelmente terá que dar um jeito de salvar o certificado em um arquivo usando um script durante a build ou algo assim já que EfiPay(options) só aceita o caminho do certificado (não sei se eu recomendaria isso, depende muito da plataforma que usará).

Inclusive se alguém da Efí estiver lendo isso, uma SDK para TypeScript com as rotas e parâmetros definidos e com tipos, preferencialmente com suas respectivas descrições em JSDoc, seria incrível.

# pix
Avatar discord do usuario jessica_efi

jessica_efi

Vou iniciar um atendimento privado pra pegar mais informações

# pix
Avatar discord do usuario vitor.oliveira94

vitor.oliveira94

to mandando assim: curl_setopt_array($curl, array(
CURLOPT_URL => "https://pix-h.api.efipay.com.br/v2/cob", // 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 => $data,
CURLOPT_SSLCERT => $config["certificado"],
CURLOPT_SSLCERTPASSWD => "",
CURLOPT_HTTPHEADER => array(
"Authorization: Bearer $token",
"Content-Type: application/json"
),
));

# pix
Avatar discord do usuario vitor.oliveira94

vitor.oliveira94

Ver Respostas

isso depois de ter adicionar o certificado como pediu

# pix
Avatar discord do usuario vitor.oliveira94

vitor.oliveira94

Ver Respostas

to mandando dados errados ou o escopo da requisição não esta correto rs estou enviando o token no cabeçalho de atutentificação dessa cobrança pix. Esta correto?

Agora o erro mudou para : "Erro interno do servidor"

# pix
Avatar discord do usuario jessica_efi

jessica_efi

Certo. envia esse certificado na requisição de emissão também. Como enviou na autenticação

# pix
Avatar discord do usuario vitor.oliveira94

vitor.oliveira94

Ver Respostas

na emissão do access token sim. Gerei um .p12 depois utilizei o openSSL para gerar o .pem

# pix
Avatar discord do usuario jessica_efi

jessica_efi

Ver Respostas

Você enviou o certificado também na requisição de emissão?

# pix
Avatar discord do usuario vitor.oliveira94

vitor.oliveira94

sim. Consigo gerar o access_token tranquilo.