
Boa tarde, a respeito do ticket criado por vocês sobre atualização do certificado.
Devo apenas atualizar o arquivo https://pix.gerencianet.com.br/webhooks/chain-pix-prod.crt em meu servidor?
Já posso fazer isso agora? Ou apenas 01/11?
Termos mais procurados:
Boa tarde, a respeito do ticket criado por vocês sobre atualização do certificado.
Devo apenas atualizar o arquivo https://pix.gerencianet.com.br/webhooks/chain-pix-prod.crt em meu servidor?
Já posso fazer isso agora? Ou apenas 01/11?
Bom dia <@!327200217877446667> tudo bem? 🙂
Via webhook não é possível. Atualmente só são disparadas as callbacks para o webhook nos casos de:
Bom dia, é possível saber pela API/webhook se um Pix enviado pela API foi estornado? Temos tido alguns casos em que logo após enviar um Pix pela API o mesmo é estornado automaticamente (o estorno não é feito pela pessoa que recebeu, deve ser um estorno automático). Isso tem acontecido algumas vezes por semana.
Beleza! Tudo bem? <@!795645731385901076>
Obrigado pela ajuda, segue:
const express = require("express");
const app = express();
const { WebhookClient } = require("dialogflow-fulfillment");
const bodyParser = require("body-parser");
const mysql = require ('mysql');
var logger = require('morgan');
////////////////// HTTPS
const fs = require("fs");
const https = require("https");
const options = {
key: fs.readFileSync("key.pem"),
cert: fs.readFileSync("cert.crt"),
ca: fs.readFileSync("chain-pix-prod.crt"),
minVersion: "TLSv1.2",
requestCert: true,
rejectUnauthorized: false
};
///////////////// HTTPS (FIM)
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(express.static("public"));
////////////////// GERENCIANET (PIX)
app.post("/gerencianet", (request, response) => {
console.log('Entrou gerencia-net');
response.status(200).end();
// Verifica se a requisição que chegou nesse endpoint foi autorizada
if (request.socket.authorized) {
response.status(200).end();
} else {
response.status(401).end();
}
});
// Endpoind para recepção do webhook tratando o /pix
app.post("/gerencianet/pix", (request, response) => {
response.status(200).end();
console.log('Entrou gerencia-net');
if (request.socket.authorized){
var body = request.body;
console.log(body);
response.status(200).end();
}else{
response.status(401).end();
}
});
//////////////////GERENCIANET - FIM(PIX)
//////////////////////////// HTTPS
https.createServer(options, app).listen(8000);
console.log('Servido NODE (HTTPS) na Porta: 8000!');
/////////////////////////// HTTPS
Boa noite, pessoal. Sobre o retorno pelo webhook do pix enviado (POST /v2/pix), ele ocorre apenas uma vez? Pergunto porque parece haver uma sequência natural das situações: EM_PROCESSAMENTO >> REALIZADO/NÃO_REALIZADO.
bom dia!
a respeito de configurar o certificado CA, é recomendado ter uma API exclusiva para receber os webhooks PIX do Gerência Net? ou tudo bem utilizar uma API de um App existente para receber os webhooks?
Boa tarde, <@!424210215014105088>. Na configuração do virtual host para tratativa do webhook, você deve informar o certificado disponível nos links https://pix.gerencianet.com.br/webhooks/chain-pix-prod.crt(Produção) ou https://pix.gerencianet.com.br/webhooks/chain-pix-sandbox.crt(Homologação). O arquivo .p12 que você baixa em sua conta Grencianet é para realizar as requisições na API Pix
estou tendo o erro "A autenticação de TLS mútuo não está configurada na URL informada" para receber webhooks, quando eu uso informo o arquivo .p12, eu devo também configurar chain-pix-sandbox.crt? Ou só com o arquivo .p12 já deveria funcionar?
Bom dia, <@!330406276972412928>. Verifica por favor se você está tratando o /pix que é acrescido ao enviarmos a notificação via POST /pix.
Exemplo: Você configurou o webhook https://gerencianet.com/webhook, a notificação vai para https://gerencianet.com/webhook/pix
Um exemplo de uma aplicação em node fazendo esta tratativa:
Boa tarde pessoal, tive um probleminha recente referente a configuração do Pix
Esse foi o body enviado para a rota /v2/gn/config
No meu glassfish-web.xml eu usando assim: CN=gn-pix-webhooks, OU=Infraestrutura, O=Gerencianet SA, L=Ouro Preto, ST=Minas Gerais, C=BR, porém existem 3 opções dentro do certificado chain-pix-prod.crt então está me deixando confuso qual devo informar.
Duas alternativas:
1) Não usar webhook. Você pode fazer polling das transações pelas quais você está esperando pagamento. Como 96% das cobranças Pix são pagas em 1 minuto, sobram poucas para checar mais tarde.
2) Usar um serviço que faça o mTLS e repasse para você as conexões que validarem. Pode ser o API Gateway da AWS(pago), pode ser o pix.ae(gratuito).
Salve pessoal, como vocês vão? Eu estou querendo criar o webhook do pix, e esbarrei no padrão mTLS. Estou criando uma aplicação no/low code e não tenho a intenção de ter domínio próprio por enquanto. Como eu poderia fazer isso sem um servidor dedicado?
const express = require("express");
const fs = require("fs");
const https = require("https");
const url = require('url');
const bodyParser = require("body-parser");
let FormData = require('form-data');
const axios = require("axios");
var logger = require('morgan');
const httpsOptions = {
cert: fs.readFileSync("fullchain.pem"), // Certificado fullchain do dominio
key: fs.readFileSync("privkey.pem"), // Chave privada
ca: fs.readFileSync("chain-pix-prod.crt"), // Certificado Gerencianet
minVersion: "TLSv1.2",
requestCert: true,
rejectUnauthorized: false, //Mantenha como false para que os demais endpoints da API não rejeitem requisições sem MTLS
};
const app = express();
const httpsServer = https.createServer(httpsOptions, app);
//const PORT = 443;
const PORT = 3000;
app.use(logger('dev')); // Comente essa linha caso não queira que seja exibido o log do servidor no seu console
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: false
}));
app.post("/webhook", (request, response) => {
if (request.socket.authorized) {
response.status(200).end();
})
.catch(function (error) {
//console.log
});
} else {
response.status(401).end();
//console.log("não autorizado!");
}
});
// Endpoind para recepção do webhook tratando o /pix
app.post("/webhook/pix", (request, response) => {
if (request.socket.authorized) {
response.status(200).end();
} else {
response.status(401).end();
}
});
httpsServer.listen(PORT, () =>
console.log(listen running on port ${PORT})
);
Algo assim:
Pessoal, alguém já usou $ssl_client_s_dn no nginx para confirmar que o acionamento do Webhook está vindo do gn-webhook-pix ? Como ficou a sintaxe ?
@jessica_efi server {
server_name api.compreplanos.com.br;
root /var/www/compreplanos/api/public;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_read_timeout 300;
}
location ~ /\.ht {
deny all;
}
location /webhook {
if ($ssl_client_verify != SUCCESS) {
return 403;
}
rewrite ^(.)$ /webhook/pix;
}
location /webhook/pix {
if ($ssl_client_verify != SUCCESS) {
return 403;
}
rewrite ^(.)$ /webhook/pix;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/api.compreplanos.com.br/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/api.compreplanos.com.br/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
ssl_client_certificate /var/www/compreplanos/api/storage/certificados/gerencianet/chain-pix-prod.crt;
ssl_verify_client optional;
ssl_verify_depth 3;
} server {
listen 80;
listen [::]:80;
server_name api.compreplanos.com.br;
} server {
if ($host = api.compreplanos.com.br) {
return 301 https://$host$request_uri;
} # managed by Certbot
server_name api.compreplanos.com.br;
listen 80;
return 404; # managed by Certbot
}
@jessica_efi server {
server_name apivenda.unionadm.com.br;
root /var/www/unionadm/apivenda/public;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_read_timeout 300;
}
location ~ /\.ht {
deny all;
}
location /webhook {
if ($ssl_client_verify != SUCCESS) {
return 403;
}
rewrite ^(.)$ /webhook/pix;
}
location /webhook/pix {
if ($ssl_client_verify != SUCCESS) {
return 403;
}
rewrite ^(.)$ /webhook/pix;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/apivenda.unionadm.com.br/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/apivenda.unionadm.com.br/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
ssl_client_certificate /var/www/unionadm/apivenda/storage/certificados/gerencianet/chain-pix-prod.crt;
ssl_verify_client optional;
ssl_verify_depth 3;
} server {
listen 80;
listen [::]:80;
server_name apivenda.unionadm.com.br;
}server {
if ($host = apivenda.unionadm.com.br) {
return 301 https://$host$request_uri;
} # managed by Certbot
server_name apivenda.unionadm.com.br;
listen 80;
return 404; # managed by Certbot
}
$params = ['chave' => '[email protected]'];
$body = ['webhookUrl' => 'https://apivenda.unionadm.com.br/api/aplicativo/gateway/notificacao/gerencianet/pix/webhook'];