Histórico de mensagens sobre js em pix

EXIBINDO CONVERSAS RECENTES:

Texto: js
Canal: pix
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ão precisos 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' }