decoda/nfe-core-client

Biblioteca base para integracao com NFS-e Padrao Nacional (SEFIN Nacional).

Maintainers

Package info

github.com/gsse/nfe-core-client

pkg:composer/decoda/nfe-core-client

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

0.1 2026-03-24 03:37 UTC

This package is auto-updated.

Last update: 2026-03-24 04:01:16 UTC


README

Biblioteca base em PHP para chamadas HTTP da NFS-e Padrao Nacional (SEFIN Nacional), pensada para ser dependencia de uma extensao maior.

Objetivo

  • Fornecer classes e metodos para requisicoes da API NFS-e.
  • Isolar transporte, endpoints, certificado e contratos.
  • Evitar acoplamento com CodeIgniter no nucleo.

Operacoes suportadas no cliente

  • Emitir NFS-e (POST /nfse)
  • Consultar NFS-e por chave (GET /nfse/{chaveAcesso})
  • Consultar DPS (GET|HEAD /dps/{id})
  • Registrar evento (POST /nfse/{chaveAcesso}/eventos)
  • Consultar eventos (GET /nfse/{chaveAcesso}/eventos/...)

Instalacao

composer require decoda/nfe-core-client

Uso rapido

<?php

declare(strict_types=1);

use Nfse\Core\Client\SefinNacionalClient;
use Nfse\Core\DTO\EmitNfseRequest;
use Nfse\Core\DTO\Environment;
use Nfse\Core\Endpoints\SefinEndpointResolver;
use Nfse\Core\Security\A1FileCertificateProvider;
use Nfse\Core\Security\OpenSslXmlSigner;
use Nfse\Core\Transport\CurlHttpTransport;
use Nfse\Core\Validation\DomXmlSchemaValidator;
use Nfse\Core\Validation\NfseXsdCatalog;

$certificateProvider = new A1FileCertificateProvider('/caminho/certificado.pfx', 'senha-do-certificado');
$xmlSigner = new OpenSslXmlSigner();

$client = new SefinNacionalClient(
    environment: Environment::PRODUCTION_RESTRICTED,
    endpointResolver: new SefinEndpointResolver(),
    transport: new CurlHttpTransport(),
    certificateProvider: $certificateProvider,
    xmlValidator: new DomXmlSchemaValidator(),
    emitSchemaPath: '/caminho/xsd/dps.xsd',
);

$xmlAssinado = $xmlSigner->sign('<DPS Id="ABC123">...</DPS>', $certificateProvider->getCertificate());
$response = $client->emit(new EmitNfseRequest($xmlAssinado));

if ($response->isSuccess()) {
    echo $response->body();
}

Endpoints oficiais usados por padrao

  • Producao restrita: https://sefin.producaorestrita.nfse.gov.br/API/SefinNacional
  • Producao: https://sefin.nfse.gov.br/API/SefinNacional

Observacoes

  • Esta biblioteca nao implementa regras fiscais de negocio.
  • Inclui assinador XML via OpenSSL em OpenSslXmlSigner.
  • Inclui validador XML/XSD em DomXmlSchemaValidator.

Validacao de XML

Voce monta o XML externamente. A extensao pode validar:

  • Apenas estrutura XML (sem XSD): passe xmlValidator.
  • Estrutura + XSD: passe xmlValidator e emitSchemaPath/eventSchemaPath, ou informe schemaPath por request.

Exemplo por request:

$request = new EmitNfseRequest(
    signedDpsXml: $xmlAssinado,
    idempotencyKey: 'pedido-123',
    schemaPath: '/caminho/xsd/dps-v1.xsd'
);

Catalogo de XSD por versao

Use NfseXsdCatalog para resolver caminhos de XSD por versao sem informar tudo manualmente.

Estrutura padrao esperada:

/seu-diretorio-xsd/
  v1_00/
    dps_v1_00.xsd
    evento_v1_00.xsd

Exemplo:

$catalog = new NfseXsdCatalog('/seu-diretorio-xsd', 'v1_00');

$client = new SefinNacionalClient(
    environment: Environment::PRODUCTION_RESTRICTED,
    endpointResolver: new SefinEndpointResolver(),
    transport: new CurlHttpTransport(),
    xmlValidator: new DomXmlSchemaValidator(),
    emitSchemaPath: $catalog->emitSchemaPath(),
    eventSchemaPath: $catalog->eventSchemaPath(),
);

Adapter CI4 (opcional)

Para uso no CodeIgniter 4, configure Config\NfseCore e use service('nfseCore').

Arquivo de configuracao da biblioteca:

<?php

namespace Config;

class NfseCore extends \CodeIgniter\Config\BaseConfig
{
    public string $environment = 'production_restricted';
    public string $certificatePath = '/caminho/certificado.pfx';
    public string $certificatePassphrase = 'senha';
    public int $timeoutSeconds = 30;
    public bool $validateXml = true;
    public string $emitSchemaPath = ''; // opcional, override manual
    public string $eventSchemaPath = ''; // opcional, override manual
    public string $xsdBasePath = '/caminho/xsd'; // ex.: /caminho/xsd/v1_00/*.xsd
    public string $xsdVersion = 'v1_00';
}