apex-dextra / fiscal-monorepo
Monorepo de bibliotecas PHP para documentos fiscais eletronicos.
Requires
- php: ^8.1
- ext-curl: *
- ext-dom: *
- ext-json: *
- ext-openssl: *
Requires (Dev)
- phpunit/phpunit: ^10.5
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.