Histórico

EXIBINDO CONVERSAS RECENTES:

Texto: mtls
# pix
Avatar discord do usuario guilherme_efi

guilherme_efi

Ver RespostasVer no Discord

Compreendo, @alissonmaciel_32335. Sempre é bom receber feedback.
Acredito que esta dificuldade esteja relacionada às regras estabelecidas pelo Banco Central que devem ser seguidas na API Pix, especialmente com relação à configuração do mTLS e à adição do /pix no final da URL.
No entanto, uma vez configurado corretamente, têm-se o benefício da notificação instantânea e da segurança.

# pix
Avatar discord do usuario alissonmaciel_32335

alissonmaciel_32335

Ver no Discord

Meu Webhook: public function webhook() {
$body = '{
"webhookUrl": "https://julioerp.agenciaweblab.com.br/webhook.php"
}';
try {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->config['rotas'] . '/v2/webhook/' . $this->config['chave_pix']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($ch, CURLOPT_SSLCERT, $this->config["certificado"]);
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, '');
$headers = array();
$headers[] = 'Authorization: Basic ' . $this->access_token;
$headers[] = 'X-Skip-Mtls-Checking: true';
$headers[] = 'Content-Type: application/json';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);

echo '

';
var_dump($this->config['chave_pix'], $this->config['client_id'], $this->config['client_secret'], $result);
echo '
';

if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
return $result;
} catch (Exception $e) {
echo '
';
var_dump($e->getCode(), $e->getFile(), $e->getMessage());
echo '
';
}
}

# pix
Avatar discord do usuario alissonmaciel_32335

alissonmaciel_32335

Ver RespostasVer no Discord

Estou executando este método:
public function webhook() {
$body = '{
"webhookUrl": "https://julioerp.agenciaweblab.com.br/webhook.php"
}';
try {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->config['rotas'] . '/v2/webhook/' . $this->config['chave_pix']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($ch, CURLOPT_SSLCERT, $this->config["certificado"]);
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, '');
$headers = array();
$headers[] = 'Authorization: Bearer ' . $this->access_token;
$headers[] = 'X-Skip-Mtls-Checking: true';
$headers[] = 'Content-Type: application/x-www-form-urlencoded';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);

echo '

';
var_dump($this->config['chave_pix'], $result);
echo '
';

if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
return $result;
} catch (Exception $e) {
echo '
';
var_dump($e->getCode(), $e->getFile(), $e->getMessage());
echo '
';
}
}

# pix
Avatar discord do usuario guilherme_efi

guilherme_efi

Ver RespostasVer no Discord

A ideia é esta mesmo, @alissonmaciel_32335. Você irá utilizar este endpoint PUT/v2/webhook/:chave para associar sua URL de notificação a sua chave Pix. E então as cobranças Pix que tiverem um txid e sua chave Pix, nós iremos enviar a notificação para a URL registrada. Essa configuração pode ser feita uma única vez.

Pontuando que para registrar sua URL de notificação, é importante que seu servidor tenha algumas configurações para atender a comunicação com mTLS para segurança da sua aplicação. Você encontra mais detalhes em nossa documentação e nos vídeos a seguir: https://dev.gerencianet.com.br/docs/api-pix-endpoints#webhooks
https://youtu.be/hdyUHzNwVLY?list=PLRqvcUTH2VsWufBmzOdTVeLEOTGrPNoiu
https://youtu.be/XB9bcZFTV3M?list=PLRqvcUTH2VsWufBmzOdTVeLEOTGrPNoiu

# pix
Avatar discord do usuario geisonderrico

geisonderrico

Ver no Discord

Olá pessoal, boa noite. Tudo bem ?

Estamos tentando fazer a implementação do Webhook usando o Skip-mTLS. Fiz o cadastro da chave usando o atributo x-skip-mtls-checking como true, para poder testar.

A chave foi cadastrada com sucesso.

