--- name: NFSe Emissão via SEFIN description: Detalhes técnicos da emissão NFSe Nacional via endpoint SEFIN com XML+assinatura digital - testado e funcionando HTTP 201 type: project --- ## Emissão NFSe Nacional - Integração Completa (2026-03-12) ### Endpoint Correto - **Produção**: `POST https://sefin.nfse.gov.br/SefinNacional/nfse` - **Homologação**: `POST https://sefin.producaorestrita.nfse.gov.br/SefinNacional/nfse` - **NÃO usar ADN** (`adn.nfse.gov.br/contribuinte/`) - retorna 404 para emissão ### Fluxo de Emissão 1. Montar XML `` (sem `` wrapper) 2. Carregar em DOM com `` 3. C14N **inclusive** (`C14N(false, false)`) do infDPS → SHA1 digest 4. Montar SignedInfo → C14N inclusive → RSA-SHA1 assinatura 5. Montar XML final como **string** (não DOM) com `` + infDPS + Signature 6. gzencode() → base64_encode() 7. POST JSON: `{"dpsXmlGZipB64": ""}` ### Campos XML Validados (HTTP 201) - `tpAmb`: 1 (prod) ou 2 (homolog) - `tpEmit`: 1 - `cLocEmi`: 3154606 (IBGE Rib. Neves) - `opSimpNac`: 3 (ME/EPP) - `regApTribSN`: 1 (obrigatório para opSimpNac=3) - `regEspTrib`: 0 - `cTribNac`: 170601 - `tribISSQN`: 1 - `tpRetISSQN`: 1 - `pTotTribSN`: 4.23 (em vez de indTotTrib para ME/EPP) - **SEM ``** em homologação (E0120) - `dCompet`: formato `Y-m-d` (data completa, não só ano-mês) - `serie`: 900 para testes ### Estrutura XML Específica (diferente do schema docs) - Endereço: `.........` - Serviço: `3154606170601...` - Valores: `100.00...` ### Problemas Resolvidos - **E0008 data futura**: Servidor PHP em UTC, SEFIN em Brasília. Fix: forçar `America/Sao_Paulo` no timezone - **RNG6110 versao**: `versao="1.00"` vai no `` (não no ``), mas deve ser montado como STRING, não como atributo DOM - **`