[ok] NFe - A Saga

14 respostas
proteus_adi

E continua o Prólogo da NFe...

Esse problema eu não sei nem bem como descrever...

Basicamente o envio de nota está intermitente, alternando entre uma aceitação e algumas reprovações de assinatura... O envio da mesma nota pode retornar
<cStat>100</cStat>
<xMotivo>Autorizado o uso da NF-e</xMotivo>
Assim como pde retornar
<cStat>297</cStat>
<xMotivo>Rejeicao: Assinatura difere do calculado</xMotivo>

Ou seja...
Fudeu, né?! O envio de um mesmo arquivo pode retornar ok como fault...
:S,,,

O resumo do processo é
1) Gera NFe [Parâmetro]
2) Assina NFe [Há leitura do arquivo parâmetro e geração de novo arquivo]
3) Valida NFe
4) Gera Lote NFe [Há leitura do arquivo assinado e geração de novo arquivo]
5) Envia lote NFe [Há leitura do arquivo de lote e geração de novo arquivo]
6) Pega resposta NFe

Quando dá erro, eu começo apartir do 3, e, milagrosamente pode funcionar ou não...

Eu inicialmente imaginei que fosse algo do tipo charset encoding... mas, como se trata do mesmo arquivo de origem passando pelos mesmos processos de criações de arquivo...

Manipulação [ leitura e escrita ] são feitas com BufferedReaders e PrintWriter, com métodos readLine() e printf(). e o envio dessas informações através do meu maravilhoso método genérico
public static String simpleRequest(String endpoint, String nomeServico, 
                                       String[] paramValue, 
                                       String[] paramName) {
            {...}
            Service service = new Service();
            Call call = (Call)service.createCall();
            call.setTargetEndpointAddress(new java.net.URL(endpoint));

            call.setOperationName(servico);

            for (int i = 0; i < paramValue.length; i++) {
                call.addParameter(paramName[i], XMLType.XSD_STRING, 
                                  ParameterMode.IN);
            }
            call.setReturnType(XMLType.XSD_STRING);

            String ret = (String)call.invoke(paramValue);
            return ret;

        } catch (Exception e) {
            e.printStackTrace();
            return e.getMessage();
        }
    }

Pra variar...
Nâo tenho mais idéias de qual motivo tenha me pegado pelas patas...

14 Respostas

proteus_adi

Encoding, Encoding, Encoding…

HTMLEncoding…

Como um ã vira um ã e me arranca o fígado?!

auaua,
Resorvido, [ eu acho ]

wesley_bezerra

como vc resolveu, mudou o encoding do arquivo ou na hora de mandar fez algo?

proteus_adi

Na hora de montar o arquivo…
O Razão social virou razão social

A

kra, to enrrolado aqui com essa NF-e bendita, estava vendo algumas mensagens suas no forum e pelo que percebi vc já conseguiu comunicação com os WebServices. Aqui estou tentando consultar o status do serviço e estou recebendo a seguinte mensagem:

Rejeicao: Estrutura XML mal formada

o XML da requisição está assim:

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<nfeCabecMsg>&lt;cabecMsg xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.02"&gt;&lt;versaoDados&gt;1.07&lt;/versaoDados&gt;&lt;/cabecMsg&gt;
</nfeCabecMsg>
<nfeDadosMsg>&lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;consStatServ xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.02"&gt;&lt;tpAmb&gt;2&lt;/tpAmb&gt;&lt;cUF&gt;35&lt;/cUF&gt;&lt;xServ&gt;STATUS&lt;/xServ&gt;&lt;/consStatServ&gt;
</nfeDadosMsg>
</soap12:Body>
</soap12:Envelope>

