Sim, se você não passou o x-skip-mtls-check, deveria falhar na configuração do webhook.
O que você pode consultar que pode trazer uma luz é o log do litespeed...
Termos mais procurados:
Termos mais procurados:
Sim, se você não passou o x-skip-mtls-check, deveria falhar na configuração do webhook.
O que você pode consultar que pode trazer uma luz é o log do litespeed...
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
Além de criar um servidor na OCI, durante os testes você pode utilizar a opção skip-mtls e registrar uma URL do https://webhook.site/, por exemplo.