Boa noite <@!691086570467622964> ! Você está obtendo esse retorno porque no header dessa requisição o parâmetro 'x-skip-mtls-checking' está setado como 'false' e o mTLS não está configurado no seu servidor.
Termos mais procurados:
Termos mais procurados:
Boa noite <@!691086570467622964> ! Você está obtendo esse retorno porque no header dessa requisição o parâmetro 'x-skip-mtls-checking' está setado como 'false' e o mTLS não está configurado no seu servidor.
Bom dia, <@!451559045543886860>. Te passei no privado alguns detalhes sobre o skip-mTLS em caso de hospedagens compartilhadas ou que possuem restrições com a inserção de nosso certificado.
Bom dia
Em um servidor compartilhado (hostgator no caso) incluindo x-skip-mtls-checking como true quais outras configurações são necessárias?
Ao cadastrar a URL do webhook estou recebendo:
{"evento":"teste_webhook","data_criacao":"2021-08-06T12:37:04.450Z"}
Você está usando um servidor compartilhado? Se sim, é necessário incluir o atributo x-skip-mtls-checking como true. Se você não estiver utilizando um servidor compartilhado, é necessário configurar seu servidor com a autenticação mtls como mostra na documentação https://dev.gerencianet.com.br/docs/api-pix-endpoints#section-webhooks
Boa tarde, não entendi muito bem, essa seria a configuração para recebimento das respotas do webhook ou para o cadastro do mesmo? Porque para o cadastro deve-se fazer uma requisição para PUT /v2/webhook/:chave informando o x-skip-mtls-checking": false, no cenário de hospedagem compartilhada. Posteriormente você vai precisar de uma rota para o recebimento das notificações do webhook, aí sim viria as configurações de request.socket.authorized.
Mais detalhes aqui: https://dev.gerencianet.com.br/docs/api-pix-endpoints#section-webhooks
Caso queira, também disponibilizamos SDK's com todos os endpoints da API Pix disponíveis: https://github.com/gerencianet
´´´app.put("/webhook", (request, response) => {
response.set({ "x-skip-mtls-checking": false })
response.header("x-skip-mtls-checking", false)
let data = request.body;
if (request.socket.authorized) {
response.status(200).end(JSON.stringify(data));
} else {
response.status(401).end(JSON.stringify({ erro: "Não autorizado", data: data }));
}
});´´´
$config = [
"certificado" => "./gerenciamento.pem",
"client_id" => "XXXXX",
"client_secret" => "XXXXX"
];
$autorizacao = $chaveiro["access_token"];
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api-pix.gerencianet.com.br/v2/webhook/XXXXX',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_SSLCERT => $config["certificado"], // Caminho do certificado
CURLOPT_SSLCERTPASSWD => $chaveiro["access_token"],
CURLOPT_POSTFIELDS =>'{
"webhookUrl": "https://XXXXX/webhook.php"
}',
CURLOPT_HTTPHEADER => array(
"Authorization: Bearer $autorizacao",
'x-client-cert-pem: ./gerenciamento.pem',
'x-skip-mtls-checking: false'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Segue o código:
// ENDPOINT COMPLETO
$endpoint = $this->baseUrl . '/oauth/token';
// HEADERS
$headers = [
'Content-type: application/json',
'x-skip-mtls-checking: true'
];
// CORPO DA REQUISIÇÃO
$request = [
'grant_type' => 'client_credentials',
'webhookUrl' => 'https://www.dominio.com.br/endpointdowebhook'
];
// CONFIGURAÇÃO DO CURL
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => $endpoint,
CURLOPT_USERPWD => $this->clientId . ':' . $this->clientSecret,
CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => json_encode($request),
CURLOPT_SSLCERT => $this->certificate,
CURLOPT_SSLCERTPASSWD => '',
CURLOPT_HTTPHEADER => $headers
]);
Oi <@!177276428675448832> tudo bem? 🙂
O campo aceita ambos os valores, true e false.
Adição do header x-skip-mtls-checking no endpoint PUT /v2/webhook/:chave para permitir o cadastro de servidores webhooks sem validação de mTLS durante o consumo.
Regras explicadas:
Se o parâmetro não for enviado, iremos validar mTLS;
Se o parâmetro for enviado e valor igual à true, não validaremos mTLS ;
Se o parâmetro for enviado e valor diferente de true, validaremos mTLS;
Salientamos que a Gerencianet continuara a fornecer a comunicação com mTLS, ou seja, na comunicação da notificação nada mudou. O POST entre Gerencianet e EC continua enviando o certificado.
Para mais detalhes verifique o roadmap no link https://gnetbr.com/rke4baDVyd
Passa o x-skip-mtls-checking como true
ah, o header:
Boa noite! Pessoal, eu já consegui fazer toda a parte de geração do PIX, testei em produção com o valor de 0,01 e consegui pagar no aplicativo do meu banco, já até aparece lá no painel de vendas da GerenciaNet e tudo.
Eu configurei o webhook corretamente usando a biblioteca PHP da GerenciaNet usando a opção [x-skip-mtls-checking = true] porque não vou usar autenticação mTLS devido a restrições do meu servidor.
Para a implementação do recebimento das notificações, usei o script PHP que o <@!775350441965649951> me mandou. Já tem o subdiretório /pix e tudo direitinho.
O problema é que não estou recebendo nada lá. Para verificar se ALGUMA COISA está chegando, fiz até um log caso chegasse qualquer coisa naquele endereço, mas nada...
Alguém sabe me dizer o que posso fazer para tentar entender o que está acontecendo?
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api-pix-h.gerencianet.com.br/v2/webhook/[email protected]',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_SSLCERT => OPTIONS["pix_cert"],
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_POSTFIELDS =>'{
"webhookUrl": "' . WEBHOOK_URL . '"
}',
CURLOPT_HTTPHEADER => array(
"authorization: $tokenType $token",
'x-client-cert-pem: {{X-Certificate-Pem}}',
'x-skip-mtls-checking: true'
),
));
Boa tarde, <@!477481308743008257>.
Exatamente conforme o Daniel mencionou. Atribuindo false para x-skip-mtls-checking fará co que exija o certificado em seu servidor.
Verifique também se em seu webhook está tratando o /pix no final da sua URL
$options['headers'] = array(
'x-skip-mtls-checking' => 'false',
);
Tentando fazer os testes aqui com 'x-skip-mtls-checking' => 'false', e continua dando 'bad request'
//Webhook update
$options['headers'] = array(
'x-skip-mtls-checking' => 'false',
);
try {
$api = Gerencianet::getInstance($options);
$params = ['chave' => '34646106000189'];
$body = ['webhookUrl' => 'https://olimppi.us/src/Includes/index.php?ignorar='];
// https://olimppi.us/webhook/pix.php?ignorar=
// https://olimppi.us/webhook/pix.php?ignorar=/pix
$pix = $api->pixConfigWebhook($params, $body);
echo json_encode($pix);
} catch (GerencianetException $e) {
print_r($e->code);
print_r($e->error);
print_r($e->errorDescription);
throw new \Error($e->error);
} catch (\Exception $e) {
throw new \Error($e->getMessage());
}
Pessoal, pra que serve mesmo esse 'x-skip-mtls-checking' => 'true', lá no update.php?