Histórico de mensagens sobre js em pix

EXIBINDO CONVERSAS RECENTES:

Texto: js
Canal: pix
Avatar discord do usuario johny_777

johny_777

Ver Respostas

1) Há algum exemplo de split de pix em node.js ?

2) Quanto tempo leva para darem um parecer para a funcionalidade de criação de subcontas, que foi exigida no formulário adequado? esse parecer é por email, whatsapp, na plataforma, onde aparece?

Avatar discord do usuario jessica_efi

jessica_efi

Ver Respostas

Bom dia @jjsandilsonsa ! Você esta utilizando alguma de nossas sdks?

Avatar discord do usuario j34nm4rc0nd35_54662

j34nm4rc0nd35_54662

Ver Respostas

iniciei um integração com PIX, tudo configurado mas não consigo autenticar

json
{
"error": "invalid_client",
"error_description": "Invalid or inactive credentials"
}
Vi bastente caso, mas ambos foram resolvidos em atendimento privado

Avatar discord do usuario antoniofernandes

antoniofernandes

Ver Respostas

Utilizando as configurações citadas:

js
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
resolveu pora mim.
Porem essa configurações causou um probleminha pontuais de importações de outra libs qie tinha no projeto (não foram em todas)
onde esta imporando essas outras lib com
js
import as MinhaLib from "pacote"
e então bastou importar
js
import MinhaLib from "pacote"
OBS: so modifiquei essa importação nas lib que reclamaram, lembrando que ainda existem outras libs com import
as ... que não deram problema.

Avatar discord do usuario gabriel_efi

gabriel_efi

Ver Respostas

Olá, @antonioaem

Caso configure um split com repasse zero, receberá a seguinte mensagem de erro:

json
{
"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": "Um dos valores informados na configuração dos repasses é inválido, deve ser maior que zero.",
"propriedade": "split.config.split.repasses"
}
]
}

Esse é o único impedimento em relação à porcentagem, não pode ser 0.00, outros valores são aceitos.

Avatar discord do usuario igor_efi

igor_efi

Ver Respostas

Boa tarde, @.clsantos! Tudo bem?
As notificações de Pix recebido não possui o atributo status. Segue alguns exemplos de notificações:

json
// Pix recebido
{
"pix": [
{
"endToEndId": "E1803615022211340s08793XPJ",
"txid": "fc9a43k6ff384ryP5f41719",
"chave": "2c3c7441-b91e-4982-3c25-6105581e18ae",
"valor": "0.01",
"horario": "2020-12-21T13:40:34.000Z",
"infoPagador": "pagando o pix"
}
]
}

// Pix recebido com dados do pagador
{
"pix": [
{
"endToEndId": "E1803615022211340s08793XPJ",
"txid": "fc9a43k6ff384ryP5f41719",
"chave": "2c3c7441-b91e-4982-3c25-6105581e18ae",
"valor": "0.01",
"horario": "2020-12-21T13:40:34.000Z",
"infoPagador": "pagando o pix",
"gnExtras": {
"pagador": {
"nome": "GORBADOCK OLDBUCK",
"cpf": ".123.456-",
"codigoBanco":"00416968"
}
}
}
]
}
// Pix recebido com Split
{
"pix": [
{
"endToEndId": "E1803615022211340s08793XPJ",
"txid": "fc9a43k6ff384ryP5f41719",
"chave": "2c3c7441-b91e-4982-3c25-6105581e18ae",
"valor": "0.01",
"horario": "2020-12-21T13:40:34.000Z",
"infoPagador": "Teste",
"gnExtras": {
"split": {
"id": "f659e882b00440ef9f07538fb697a6b2",
"revisao": 0
}
}
}
]
}
// Pix recebido com tarifa informada
{
"pix": [
{
"endToEndId": "E1803615022211340s08793XPJ",
"txid": "fc9a43k6ff384ryP5f41719",
"chave": "2c3c7441-b91e-4982-3c25-6105581e18ae",
"valor": "0.10",
"horario": "2020-12-21T13:40:34.000Z",
"infoPagador": "pagando o pix",
"gnExtras": {
"tarifa": "0.01"
}
}
]
}

Avatar discord do usuario joaolucas_efi

joaolucas_efi

Ver Respostas

Boa tarde, @_diogomachado. Tudo bem?
1) O ideal é alterar para o novo sdk sdk-node-apis-efi, em NestJS será preciso algumas alterações, recentemente o @antoniofernandes fez essa mesma alteração, houveram algumas modificações à serem feitas. Uma delas foi incluir no tsconfig.json dentro do compilerOptions as seguinte opções

"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
, porém isso ocasionou em outras falhas. @antoniofernandes se puder fazer a gentileza de compartilhar conosco a forma com que resolveu essa situação, agradecemos bastante

2) Para receber valores através do Pix via API não há nenhuma solicitação a ser feita.

Caso tenha alguma dúvida basta nos perguntar para que possamos lhe auxiliar da maneira mais assertiva possível.

Avatar discord do usuario _diogomachado

_diogomachado

Ver Respostas

Oi, boa tarde, tenho duas dúvidas quanto a API pix:

1) Boa tarde, estou criando uma API com Nestjs e atualmente para criar o pix copia e cola eu só consegui fazer usando o import Gerencianet from 'gn-api-sdk-typescript', porém estou perto de lançar em produção e não sei se é a forma mais correta.

2) Pretendo lançar minha ideia em produção em breve, eu preciso fazer algo para começar a receber o Pix em produção (preencher formulário, fazer solicitação, etc)?