a resposta:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<nfeStatusServicoNFResponse xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico">
<nfeStatusServicoNFResult>
<?xml version="1.0" encoding="UTF-8"?>
<retConsStatServ versao="1.07" xmlns="http://www.portalfiscal.inf.br/nfe">
<tpAmb>1</tpAmb>
<verAplic>1.00</verAplic>
<cStat>243</cStat>
<xMotivo>Rejeicao: Estrutura XML mal formada</xMotivo>
<cUF>53</cUF>
<dhRecbto>2008-09-25T09:45:54</dhRecbto>
</retConsStatServ>
</nfeStatusServicoNFResult>
</nfeStatusServicoNFResponse>
</soap:Body>
</soap:Envelope>

Você saberia me dizer o q tá errado nesse XML?
Poderia me enviar um modelo do XML que vc utilizada pra realizar a comunicação com os WEB Services?

Obrigado
Marcos - [email removido]

wesley_bezerra
<?xml version="1.0" encoding="utf-8"?>

esta parte so vai no topo do xml para dizer qual a versao e a codificacao do arquivo,

nao precisa colocar nos dados tambem.


aidna to apanhando da assinatura, ta rejeitando direto

A

Wesley,

Fiz o teste, removi a linha <?xml version="1.0" encoding="utf-8"?> mas não resolveu, a mensagem continua lá, firme e forte! rsr

por acaso alguém tem um modelo desse XML ?

Marcos
[email removido]

mateusprado

Estou no projeto NF-e a algum tempo. Na empresa ja temos a solucao funcionando perfeitamente. No comeco esses problemas sao normais, tanto com o consumo dos WS como a geracao de XML, a assinatura etc. o processo como um todo. Siga basicamente o manual de integracao e os ATOS Cotepe e atualizacoes nas versoes dos Schemas, layouts e pacotes de liberacao.

Boa sorte.

T

Procura no google por exemplos de xml, que vai lhe dar um site da receita federal, do sul… que tem todos os exemplos de xml. tanto de envio quanto de retorno de todas os serviços…

T

Achei o link

http://www.sefaz.rs.gov.br/sef_root/inf/SEF-NFE.htm#NotaEX

A

já usei estes exemplos tb, mesmo assim não vai

Não comentei nada, mas to fazendo essa bendita NF-e em Delphi pq aqui na empresa onde trabalho é o que usam.

Agora vai saber se essa infeliz dessa VCL tá fazendo a coisa certa na hora de enviar o XML pro WEB Service !! :evil:

wesley_bezerra

estou com problemas, utilizei o codigo que foi postado no forum com algumas alterações, no entanto ta gerando a assinatura invalida. alguem pode dar uma verificada para mim se tem algum erro na logica?

