Ir para conteúdo
  • Cadastre-se

dev botao

Web Service De Distribuição De Documentos Fiscais Eletrônicos


Ver Solução Respondido por lesf,
  • Este tópico foi criado há 3339 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Prezados,

 

       Complementando o post do Matheus, vi que quando a NF já te a ciência da operação, além dela vir completa(tag nfeProc) os seus eventos vem em layout diferente do que está na nota técnica que trata deste assunto, conforme xml anexo. 

 

                                                                         Herbert.

Eventonfe.xml

Link para o comentário
Compartilhar em outros sites

        public static string Decompress(string text)
        {
            byte[] bytes = Convert.FromBase64String(text);

            using (var msi = new MemoryStream(bytes))
            using (var mso = new MemoryStream())
            {
                using (var gs = new GZipStream(msi, CompressionMode.Decompress))
                {
                    byte[] bytesAux = new byte[4096];
                    int cnt;

                    while ((cnt = gs.Read(bytesAux, 0, bytesAux.Length)) != 0)
                    {
                        mso.Write(bytesAux, 0, cnt);
                    }
                }
                return Encoding.UTF8.GetString(mso.ToArray());
            }
        }

Senhore(a)s,

 

Boa Tarde!

 

 

Para aqueles que necessitarem de código para C#, segue o que consegui fazer hoje pela tarde! Resolve a mensagem de erro:

 

InvalidDataException: O número mágico do cabeçalho GZip não está correto. Verifique se você está transmitindo um fluxo GZip.

 

 

Saudações!

 

Humberto Queiroz.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • Fundadores

 

