Module: FocusNfe::Webhook
- Defined in:
- lib/focus_nfe/webhook.rb
Overview
Recebimento de webhooks inbound: quando a Focus NFe chama a URL da aplicação ao mudar o status de um documento. Fachada stateless (sem token, sem HTTP) — apenas transforma o corpo cru recebido e autentica a chamada.
Class Method Summary collapse
-
.autenticado?(headers:, authorization:, authorization_header:) ⇒ Boolean
Verifica se a chamada é autêntica comparando o header recebido com o
authorizationconfigurado na criação do gatilho. -
.parse(raw_body, ref: nil) ⇒ FocusNfe::Modelos::Documento
Converte o corpo cru de um webhook inbound em um Modelos::Documento, o mesmo objeto devolvido por emissão/consulta.
Class Method Details
.autenticado?(headers:, authorization:, authorization_header:) ⇒ Boolean
Verifica se a chamada é autêntica comparando o header recebido com o
authorization configurado na criação do gatilho. A comparação é feita em
tempo constante para não vazar o segredo por timing.
36 37 38 39 |
# File 'lib/focus_nfe/webhook.rb', line 36 def autenticado?(headers:, authorization:, authorization_header:) recebido = valor_do_header(headers, ) !recebido.nil? && comparacao_segura?(recebido.to_s, .to_s) end |
.parse(raw_body, ref: nil) ⇒ FocusNfe::Modelos::Documento
Converte o corpo cru de um webhook inbound em um Modelos::Documento, o mesmo objeto devolvido por emissão/consulta.
21 22 23 24 25 26 |
# File 'lib/focus_nfe/webhook.rb', line 21 def parse(raw_body, ref: nil) dados = raw_body.is_a?(String) ? JSON.parse(raw_body) : raw_body Modelos::Documento.from_payload(dados, ref: ref) rescue JSON::ParserError => e raise Errors::WebhookError, "corpo do webhook não é JSON válido: #{e.}" end |