Pular para o conteúdo principal

Tratamento de erros

Todos os erros de API do SDK derivam de Nfe\Exception\ApiErrorException (que estende RuntimeException), então você pode capturar a família inteira com um único catch. Esta página descreve a hierarquia, os códigos HTTP mapeados, padrões de catch por tipo, a validação client-side e os erros de rede.

A hierarquia de erros

Todas as classes vivem em Nfe\Exception\:

ClasseCódigo HTTPQuando ocorre
ApiErrorExceptionBase de toda a família.
AuthenticationException401Chave de API ausente ou inválida.
AuthorizationException403Chave válida, mas sem permissão/plano para o recurso.
InvalidRequestException400 / 422Requisição malformada, reprovada na validação — ou validação local (síncrona, antes do HTTP).
NotFoundException404Recurso não existe.
RateLimitException429Excesso de requisições.
ServerException5xxFalha no servidor da API.
ApiConnectionExceptionFalha de rede/cURL (DNS, conexão recusada, TLS, timeout).
SignatureVerificationExceptionAssinatura de webhook reprovada.
Não há type guards — use instanceof

O SDK não expõe funções isXxx(). Capture as subclasses específicas primeiro e ApiErrorException como rede de segurança.

Contexto carregado pelos erros HTTP

Erros derivados de uma resposta HTTP carregam contexto público para diagnóstico: ->statusCode, ->responseBody, ->responseHeaders e ->errorCode, além do getMessage() usual.

use Nfe\Exception\ApiErrorException;

try {
$nfe->serviceInvoices->retrieve($companyId, $invoiceId);
} catch (ApiErrorException $e) {
$e->statusCode; // ex.: 404
$e->errorCode; // código de erro legível por máquina, quando presente
$e->getMessage(); // mensagem de diagnóstico
}
Cuidado ao logar responseBody/responseHeaders

O corpo e os headers brutos podem conter dados sensíveis (PII do payload, detalhes da conta). Prefira logar statusCode + errorCode + getMessage() e reserve o corpo bruto para depuração pontual.

Padrões de catch por tipo

Capture do mais específico para o mais genérico:

use Nfe\Exception\ApiConnectionException;
use Nfe\Exception\ApiErrorException;
use Nfe\Exception\AuthenticationException;
use Nfe\Exception\AuthorizationException;
use Nfe\Exception\InvalidRequestException;
use Nfe\Exception\RateLimitException;
use Nfe\Exception\ServerException;

try {
$result = $nfe->serviceInvoices->create($companyId, $payload);
} catch (AuthenticationException $e) {
// 401 — revise a chave de API.
throw $e;
} catch (AuthorizationException $e) {
// 403 — a chave não tem permissão/plano para este recurso.
throw $e;
} catch (InvalidRequestException $e) {
// 400/422 ou validação local — corrija o payload.
error_log("Requisição inválida: {$e->getMessage()}");
} catch (RateLimitException $e) {
// 429 — aguarde antes de tentar de novo (o SDK já retentou com backoff).
throw $e;
} catch (ServerException $e) {
// 5xx — falha do lado do servidor; reportar/retentar com backoff.
throw $e;
} catch (ApiConnectionException $e) {
// Falha de rede (DNS, conexão recusada, TLS, timeout).
throw $e;
} catch (ApiErrorException $e) {
// Rede de segurança para qualquer erro do SDK.
error_log("[{$e->errorCode}] HTTP {$e->statusCode}: {$e->getMessage()}");
throw $e;
}

Validação client-side (fail-fast)

Validações client-side (id de empresa vazio, chave de acesso com tamanho errado, CEP/UF inválidos, texto de carta de correção vazio) lançam InvalidRequestException antes de qualquer requisição HTTP:

use Nfe\Exception\InvalidRequestException;

try {
$nfe->serviceInvoices->retrieve('', 'abc');
} catch (InvalidRequestException $e) {
// Lançada de forma síncrona, sem rede. $e->statusCode é null aqui.
error_log($e->getMessage());
}
Sem statusCode na validação local

Por não vir de uma resposta HTTP, um InvalidRequestException client-side tem statusCode nulo — diferente do mesmo erro vindo de um 400/422.

Retentativas automáticas

Antes de qualquer exceção chegar ao seu código, o transporte já retentou HTTP 429 e 5xx conforme a Nfe\Http\RetryPolicy configurada (padrão: 3 retentativas com backoff exponencial e jitter). Um RateLimitException ou ServerException capturado significa que o orçamento de retentativas se esgotou. Erros 4xx de negócio não são retentados. Veja Configuração.

Erros de rede

Quando nenhuma troca HTTP se completa, o SDK lança ApiConnectionException em vez de devolver uma resposta — DNS, conexão recusada, falha de TLS, timeout de conexão ou leitura.

use Nfe\Exception\ApiConnectionException;

try {
$nfe->companies->list();
} catch (ApiConnectionException $e) {
error_log("Falha de conexão: {$e->getMessage()}");
}

Próximos passos

NFE.io

A NFE.io é uma empresa de tecnologia que fornece soluções para automatizar e simplificar a emissão e gestão de notas fiscais eletrônicas. Com suas ferramentas, as empresas podem economizar tempo e reduzir erros, aumentando a eficiência e precisão do processo de emissão de notas fiscais.

Um dos principais cases de sucesso da NFE.io é a implementação da solução na empresa de transporte Rodonaves. Com a automatização da emissão e gestão de notas fiscais eletrônicas, a Rodonaves conseguiu reduzir em até 80% o tempo gasto nesse processo, o que se traduziu em uma significativa melhoria na eficiência operacional. Além disso, a empresa também conseguiu eliminar erros e atrasos na emissão de notas fiscais, o que melhorou a relação com seus clientes e aumentou a confiança dos órgãos fiscais.

Outro exemplo é a implementação da NFE.io na empresa de comércio eletrônico, a Loja Integrada. Com a automatização da emissão de notas fiscais, a Loja Integrada conseguiu aumentar a velocidade de emissão de notas em até 10 vezes, o que permitiu que a empresa atendesse a uma maior quantidade de clientes e, consequentemente, aumentar as suas vendas.

Além desses exemplos, a NFE.io também tem outros cases de sucesso com empresas de setores como indústria, construção, varejo e serviços, mostrando a versatilidade e eficácia da sua solução.

Em resumo, a NFE.io é uma empresa de tecnologia que oferece soluções para automatizar e simplificar a emissão e gestão de notas fiscais eletrônicas, ajudando as empresas a economizar tempo e reduzir erros, melhorando a eficiência e precisão do processo. Com cases de sucesso em diferentes setores, a NFE.io tem se destacado como uma empresa líder em automação fiscal.