Bom dia, estou anexando no comentário o fonte pcnRetDistDFeInt com o código para fazer o decode e descompactar a string retornada pelo
webservice de consulta dos documentos. Na implementação, para realizar o decode da string utilizei o componente IdDecoderMIME da paleta indy (nativo no delphi)
e para descompactar utilizei a biblioteca ZLib free e open source (http://www.zlib.net/), já indicada por outros aqui no tópico. Nos testes recebi diversos
retornos contendo objetos do tipo nfeProc que ainda não existem no layout mas analisando o xml retornado parece exatamente o xml de distribuição da NFe, 
talvez poderiamos somente declarar como "resNFeProc" um objeto nota fiscal e utilizar o loadfromstream para alimentá-lo quando fosse esse o retorno.
 
 
Enfim, fica o código para avaliarem, desconsiderem os comentários e variaveis desnecessários dele.
 
Abraço.

 

Mathes,

 

Onde encontrar a Unit "ZLibExGZ"... Ela é nativa do Delphi ? Poderíamos distribuí-la com o ACBr ?

 

O Lazarus tem suporte nativo para GZip... mas o ideal seria acharmos uma solução que sirva para todas as IDEs

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

Daniel, boa tarde.

 

Uso aqui uma solução semelhante a do Matheus, porém com um componente pago, porém na parte de decode da base 64 usei uma unit EncdDecd e para descompactar usei a mesma zLibExGZ, sem nenhum download extra portanto creio que ambas sejam nativas pelo menos desde a versão 2010 do Delphi.

 

Qualquer outra informação estou a disposição.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Achei a Unit original nesse site:

 

http://www.base2ti.com/?id=delphi.zlib

 

Acho que podemos fazer IFDEFs para Delphi e Lazarus...

 

No Delphi usamos essa Unit (ZLibExGZ), e no Lazarus as classes nativas, como TGZFileStream de ZStream.pas

  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

Estranho que aqui apenas declarei ela na uses não conhecia esse projeto GraphicEx, por isso pensei ser nativo do delphi, valeu pela informação Leonardo.

 

Na verdade o GraphicEx somente utiliza essa unit, o projeto original é o que o Daniel passou mesmo.

Acredito que separar Delphi e Lazarus com IFDEFs é o melhor caminho.

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde a todos,

 

No Delphi 7 encontrei uma Unit chamada ZLib que possui as seguintes classes:

 

TCompressionStream,

 

TCustomZlibStream e

 

TDecompressionStream.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

estive efetuando alguns testes aqui no PR e percebi que retorna o xml da NF-e completo na consulta, ou seja, ao invés de vir a tag resNFe retorna nfeProc, neste caso terá que ser tratado pra ler as informações desta tag também senão o componente ficara vazio, creio eu que poderá ser lido as informações e armazenado nas mesmas propriedades onde é armazenada o resumo da NFe.

Link para o comentário
Compartilhar em outros sites

Também notei isso Roberto, obtive na resposta três tipos de informações diferentes: <resNfe> - um resumo das notas, <nfeProc> - que contém todo xml das notas, e <resEvento> - um resumo dos eventos das notas, agora ficou a dúvida, as mesmas notas que vem resumidas no <resNfe> vem completas em <nfeProc>? Qual é o critério usado para o webservice retornar essas informações?

 

Dei uma olhada na nota técnica mas não foi muito esclarecedor.

Link para o comentário
Compartilhar em outros sites

realmente a NT não diz nada quanto a isto e também não consegui identificar qual o criterio pra retornar o xml completo

 

 

 

Edit:

 

segue a unit com a implementação para leitura do procNFe quando retornado pela consulta.

pcnRetDistDFeInt.pas

Editado por Roberto.Godinho
Link para o comentário
Compartilhar em outros sites

Prezados Ítalo e demais colegas ,

 

A imagem em anexo é da Unit PCN2\pcnRetDistDFeInt.pas, linha 290 aproximadamente.

Perceba que o conteúdo de FInfZip é perfeitamente descompactado.

O meu problema, é que mesmo quando este conteúdo é um resumo de nota fiscal, ele não entra em nenhuma das condições a seguir. Nem a que o cursor está parado e nem na seguinte.

Eu mexi no leitor e resolvi o problema antes de atualizar os fontes pela última vez, mas não queria fazer isso de novo.

Gostaria de entender qual a intenção do autor, para que eu não precise modificar mais nenhuma Unit particularmente. Se for problema no leitor mesmo, fica aqui a oportunidade de corrigi-lo diretamente no fonte.

 

Se algum detalhe passou desapercebido por mim e eu estiver errando alguma coisa mínima, por favor, me perdoem.

post-25115-0-25473900-1421847849_thumb.p

Link para o comentário
Compartilhar em outros sites

Boa tarde Guilherme,

 

o que ocorre é que o que esta sendo descompactado não é o conteudo do objeto Leitor mas sim o valor que está sendo armazenado na propriedade InfZip, sendo assim, quando o leitor tenta extrair o grupo resNFe do xml retornado ele irá encontrar o conteudo ainda compactado e não identificará a devida TAG, no post acima do seu está uma unit alterada pra atender este requisito, você pode usa-la ou basear-se nela pra fazer a leitura do retorno.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Roberto notei que a unit que tu postou ali em cima é a mesma que  Matheus postou, tentando usar ela obtive um erro "Data Error", por acaso tu teve esse erro tbm? se sim como o corrigiu?

 

você esta utilizando a unit original postada pelo Matheus?  

 

se sim, no post  passei a correção necessária assim que você a publicou, agora, se estiver utilizando a que eu enviei (que inclusive é a mesma que a do Matheus, apenas melhorei alguns quesitos) já é outro caso, ai terei que verificar.

Link para o comentário
Compartilhar em outros sites

  • Consultores

Oi Matheus consegui de outra forma obter um resultado satisfatório, mas no caso usei outra unit para fazer o "decode" da base64 a unit EncdDecd com a função DecodeBase64(astringb64), posteriormente usei o mesmo método que vc usou GZDecompressStr(astring) e o retorno foi satisfatório valeu!!

 

Tem como voce postar um exemplo do seu fluxo, o meu está retornando data error.

Consultor SAC ACBr

Victor H Gonzales - Pandaaa
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

"Aprender é a única coisa que a mente nunca se cansa, nunca tem medo e nunca se arrepende” - Leonardo da Vinci

"Ter sucesso é falhar repetidamente, mas sem perder o entusiasmo"

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 3339 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.