Porém, eu vi que o arquivo de exemplo pra tratar as respostas via WebHooks funciona apenas com mTLS. Como funciona no caso do skip ligado ?

# pix
Avatar discord do usuario rubenskuhl

rubenskuhl

Ver RespostasVer no Discord

Para a parte de webhook os únicos clouds com suporte a mTLS com CA Privada que localizei foram AWS e OCI. Então usar o OCI pode te ajudar no ponto futuro que mencionei, webhook. Mas não precisa usar o API Gateway se não quiser, sendo VM você é root e pode fazer a configuração que quiser, incluindo as requeridas para validar se é a Efí mesmo te notificando.

# pix
Avatar discord do usuario rubenskuhl

rubenskuhl

Ver RespostasVer no Discord

Há algumas coisas chatinhas na API Pix padrão como o mTLS... mas que fazem parte do padrão do Banco Central, então implementar seguindo esse padrão também facilita a que você depois permaneça na Efí por escolha e não por ter custo de fazer uma nova integração.

# pix
Avatar discord do usuario thiagorobles

thiagorobles

Ver RespostasVer no Discord

fiz a alteração abaixo, adicionei o cert e a key que baixei no momento da criação da aplicação

private instance = axios.create({
httpsAgent: new https.Agent({
cert: Buffer.from(process.env.EFI_CERT, 'base64'),
key: Buffer.from(process.env.EFI_KEY, 'base64'),
ca: Buffer.from(process.env.CHAIN_PIX_PROD_CRT_BASE64, 'base64'),
requestCert: true,
rejectUnauthorized: true,
}),
headers: {
'x-skip-mtls-checking': true,
},
});

Agora o erro que recebo é unable to get local issuer certificate

parece ser algo relacionado ao SSL, porem está configurado corretamente pelo ACM do heroku

essas variaveis de ambiente estao configuradas pelo heroku, fiz o encode para base64, loguei o resultado do Buffer.from, e está logando os certificados corretamente (cert, key e ca)

# pix
Avatar discord do usuario thiagorobles

thiagorobles

Ver RespostasVer no Discord

@rubenskuhl obrigado pelo retorno, eu tentei integrar no meu Controller (uso nestjs) na minha API que está no heroku, aqui está o código:

import {
ClassSerializerInterceptor,
Controller,
HttpCode,
HttpStatus,
Logger,
Post,
Req,
UseInterceptors,
} from '@nestjs/common';
import { LoggerInterceptor } from '@src/common/logger/logger-interceptor';
import configuration from '@src/config/configuration';
import axios from 'axios';
import { Request } from 'express';
import as https from 'https';

const { httpsOptions } = configuration();
@Controller('efi-gerencianet')
@UseInterceptors(ClassSerializerInterceptor, LoggerInterceptor)
export class EfiGerencianetController {
private readonly logger = new Logger(EfiGerencianetController.name);

private instance = axios.create({
httpsAgent: new https.Agent({
ca: httpsOptions.ca,
requestCert: true,
rejectUnauthorized: true,
}),
headers: {
'x-skip-mtls-checking': true,
},
});

@Post('webhook/pix')
@HttpCode(HttpStatus.OK)
handlePixCallback(@Req() req: Request) {
const body = req.body;

this.logger.log(Received callback from Gerencianet);
this.logger.debug(body);
return body;
}

@Post('configure-webhook')
async configureWebhook() {
const url =
'https://api-pix.gerencianet.com.br/v2/webhook/4114c4e9-202c-4979-8534-34a4e5a29ad0';
const data = {
webhookUrl: '',
};

try {
const response = await this.instance.put(url, data);
this.logger.log(
Webhook configured successfully. Status code: ${response.status},
);
return response.data;
} catch (error) {
this.logger.error(Error configuring webhook: ${error.message});
throw new Error(Error configuring webhook: ${error.message});
}
}
}


subi pra produção, e ao chamar o endpoint recebo o erro: Error: Error configuring webhook: read ECONNRESET

