Histórico

EXIBINDO CONVERSAS RECENTES:

Texto: Skip-mTLS
# devs
Avatar discord do usuario capitaoredhawk

capitaoredhawk

Ver RespostasVer no Discord

eu mudei meu x-skip-mtls-checking para true no postman... isso vai deixar ele sempre como true quando eu estiver usando em produção ?

# devs
Avatar discord do usuario igor_efi

igor_efi

Ver no Discord

O risco seria que qualquer pessoa poderá realizar requisições em sua URL, porem existem maneiras de você tratar isso também.
Recomendo que você de uma olhadinha em nossa documentação: https://dev.efipay.com.br/docs/api-pix/webhooks
Dentro desta pagina falamos mais sobre o Skip-mTLS e também sobre o hmac

# 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 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 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 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

Troque para skip-mtls-check. Essa opção não desliga o mTLS, desliga a verificação que eles fazem.

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

diogo.f.m.7

Ver RespostasVer no Discord

Mas eu deixei bem claro a minha pergunta... "Posso utilizar do skip-mtls em produção?"

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

diogo.f.m.7

Ver no Discord

@igor_efi @elaine2983, podem dar uma orientação sobre esse assunto?? Em produção, usando hospedagem compartilhada, posso usar o skip-mtls, e validar o webhook pelo IP de origem??

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

diogo.f.m.7

Ver RespostasVer no Discord

Não não, só olhar a doc deles... Eles deixam bem claro que em hospedagem compartilhada pode usar o skip-mtls, e fazer a validação do webhook via IP de origem da request...

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

diogo.f.m.7

Ver RespostasVer no Discord

Na vdd, o skip-mtls pode ser usado em produção tbm....

# pix
Avatar discord do usuario rubenskuhl

rubenskuhl

Ver RespostasVer no Discord

Sim, mas para usar o de homologação pode-se o usar o x-skip-mtls-checking

# pix
Avatar discord do usuario .thomasjackson

.thomasjackson

Ver no Discord

public async Task SaveWebhookUrl(Guid chavePix, string webhoookUrl)
{
dynamic efi = new EfiPay(
appSettings.Payment.ClientId,
appSettings.Payment.ClientSecret,
appSettings.Payment.Sandbox,
appSettings.Payment.Certificate
);

var headers = "{\"x-skip-mtls-checking\": \"true\"}";

var param = new
{
chave = chavePix.ToString()
};

var body = new
{
webhookUrl = webhoookUrl
};
var result = Task.FromResult(efi.PixConfigWebhook(param, body, headers));
await Task.FromResult(efi.PixConfigWebhook(param, body, headers));
}

# pix
Avatar discord do usuario .thomasjackson

.thomasjackson

Ver RespostasVer no Discord

ok, eu fiz essa implementacao
public async Task SaveWebhookUrl(Guid chavePix, string webhoookUrl)
{
dynamic efi = new EfiPay(
appSettings.Payment.ClientId,
appSettings.Payment.ClientSecret,
appSettings.Payment.Sandbox,
appSettings.Payment.Certificate
);

var headers = "{\"x-skip-mtls-checking\": \"true\"}";

var param = new
{
chave = chavePix.ToString()
};

var body = new
{
webhookUrl = webhoookUrl
};

await Task.FromResult(efi.PixConfigWebhook(param, body, headers));
}

# pix
Avatar discord do usuario .thomasjackson

.thomasjackson

Ver RespostasVer no Discord

Bom dia Joao, fiz um cadastro de webhookUlr em homolog mas a api retornou 401 nao autorizado.
Estou usando .net e adicionei o header conforme no github um parametro x-skip-mtls-checking: true
Esta correto o que eu fiz ?

# pix
Avatar discord do usuario viniciusfebasse_37973

viniciusfebasse_37973

Ver RespostasVer no Discord

@joaolucas_efi e @diogo.f.m.7
Estou recebendo as notificações, mas o POST está vindo vazio

Request.POST:

Sabem o que pode ser?

Configurei o webhook com x-skip-mtls-checking = true