Histórico

EXIBINDO CONVERSAS RECENTES:

Texto: webhook\'
# 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 andrebarbosa_dev

andrebarbosa_dev

Ver RespostasVer no Discord

"erro": "Método 'pixGetWebhook' solicitado inexistente"

Na nova sdk qual é o metodo que chama? ao inves do getInstance?

# pix
Avatar discord do usuario ryzenbergsjc

ryzenbergsjc

Ver RespostasVer no Discord

a unica notificação que recebo é
2024-03-28 21:11:17,712 - root - INFO - Webhook PIX recebido: {'evento': 'teste_webhook', 'data_criacao': '2024-03-28T20:11:17.434Z'}

# dúvidas
Avatar discord do usuario uxpedro

uxpedro

Ver RespostasVer no Discord

Chego a receber o objeto { evento: 'teste_webhook', data_criacao: '2024-02-11T12:05:58.668Z' } na url que forneço

# pix
Avatar discord do usuario m.h1604

m.h1604

Ver RespostasVer no Discord

Vou mostrar como estou fazendo.

Parâmetros passados para criação do webhook:

$this->options["headers"] = [
"x-skip-mtls-checking" => "true",
];

$params = [
"chave" => $this->pix_key
];

$body = [
"webhookUrl" => "https://contratos.onlinedobrasil.com/webhook?ignorar="
];

Rota que está recebendo as notificações:
Routes::map('/webhook', function() {
if (isset($_POST)):
file_put_contents(__DIR__ . "/request.json", json_encode($_POST));
endif;

wp_send_json(200);
});

Estou salvando em um arquivo teste para ver o retorno das notificações, mas a única coisa que é gravado é um json vazio.

# dúvidas
Avatar discord do usuario adilalima

adilalima

Ver no Discord

Opa, tudo ótimo e contigo?
Então, mesmo seguindo esse guia e fazendo (supostamente) igual acabo recebendo o mesmo erro de código 400 e de descrição "A autenticação de TLS mútuo não está configurada na URL informada":

public function config_webhook(array $data): void
{
$webhook = EfiPay::getInstance([
'client_id' => CONF_EFI_SANDBOX ? CONF_EFI_DEV_CLIENT_ID : CONF_EFI_CLIENT_ID,
'client_secret' => CONF_EFI_SANDBOX ? CONF_EFI_DEV_CLIENT_SECRET : CONF_EFI_CLIENT_SECRET,
'certificate' => CONF_EFI_SANDBOX ? CONF_EFI_DEV_PIX_CERTIFICATE : CONF_EFI_PIX_CERTIFICATE,
'x-skip-mtls-checking' => "true",
]);

$webhook = $webhook->pixConfigWebhook(
['chave' => CONF_EFI_PIX_KEY],
['webhookUrl' => CONF_EFI_PIX_WEBHOOK_URL]
);

$this->call(code: 200)->back(['data' => $data, 'headers' => $this->headers, 'webhook' => $webhook]);
}

É um comportamento esperado?

# pix
Avatar discord do usuario davidsn4656

davidsn4656

Ver no Discord

Esta chegando na aplicação mais está dando erro 0|index | { evento: 'teste_webhook', data_criacao: '2023-11-26T22:56:53.510Z' }
0|index | { evento: 'teste_webhook', data_criacao: '2023-11-26T22:57:48.578Z' } {
"nome": "webhook_invalido",
"mensagem": "A autenticação de TLS mútuo não está configurada na URL informada"
}

# pix
Avatar discord do usuario davidsn4656

davidsn4656

Ver no Discord

|index | { evento: 'teste_webhook', data_criacao: '2023-11-26T22:40:42.153Z' }
0|index | { evento: 'teste_webhook', data_criacao: '2023-11-26T22:40:47.356Z' }

# pix
Avatar discord do usuario vitorsantos_

vitorsantos_

Ver no Discord

Boa noite, ao tentar cadastrar o webhook esta dando erro invalid_client, ja estou passando o auth token e certifiicado e tenho a rota 'payments/efi/webhook' no bacj

# pix
Avatar discord do usuario vinicius_cs

vinicius_cs

Ver RespostasVer no Discord

É possível testar Webhook em homolog?

Estou desenvolvendo em Laravel, fiz a rota com o /webhook, no entanto ao executar:
https://pix-h.api.efipay.com.br/v2/webhook/:chave

É retornado:
{
"nome": "webhook_invalido",
"mensagem": "A URL informada respondeu com o código HTTP 419"
}

No WebhookController eu coloquei apenas isso para testar:

php
public function handle(Request $request)
{
$payload = $request->all();

return response()->json(['status' => 200]);
}

Nas rotas coloquei assim:
php
Route::prefix('webhook')->group(function () {
Route::get('/', [WebhookController::class, 'handle'])->name('webhook.handle');
Route::post('/', [WebhookController::class, 'handle'])->name('webhook.handle');
Route::put('/', [WebhookController::class, 'handle'])->name('webhook.handle');
});

# pix
Avatar discord do usuario andremenda

andremenda

Ver no Discord

inclusive ao criar o webhoook foi recebido no endpoint o seguinte: { evento: 'teste_webhook', data_criacao: '2023-10-13T22:46:50.733Z' }

# devs
Avatar discord do usuario guilherme_efi

guilherme_efi

Ver RespostasVer no Discord

Bom dia, @israelcosta.
Acredito então, como não vai configurar no Apache ou Nginx o mTLS, você deverá registrar sua webhook URL com o atributo x-skip-mtls-checking=true
Veja mais detalhes e pontos de atenção em nossa documentação: https://dev.gerencianet.com.br/docs/api-pix-endpoints#skip-mtls

Segundo ponto, os callbacks são enviados pela Efí via POST ​/pix quando há uma alteração no status do Pix. Então nestas rotas você deve esperar Route:post.

Por último, adicione também a rota POST '/webhook', pois é feito uma requisição de teste nela também.

# devs
Avatar discord do usuario israelcosta

israelcosta

Ver RespostasVer no Discord

Quem já trabalhou com Laravel sabe dizer se funciona dessa maneira ao invés de suar Alias?


use Illuminate\Http\RedirectResponse;

// Redireciona /webhook/pix/ para /webhook
Route::get('/webhook/pix/', function () {
return new RedirectResponse('/webhook');
});

// Redireciona /webhook/pix para /webhook
Route::get('/webhook/pix', function () {
return new RedirectResponse('/webhook');
});