apex-dextra/fiscal-monorepo

Monorepo de bibliotecas PHP para documentos fiscais eletronicos.

Maintainers

Package info

github.com/gsse/fiscal-monorepo

Type:project

pkg:composer/apex-dextra/fiscal-monorepo

Transparency log

Statistics

Installs: 3

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

0.3 2026-08-18 14:30 UTC

This package is auto-updated.

Last update: 2026-08-18 15:51:32 UTC


README

Monorepo de bibliotecas PHP para integracao com documentos fiscais eletronicos.

Pacotes

apex-dextra/fiscal-core

Infraestrutura compartilhada entre os clientes fiscais:

  • transporte HTTP com cURL;
  • certificado digital A1 em PKCS#12;
  • assinatura XML via OpenSSL;
  • validacao XML e XSD;
  • contratos e excecoes de infraestrutura.

Namespace: Fiscal\\Core.

apex-dextra/nfse-client

Cliente para a NFS-e Padrao Nacional (SEFIN Nacional). Atualmente suporta:

  • emissao de NFS-e (POST /nfse);
  • consulta por chave de acesso (GET /nfse/{chaveAcesso});
  • consulta de DPS (GET|HEAD /dps/{id});
  • registro de evento (POST /nfse/{chaveAcesso}/eventos);
  • consulta de eventos.

Namespace: Nfse\\Client.

apex-dextra/nfe-client

Cliente para os Web Services NF-e 4.00 publicados pelo Portal Nacional:

  • autorização de lote, inclusive consulta do resultado assíncrono e lote GZip;
  • consulta de protocolo, status do serviço, cadastro, distribuição de DF-e;
  • recepção de eventos e inutilização;
  • envelope SOAP 1.2, certificado A1, validação XSD opcional e resposta SOAP bruta.

Namespace: Nfe\\Client.

As URLs são resolvidas por UF, ambiente e serviço. O NfeEndpointResolver traz os endpoints oficiais de SP e SVRS como exemplos e aceita um mapa próprio para as demais UFs, pois o Portal Nacional mantém essa tabela sujeita a alterações.

apex-dextra/nfce-client

Cliente NFC-e sobre os mesmos Web Services NF-e 4.00, com namespace Nfce\\Client, além de:

  • geração de QR Code DANFE NFC-e v3 online e offline;
  • compatibilidade com QR Code v2 para UFs que ainda exigem CSC;
  • assinatura RSA-SHA1 dos parâmetros do QR Code v3 offline usando o certificado A1.

Estrutura

packages/
  fiscal-core/
    src/
    tests/
  nfse-client/
    src/
    tests/
  nfe-client/
    src/
    tests/
  nfce-client/
    src/
    tests/

Desenvolvimento

composer install
composer test

O XML fiscal continua sendo montado pela aplicacao consumidora. O cliente pode valida-lo, assina-lo com um certificado A1 e envia-lo para a SEFIN.

Para NF-e/NFC-e, o XML também continua sendo responsabilidade da aplicação. O cliente recebe o XML já assinado, monta a mensagem SOAP conforme o MOC e transmite usando o certificado A1:

use Fiscal\\Core\\Security\\A1FileCertificateProvider;
use Fiscal\\Core\\Transport\\CurlHttpTransport;
use Nfe\\Client\\DTO\\AuthorizeNfeRequest;
use Nfe\\Client\\DTO\\Environment;
use Nfe\\Client\\Endpoints\\NfeEndpointResolver;
use Nfe\\Client\\NfeClient;

$provider = new A1FileCertificateProvider('/caminho/certificado.pfx', 'senha');
$client = new NfeClient(
    environment: Environment::HOMOLOGATION,
    endpointResolver: new NfeEndpointResolver(),
    transport: new CurlHttpTransport(),
    certificateProvider: $provider,
    uf: 'SP',
);

$response = $client->authorize(new AuthorizeNfeRequest($signedEnviNfeXml));

O NfceClient usa a mesma configuração e recebe Nfce\\Client\\DTO\\EmitNfceRequest. Para o QR Code v3 online:

use Nfce\\Client\\DTO\\Environment;
use Nfce\\Client\\QRCode\\NfceQrCodeGenerator;

$qrCode = (new NfceQrCodeGenerator())->onlineV3(
    'https://www.sefaz.exemplo.gov.br/nfce/qrcode?p=',
    $accessKey,
    Environment::HOMOLOGATION,
);

As versões dos schemas oficiais devem ser baixadas do Portal Nacional e apontadas via NfeXsdCatalog/NfceXsdCatalog ou diretamente nos requests. Isso evita embutir uma versão que pode ser alterada por Nota Técnica.

Referências oficiais utilizadas: Portal Nacional da NF-e, Web Services, Manual de Orientação do Contribuinte 7.0, schemas XML e Manual DANFE NFC-e/QR Code 6.0.

Exemplo:

<?php

declare(strict_types=1);

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

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

$signedXml = $signer->sign($dpsXml, $certificateProvider->getCertificate());

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

$response = $client->emit(new EmitNfseRequest($signedXml));

Decisoes de arquitetura

fiscal-core nao conhece SEFIN, DPS, NF-e ou NFC-e. Cada cliente fiscal define seus DTOs, endpoints, protocolos e regras de negocio sobre a infraestrutura compartilhada.