Rejeição 587: Usar somente o namespace padrão da NF-e
Descrição oficial da SEFAZ: Usar somente o namespace padrão da NF-e
O que significa
O XML enviado declarou um namespace diferente (ou além) do namespace oficial da NF-e. A SEFAZ só aceita http://www.portalfiscal.inf.br/nfe como namespace do documento, sem prefixos ou namespaces extras espalhados pelas tags.
Por que acontece
Normalmente é a ferramenta que gerou ou manipulou o XML: bibliotecas de assinatura e de serialização costumam injetar declarações como xmlns:ds, xmlns:xsi ou xmlns:soap dentro do corpo da NF-e, ou prefixar as tags (ns1:infNFe). Também aparece quando o XML passou por transformação/reserialização depois de montado.
Como resolver
Abra o XML que efetivamente saiu na transmissão (não o que a tela mostra) e olhe a tag NFe e as tags internas: só deve existir a declaração do namespace padrão na tag raiz, sem prefixo. Remova declarações extras e prefixos das tags do documento, gere de novo e assine — a assinatura precisa ser feita depois da limpeza, senão você invalida o digest. Se o XML é gerado por biblioteca, o ajuste é na configuração de serialização dela, não no arquivo à mão.
Como evitar
Monte o XML já no namespace correto e não reserialize o documento depois de assinado — qualquer passe extra pode reintroduzir namespaces.