Webservice Nota Nacional | Vila Velha/ES - 3205200 2026

:inbox_tray: Passo 5: Analisando resposta…
HTTP Status: 200

:page_facing_up: RESPOSTA DO WEBSERVICE:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

<?xml version='1.0' encoding='UTF-8'?><?xml version="1.0" encoding="UTF-8"?>

<Retorno>
<Status>ERRO</Status>
<MensagemErro>Não foi localizado o CNPJ ou CPF do prestador.
ATENCAO! Ja consta uma requisicao em andamento para envio da nota fiscal para o Contribuinte null. Aguarde o processo anterior finalizar para que possam realizar novo envio.
</MensagemErro>
</Retorno>
</ns2:NotaFiscalNacionalGerarResponse></S:Body></S:Envelope>
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Alguem pode me ajudar ?

RESUMO-PROBLEMA.md << ‘EOFRESUMO’

:red_circle: PROBLEMA: “cannot find validation key” - Vila Velha NFS-e

:clipboard: Situação Atual

Empresa: ***** (CNPJ 40.800/*, IM *****)
Sistema: NFS-e Nacional (padrão desde 01/01/2026)
Ambiente: Produção
Erro: “cannot find validation key”

:white_check_mark: O que está CORRETO

  1. Certificado Digital:

    • :white_check_mark: Tipo A1 ICP-Brasil
    • :white_check_mark: CNPJ ************* no certificado
    • :white_check_mark: Válido até 12/03/2026
    • :white_check_mark: Algoritmo SHA256 with RSA
  2. Estrutura XML:

  3. Assinatura Digital:

    • :white_check_mark: Padrão W3C XML Signature
    • :white_check_mark: Algoritmo: RSA-SHA256
    • :white_check_mark: Canonicalização: C14N
    • :white_check_mark: DigestMethod: SHA256
    • :white_check_mark: KeyInfo com X509Certificate presente
    • :white_check_mark: Assinatura válida (funciona em homologação)

:red_circle: O que está ERRADO

Servidor retorna: “cannot find validation key”

Testes realizados:

  1. XML sem assinatura: Retorna “Não foi encontrado elemento Signature” :white_check_mark:
  2. XML com assinatura: Retorna “cannot find validation key” :x:

Conclusão: O XML SEM assinatura é aceito estruturalmente. COM assinatura, o servidor não consegue extrair a chave pública do KeyInfo.

:memo: Hipóteses

  1. Localização do KeyInfo: Servidor procura em lugar diferente?
  2. Formato do certificado: Precisa de quebras de linha?
  3. Ordem dos elementos: SignedInfo > SignatureValue > KeyInfo?
  4. Namespace: Algum namespace faltando no KeyInfo?
  5. Referência URI: Formato do ID está correto?

:sos: PRECISO DE AJUDA

Pergunta principal: Como o servidor de Vila Velha espera o KeyInfo/X509Certificate na assinatura XML?

Olá, o problema não está na assinatura.
Eu tive esse mesmo erro.

Alguma coisa fica travada no sistema deles.

Você precisa ligar diretamente no setor deles:
27 31497454

Informa essa mensagem de erro.

Ou você pode enviar de seu email pessoal para:
[email protected]

OBS.: Eles não aceitam email de empresa.
O email cai na quarentena.

Boa tarde Luiz, quando você ligou qual foi a resposta informada por eles?

Eu estou tendo essa mensagem de erro aqui na empresa, mas não sei por onde seguir:
<S:Envelope xmlns:S=“http://schemas.xmlsoap.org/soap/envelope/”>
<S:Body>
<ns2:NotaFiscalNacionalGerarResponse xmlns:ns2=“http://webservices.sil.com/”>
ERRO ATENCAO! Ja consta uma requisicao em andamento para envio da nota fiscal para o Contribuinte . Aguarde o processo anterior finalizar para que possam realizar novo envio. ]]>
</ns2:NotaFiscalNacionalGerarResponse>
</S:Body>
</S:Envelope>

Olá,
Estou com a versão antiga e com a mudança para a Nota Fiscal Nacional, não encontrei o código fonte da nova versão para download para migrar.

Alguém poderia me ajudar?

Você pode enviar um email de sua conta pessoal, informando o problema.
Eu tentei enviar um email da minha empresa e caiu na quarentena.

[email protected]

Código-fonte para qual linguagem?

Na linguagem PHP
.
.

Coisas que mudaram:

        $this->ibge = 3205200;
        $this->ndps = 10000000; // Valor Padrão
        $this->cLocPrestacao = $this->ibge;
        $this->xLocPrestacao = "Vila Velha";
        $this->cLocIncid = $this->cLocPrestacao;
        $this->xLocIncid = $this->xLocPrestacao;
        $this->xTribNac = "[Descrição]";

        //EndPoint
        $this->end_prod = "https://tributacao.vilavelha.es.gov.br/tbw/services/NotaFiscalNacional";
        $this->end_homo = "http://tributacao.vilavelha.es.gov.br:8080/tbwhomologacao/services/NotaFiscalNacional";

Arquivo com o código atualizado:
smarapd_v002.php (42.2 KB)

OBS.: Eu uso uma tabela para poder controlar o RPS das notas enviadas e o retorno.
Segue o DSL da tabela em PostgreSQL:

CREATE TABLE public.notas_12345678000198 (
    id integer NOT NULL,
    ibge integer NOT NULL,
    serie integer NOT NULL,
    ndps integer NOT NULL,
    rps integer,
    numero character varying(100),
    chave character varying(100),
    dados json DEFAULT '{}'::json,
    created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
    updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP
);

CREATE SEQUENCE public.notas_12345678000198_id_seq
    AS integer
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;

ALTER TABLE public.notas_12345678000198_id_seq OWNER TO postgres;
ALTER SEQUENCE public.notas_12345678000198_id_seq OWNED BY public.notas_12345678000198.id;
ALTER TABLE ONLY public.notas_12345678000198 ALTER COLUMN id SET DEFAULT nextval('public.notas_12345678000198_id_seq'::regclass);
ALTER TABLE ONLY public.notas_12345678000198
    ADD CONSTRAINT notas_12345678000198_pkey PRIMARY KEY (id);
CREATE INDEX idx_notas_12345678000198_rps ON public.notas_12345678000198 USING btree (ibge, serie, rps);
CREATE UNIQUE INDEX idx_notas_12345678000198_unique1 ON public.notas_12345678000198 USING btree (ibge, serie, ndps);