Obrigado!

Avatar discord do usuario guilherme_efi

guilherme_efi

Ver Respostas

Bom dia, @afviriato! Tudo bem?

1. Sim, você pode usar um cliente como o Postman para acessar a API. Inclusive, temos uma collection para o Postman que você pode usar: https://dev.efipay.com.br/docs/api-pix/credenciais/#collection-postman-api-pix

2. Exatamente, é a mesma chave Pix que você usa na criação da cobrança. Ou seja, você associa um webhook URL à chave, e então, quando criar a cobrança com essa chave, nossa API saberá para qual URL enviar as notificações.

3. O padrão do JSON de notificação segue as definições do Banco Central e, de fato, não possui um status. Mas, você pode considerar que, se recebeu o JSON com os parâmetros endToEndId e txid, e não tem o array devolucoes, isso indica que é a notificação de um pagamento, conforme o exemplo abaixo:

json
{
"pix": [
{
"endToEndId": "E1803615022211340s08793XPJ",
"txid": "fc9a43k6ff384ryP5f41719",
"chave": "2c3c7441-b91e-4982-3c25-6105581e18ae",
"valor": "0.01",
"horario": "2020-12-21T13:40:34.000Z",
"infoPagador": "pagando o pix"
}
]
}

Avatar discord do usuario guilhermecoelhoreal

guilhermecoelhoreal

Ver Respostas

Boa noite. Estou tentando implementer a API Pix no meu site com o meu conhecimento e ajuda do ChatGPT, mas está dando erro. Tenho o HTML, CSS, JS e PHP. Lembrando que não sou programador. Acho que estou perto de fazer funcionar. Alguém pode me ajudar?

Na pagina PHP o Access Token retorna corretamente, mas o pix copia e cola não. Está dando esse problema: Curl error: Empty reply from server

Avatar discord do usuario rubenskuhl

rubenskuhl

Ver Respostas

Se você conseguir fazer requisições HTTPS com certificado de CA privada para enviar e receber JSON, consegue.

Avatar discord do usuario yasmin_efi

yasmin_efi

Você pode sim mandar o cnpj, mas nesse caso, o nome do campo tambem é alterado! Segue um exemplo:

json
"repasses": [
{
"tipo": "porcentagem",
"valor": "15.00",
"favorecido": {
"cnpj": "12345325000100",
"conta": "1234567"
}
}
]

Avatar discord do usuario marshall0559

marshall0559

Ver Respostas

No caso a mudança eu faria aqui :

public function successful_webhook( $posted ) {
$pix = json_decode( $posted, true )['pix'];
// Percorre lista de notificações
$args = array(
'limit' => -1,
'orderby' => 'date',
'order' => 'DESC',
'meta_key' => '_gn_pix_txid',
'meta_compare' => '=',
'meta_value' => sanitize_text_field( $pix[0]['txid'] ),
);

// Busca pedidos
$orders = wc_get_orders( $args );

// Atualiza status
foreach ( $orders as $order ) {

if ( isset( $pix[0]['txid'] ) && $pix[0]['txid'] != '' && ( get_post_meta( $order->get_id(), '_gn_pix_txid', true ) == $pix[0]['txid'] ) ) {
add_post_meta( intval( $order->get_id() ), '_gn_pix_E2EID', $pix[0]['endToEndId'], true );

gn_log( $pix[0] );
if ( isset( $pix[0]['devolucoes'] ) && $pix[0]['devolucoes'][0]['status'] == 'DEVOLVIDO' ) {
$order->update_status( 'refund' );
} else {
$order->update_status( 'Paid' );
$order->payment_complete();
}
}
}

exit();
}

Avatar discord do usuario daviroquedev

daviroquedev

Ver Respostas

{"valor":"00.01","customerName":"DAVI","customerCPF":"06250102222","serviceDescription":"Corte de Cabelo"}

estou enviando esse json e ta retornando valor invalido

Avatar discord do usuario joaolucas_efi

joaolucas_efi

Boa tarde, @elielpsoares. Tente o seguinte:

js
efipay.pixCreateImmediateCharge({}, data)
.then((resposta) => {
console.log(resposta)
})
.catch((error) => {
console.log(error)
})

Avatar discord do usuario elielpsoares

elielpsoares

const data = {
calendario: {
expiracao: 3600,
},
devedor: {
cpf: req.body.cpf,
nome: req.body.nome,
},
valor: {
original: (Math.ceil(await value()) / 100).toFixed(2),
},
chave: ${process.env.EFI_PIX},
infoAdicionais: [
{
nome: "Compra de tickets em",
valor: "Acessu Livre (acessulivre.com.br)",
},
],
};

const efipay = new EfiPay(options);

try {
var payment = await efipay.pixCreateImmediateCharge({}, data);
} catch (err) {
console.error(Erro:${err},Erro description: ${payment});
ret.status(500).json({ msg: "Erro ao tentar gerar cobrança." });
}

Avatar discord do usuario guilherme_efi

guilherme_efi

Ver Respostas

Para receber o status de um Pix, você pode registrar uma webhook URL e as atualizações.
Em nossa documentação disponibilizamos um código que é responsável para captura o JSON das notificações.
https://dev.efipay.com.br/docs/api-pix/webhooks#exemplos-de-configurações-de-servidor

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 williandougllas

williandougllas

porém o pixListEvp em ambiente de teste ainda está gerando erro
node pixListEvp.js
{ nome: 'erro_interno_servidor', mensagem: 'Erro interno do servidor' }