Histórico de mensagens sobre js em pix

EXIBINDO CONVERSAS RECENTES:

Texto: js
Canal: pix
Avatar discord do usuario vitor.oliveira94

vitor.oliveira94

Ver Respostas

mas isso seria o motivo de não receber o json?

Avatar discord do usuario vitor.oliveira94

vitor.oliveira94

abaixei para R$1.00 porém não recebi nada. Dentro da pix esta o código que vocês tem de exemplo, que me parece estar ok. Se recebe request tipo POST ele salva o json. Porém ainda zerado

Avatar discord do usuario vitor.oliveira94

vitor.oliveira94

pelo que entendi essa função acima ja faz isso, certo? Se a requisição vier como POST vai salvar no arquivo dados.json o que recebeu. Certo?

Avatar discord do usuario gabriel_efi

gabriel_efi

Olá, @vitor.oliveira94!
Você chegou a tentar verificar o JSON que está chegando, salvando em um log para averiguações?

Avatar discord do usuario vitor.oliveira94

vitor.oliveira94

estou usando o exemplo de código que esta no site.

function resposta($status, $mensagem, $dados)
{
$resposta['status'] = $status;
$resposta['mensagem'] = $mensagem;
$resposta['dados'] = $dados;
$json_resposta = '
' . json_encode($resposta, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . '
';

header("HTTP/1.1 " . $status);
echo $json_resposta;
}

function salvar($dados)
{
// Crie um arquivo .;json para salvar as informações
$nomeArquivo = 'dados.json';
$dadosGravados = json_decode(file_get_contents($nomeArquivo), true);
$arquivo = fopen($nomeArquivo, 'w');

// Incrementa as informações enviadas com o que já havia gravado
array_push($dadosGravados, $dados);

if (fwrite($arquivo, json_encode($dadosGravados))) {
resposta(200, "Requisição realizada com sucesso!", $dados);
} else {
resposta(300, "Falha ao salvar os dados da requisição.", $dados);
}

fclose($arquivo);
}

function requisicao($metodo, $body, $parametros)
{
switch ($metodo) {
case 'POST':
salvar($body);
break;
case 'GET':
resposta(200, "Requisição realizada com sucesso!", $body);
break;
}
}

// Obtém o método HTTP, body e parâmetros da requisição
$metodo = $_SERVER['REQUEST_METHOD'];
$parametros = explode('/', trim($_SERVER['REQUEST_URI'], '/'));
$body = json_decode(file_get_contents('php://input'), true);

try {
requisicao($metodo, $body, $parametros);
} catch (Exception $e) {
resposta(400, $e->getMessage(), $e);
}

Avatar discord do usuario vitor.oliveira94

vitor.oliveira94

testei modo homologação, achei que o código iria salvar um json caso recebesse algo mas não parece estar recebendo

Avatar discord do usuario vinicius_cs

vinicius_cs

Ver Respostas

É possível testar Webhook em homolog?

Estou desenvolvendo em Laravel, fiz a rota com o /webhook, no entanto ao executar:
https://pix-h.api.efipay.com.br/v2/webhook/:chave

É retornado:
{
"nome": "webhook_invalido",
"mensagem": "A URL informada respondeu com o código HTTP 419"
}

No WebhookController eu coloquei apenas isso para testar:

php
public function handle(Request $request)
{
$payload = $request->all();

return response()->json(['status' => 200]);
}

Nas rotas coloquei assim:
php
Route::prefix('webhook')->group(function () {
Route::get('/', [WebhookController::class, 'handle'])->name('webhook.handle');
Route::post('/', [WebhookController::class, 'handle'])->name('webhook.handle');
Route::put('/', [WebhookController::class, 'handle'])->name('webhook.handle');
});

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",
},
}
);

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" }),
}
);

Avatar discord do usuario blini_10032

blini_10032

js, nuxt, vercel

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.

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"
),
));

Avatar discord do usuario peterfritz

peterfritz

Ver Respostas

Oi, boa tarde. Vocês sabem se existe algum jeito de consultar o pagador de um QR Code ou BR Code que foi cadastrado sem informar um devedor?
Na secção de https://dev.efipay.com.br/docs/api-pix/webhooks#requisi%C3%A7%C3%A3o>">requisição (callback) da documentação de webhooks, vi que é possível que os dados do pagador sejam recebidos no callback através da propriedade gnExtras.pagador, porém o objeto gnExtras é opcional e, até então, só tenho recebido através de callbacks os seguintes dados:

json
{
"pix": [
{
"endToEndId": "...",
"txid": "...",
"chave": "...",
"valor": "...",
"horario": "..."
}
]
}
No extrato é possível visualizar pagador, documento e instituição, então imagino que há alguma forma de solicitar esses dados através da API.
Agradeço desde já e peço perdão pela mensagem longa.

Avatar discord do usuario rubenskuhl

rubenskuhl

Ver Respostas

WhatTicket é escrito em Node.js, e a Efí tem SDK em Node.js... deve ser o caminho mais rápido para esse desenvolvimento.

Avatar discord do usuario yuu_sr91

yuu_sr91

Gente, estou configurando o mTLS com a AWS configurada e dominio personalizado tbm e tá dando esse erro:

json
{
"nome": "webhook_invalido",
"mensagem": "A URL informada respondeu com o código HTTP 403"
}

Avatar discord do usuario guilherme_efi

guilherme_efi

Ver Respostas

Se passar um percentual com mais de duas casas decimais irá apresentar o erro:

json
{
"type": "https://pix.bcb.gov.br/api/v2/error/SplitConfigOperacaoInvalida",
"title": "Operação Inválida",
"status": 400,
"detail": "A requisição que busca alterar ou criar uma configuração de split não respeita o schema ou está semanticamente errada.",
"violacoes": [
{
"razao": "O campo não respeita o schema.",
"propriedade": "split.config.body.split.repasses.0.valor"
}
]
}

Avatar discord do usuario absfregs

absfregs

Ver Respostas

boa tarde, estou tentando fazer a configuração do webhook com nodejs, mas nao estou conseguindo configurar o "skip-mtls", ja consegui comunicar com os endpoints da EFI usando o módulo node "sdk-node-apis-efi", mas nao consegui desabilitar a verificação de certificado e continuo recebendo o erro "UNABLE_TO_VERIFY_LEAF_SIGNATURE"

no print existe uma linha que encontrei nos exemplos do repositorio, mas ainda assim nao deu certo! alguem pode me ajudar?
imagem enviada na mensagem pelo usuario absfregs

Avatar discord do usuario bonfim.justino

bonfim.justino

Ver Respostas

Opa pessoal, teste a solução do colega aqui, aparentemente deu muito certo, estou usando nextjs e pretendo subir na vercel minha aplicação

Avatar discord do usuario bydvictor

bydvictor

Estou começando a usar o sdk nodejs da api e no teste pra criar uma cobrança (pixCreateImmediateCharge) mas esta dando esse erro, tenho q fazer alguma chamada pra pegar a autenticação?
imagem enviada na mensagem pelo usuario bydvictor