Monorepo de bibliotecas PHP para integracao com documentos fiscais eletronicos.
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.
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.
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.
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.
packages/
fiscal-core/
src/
tests/
nfse-client/
src/
tests/
nfe-client/
src/
tests/
nfce-client/
src/
tests/
composer install
composer testO 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));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.