public static String assinarEnviNFeArquivo(String nomeArquivo) throws Exception {
        //pega a instancia da fabrica de construtor documentos
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setNamespaceAware(true);
        //cria um novo construtor
        DocumentBuilder builder = factory.newDocumentBuilder();
        //carrega o documento do arquivo
        String arquivoLimpo = nomeArquivo;//Arquivo.limparArquivo(nomeArquivo);
        Document doc = builder.parse(new FileInputStream(new File(arquivoLimpo)));
        //pega instancia da fabrica de assinaturas
        XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM");
        //transformacoes
        ArrayList transformList = new ArrayList();
        TransformParameterSpec tps = null;
        //transformcoes exigidas
        //--enveloped
        //--c14n
        Transform envelopedTransform = fac.newTransform(Transform.ENVELOPED, tps);
        Transform c14NTransform = fac.newTransform("http://www.w3.org/TR/2001/REC-xml-c14n-20010315", tps);
        transformList.add(envelopedTransform);
        transformList.add(c14NTransform);

        KeyStore.PrivateKeyEntry pkEntry = carregarCertificado();
        //pegar o certificado
        X509Certificate cert = (X509Certificate) pkEntry.getCertificate();
        // Create the KeyInfo containing the X509Data.
        KeyInfoFactory kif = fac.getKeyInfoFactory();
        List x509Content = new ArrayList();
        x509Content.add(cert);
        X509Data xd = kif.newX509Data(x509Content);
        KeyInfo ki = kif.newKeyInfo(Collections.singletonList(xd));
        int totalNfe = doc.getDocumentElement().getElementsByTagName("NFe").getLength();
        System.out.println("total de notas " + totalNfe);
        for (int i = 0; i < totalNfe; i++) {            
            assinarNFE(fac, transformList, pkEntry.getPrivateKey(), ki, doc, i);
        }
        // Output the resulting document.   
        File fout = new File("sig_" + nomeArquivo);
        OutputStream os = new FileOutputStream(fout);
        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer trans = tf.newTransformer();
        try {
            trans.transform(new DOMSource(doc), new StreamResult(os));
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            os.close();
        }

        return "ok";
    }

    private static void assinarNFE(XMLSignatureFactory fac,
            ArrayList transformList, PrivateKey privateKey, KeyInfo ki,
            Document doc, int i) throws Exception {
        NodeList elements = doc.getElementsByTagName("infNFe");
        Element el = (Element) elements.item(i);
        String id = el.getAttribute("Id");
        Reference ref = fac.newReference("#" + id,
                fac.newDigestMethod(DigestMethod.SHA1, null),
                transformList, null, null);
        SignedInfo si = fac.newSignedInfo(fac.newCanonicalizationMethod(
                CanonicalizationMethod.INCLUSIVE, (C14NMethodParameterSpec) null),
                fac.newSignatureMethod(SignatureMethod.RSA_SHA1, null),
                Collections.singletonList(ref));
        XMLSignature signature = fac.newXMLSignature(si, ki);

        Element elementoAssinar = (Element) doc.getElementsByTagName("NFe").item(i);

        DOMSignContext dsc = new DOMSignContext(privateKey, elementoAssinar);
        signature.sign(dsc);

    }

    private static KeyStore.PrivateKeyEntry carregarCertificado() throws Exception {
        //carrega o certificado
        KeyStore ks = KeyStore.getInstance(PropriedadeNfe.getInstance().getTipoCertificado());
        ks.load(new FileInputStream(new File(PropriedadeNfe.getInstance().getCaminhoCertificado())), PropriedadeNfe.getInstance().getSenha().toCharArray());
        KeyStore.PrivateKeyEntry pkEntry = null;
        Enumeration aliasesEnum = ks.aliases();
        PrivateKey privateKey = null;
        System.out.println("iniciou a procura pela chave");
        while (aliasesEnum.hasMoreElements()) {
            String alias = (String) aliasesEnum.nextElement();
            System.out.println("alias:" + alias);
            if (ks.isKeyEntry(alias)) {
                pkEntry = (KeyStore.PrivateKeyEntry) ks.getEntry(
                        alias, new KeyStore.PasswordProtection(
                        PropriedadeNfe.getInstance().getSenha().toCharArray()));
                privateKey = pkEntry.getPrivateKey();
                System.out.println("achou a chave, certificado:" + privateKey.getFormat());
                System.out.println("achou a chave, certificado:" + pkEntry.getCertificate().toString());
                break;
            }
        }
        System.out.println("finalizou a procura pela chave");
        return pkEntry;
    }

estou usando PKCS12

[]s

PadrE

Galera… alguam ai já baixou os WSDL dos outros estados ??

Até agora só consegui o de SP… to tentando do RS já que o arquivo Associacao é de lá…

vlw

proteus_adi

Assinatura inválida?
cheque se seu arquivo está UTF-8; Sem caracteres especiais.

WSDL?
Eu não. Eu tou usando desses frameworks dinâmicos.

wesley_bezerra

se alguem tiver interesse, fiz uma biblioteca java para NF-e e para CT-e. É compatível com qualquer Estado e já esta rodando no RS, SC e PR.
site da minha empresa:
www.wbezerra.com.br
ou mandar um e-mail:
[email removido]

se falar que pegou deste forum dou desconto. Abração

Criado 16 de setembro de 2008
Ultima resposta 13 de ago. de 2009
Respostas 14
Participantes 6