Termos mais procurados:
Termos mais procurados:
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 ?
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
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 '
';';
var_dump($e->getCode(), $e->getFile(), $e->getMessage());
echo '
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 '
';';
var_dump($e->getCode(), $e->getFile(), $e->getMessage());
echo '
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 ?
fiz a alteração abaixo, adicionei o cert e a key que baixei no momento da criação da aplicação
@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?
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...
Como que vai verificar o certificado, se o skip-mtls vai estar ativado? 🤔
Parâmetro ".headers['x-skip-mtls-checking']", deve ser igual a um dos valores predefinidos
Alguém saberia me dizer como resolver isso?
Troque para skip-mtls-check. Essa opção não desliga o mTLS, desliga a verificação que eles fazem.
Mas eu deixei bem claro a minha pergunta... "Posso utilizar do skip-mtls em produção?"
@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??
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...
Na vdd, o skip-mtls pode ser usado em produção tbm....
Sim, mas para usar o de homologação pode-se o usar o x-skip-mtls-checking
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));
}
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));
}
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 ?
@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