Para SSL estou usando o heroku ACM (auto managed).


Sabem o que posso estar fazendo errado?

# pix
Avatar discord do usuario rubenskuhl

rubenskuhl

Ver RespostasVer no Discord

Um certificado CA de mTLS tipicamente não se importa, e sim se usa ele numa configuração.

# pix
Avatar discord do usuario jessica_efi

jessica_efi

Ver RespostasVer no Discord

Isso mesmo @andersonhsilva ! Esse serviço está protegido por uma camada de autenticação mTLS. Os callbacks são enviados pela Efí via POST url-webhook-cadastrada​/pix quando há uma alteração no status do Pix.

# pix
Avatar discord do usuario rubenskuhl

rubenskuhl

Ver no Discord

Mesmo na devolução, o webhook vai dar a nova situação daquele Pix.
O que você precisa validar é (1) certificado da Efí no mTLS (2) que a chave Pix é uma para a qual você emitiu cobrança naquele txid

# pix
Avatar discord do usuario diogo.f.m.7

diogo.f.m.7

Ver RespostasVer no Discord

E na real não é bem assim né...
No início, não existia esse Skip... Acho q eles ficaram preocupados, pq muitos PSPs fora do padrão, não são punidos, e acabam "roubando clientes" deles, já que não exigem o mtls...

# pix
Avatar discord do usuario diogo.f.m.7

diogo.f.m.7

Ver RespostasVer no Discord

Eu agr concordo com o @rubenskuhl, mas acho q a EFI vai ter muitoooo problema com esse skip-mtls...

Ontem tivemos um debate bem interessante, hoje vi q a EFI se exime de culpa, mas no final, se der BO, eles vão acabar punidos pelo BC... Em hlg terno Skip ok, mas em prod abre margem para problemas...

Maaaaaasssss, como isso é Brasil, da msm forma q tem N PSPs com api fora do padrão, e eu diria que vai continuar assim .. nada vai acontecer...

# pix
Avatar discord do usuario f1ed7e55d61c2f1af0ae4a2814_43203

f1ed7e55d61c2f1af0ae4a2814_43203

Ver RespostasVer no Discord

Como que vai verificar o certificado, se o skip-mtls vai estar ativado? 🤔

# pix
Avatar discord do usuario f1ed7e55d61c2f1af0ae4a2814_43203

f1ed7e55d61c2f1af0ae4a2814_43203

Ver no Discord

Parâmetro ".headers['x-skip-mtls-checking']", deve ser igual a um dos valores predefinidos

Alguém saberia me dizer como resolver isso?

imagem enviada na mensagem pelo usuario f1ed7e55d61c2f1af0ae4a2814_43203

# pix
Avatar discord do usuario rubenskuhl

rubenskuhl

Ver RespostasVer no Discord

Todos os concorrentes da Efí que analisamos que seguiam a API Pix padrão do BACEN tem webhook com mTLS... vários inclusive que requerem certificado ICP-Brasil no webhook, o que é tremendamente não prático. A Efí emite os certificados com CA dela o que é bem simples de usar.

# pix
Avatar discord do usuario geovannisc

geovannisc

Ver RespostasVer no Discord

Vou utilizar a EFI por conta do SDK e documentação que é maravilhosa, mas a questão do WEBHOOK do pix é realmente uma pedra no sapato, não tem nenhum concorrente da EFI que eu tenha conhecimento que utilize mtls, pra implementar isso no meu sistema eu vou ter que mudar toda a estrutura do meu servidor aumento muito o nivel de complexidade para simplesmente receber a confirmação do recebimento. Pensei varias vezes em mudar para outra plataforma por causa disso. Para não ter que fazer a configuração do mtls estou pensando em validar de outra maneira atraves das chamadas mesmo. Assim que o usuario atualizar a tela ou entrar fazer a chamada para verificar. Isso deixa a desejar muito.