/// <summary> /// Efetua a validação de qualquer XML, NFE, Cancelamento, Inutilização, etc..., e retorna se está ok ou não /// </summary> /// <param name="Arquivo">Nome do arquivo XML a ser validado e assinado</param> /// <param name="PastaValidar">Nome da pasta onde fica os arquivos a serem validados</param> /// <param name="PastaXMLErro">Nome da pasta onde é para gravar os XML´s validados que apresentaram erro.</param> /// <param name="PastaXMLRetorno">Nome da pasta de retorno onde será gravado o XML com o status da validação</param> /// <param name="Certificado">Certificado digital a ser utilizado na validação</param> /// <by>Wandrey Mundin Ferreira</by> /// <date>28/05/2009</date> public void ValidarAssinarXML(string Arquivo) { int emp = Empresas.FindEmpresaByThread(); Boolean Assinou = true; //Assinar o XML se tiver tag para assinar AssinaturaDigital oAD = new AssinaturaDigital(); try { if (TipoArqXml.nRetornoTipoArq >= 1 && TipoArqXml.nRetornoTipoArq <= SchemaXML.MaxID) { this.EncryptAssinatura(Arquivo); //danasa: 12/2013 oAD.Assinar(Arquivo, emp, Empresas.Configuracoes[emp].UnidadeFederativaCodigo); Assinou = true; } } catch (Exception ex) { Assinou = false; try { GravarXMLRetornoValidacao(Arquivo, "2", "Ocorreu um erro ao assinar o XML: " + ex.Message); new Auxiliar().MoveArqErro(Arquivo); } catch { //Se deu algum erro na hora de gravar o retorno do erro para o ERP, infelizmente não posso fazer nada. //Isso pode acontecer se falhar rede, hd, problema de permissão de pastas, etc... Wandrey 23/03/2010 } } if (Assinou) { #region Adicionar a tag do qrCode na NFCe if (Arquivo.EndsWith(Propriedade.ExtEnvio.Nfe, StringComparison.InvariantCultureIgnoreCase)) { if (!String.IsNullOrEmpty(Empresas.Configuracoes[emp].IndentificadorCSC)) { QRCode qrCode = new QRCode(Empresas.Configuracoes[emp].IndentificadorCSC, Empresas.Configuracoes[emp].TokenCSC, Arquivo); if (qrCode.CalcularLink()) { string url = Empresas.Configuracoes[emp].AmbienteCodigo == (int)NFe.Components.TipoAmbiente.taHomologacao ? Empresas.Configuracoes[emp].URLConsultaDFe.UrlNFCeH : Empresas.Configuracoes[emp].URLConsultaDFe.UrlNFCe; qrCode.GerarLinkConsulta(url); qrCode.AddLinkQRCode(); } } } #endregion // Validar o Arquivo XML if (TipoArqXml.nRetornoTipoArq >= 1 && TipoArqXml.nRetornoTipoArq <= SchemaXML.MaxID) { try { Validar(Arquivo); if (Retorno != 0) { this.GravarXMLRetornoValidacao(Arquivo, "3", "Ocorreu um erro ao validar o XML: " + RetornoString); new Auxiliar().MoveArqErro(Arquivo); } else { if (!Directory.Exists(Empresas.Configuracoes[emp].PastaValidado)) { Directory.CreateDirectory(Empresas.Configuracoes[emp].PastaValidado); } string ArquivoNovo = Empresas.Configuracoes[emp].PastaValidado + "\\" + Functions.ExtrairNomeArq(Arquivo, ".xml") + ".xml"; Functions.Move(Arquivo, ArquivoNovo); /* * if (File.Exists(ArquivoNovo)) * { * FileInfo oArqNovo = new FileInfo(ArquivoNovo); * oArqNovo.Delete(); * } * * FileInfo oArquivo = new FileInfo(Arquivo); * oArquivo.MoveTo(ArquivoNovo); */ this.GravarXMLRetornoValidacao(Arquivo, "1", "XML assinado e validado com sucesso."); } } catch (Exception ex) { try { this.GravarXMLRetornoValidacao(Arquivo, "4", "Ocorreu um erro ao validar o XML: " + ex.Message); new Auxiliar().MoveArqErro(Arquivo); } catch { //Se deu algum erro na hora de gravar o retorno do erro para o ERP, infelizmente não posso fazer nada. //Isso pode acontecer se falhar rede, hd, problema de permissão de pastas, etc... Wandrey 23/03/2010 } } } else { try { this.GravarXMLRetornoValidacao(Arquivo, "5", "Ocorreu um erro ao validar o XML: " + TipoArqXml.cRetornoTipoArq); new Auxiliar().MoveArqErro(Arquivo); } catch { //Se deu algum erro na hora de gravar o retorno do erro para o ERP, infelizmente não posso fazer nada. //Isso pode acontecer se falhar rede, hd, problema de permissão de pastas, etc... Wandrey 23/03/2010 } } } }
/// <summary> /// Efetua a validação de qualquer XML, NFE, Cancelamento, Inutilização, etc..., e retorna se está ok ou não /// </summary> /// <param name="Arquivo">Nome do arquivo XML a ser validado e assinado</param> /// <param name="PastaValidar">Nome da pasta onde fica os arquivos a serem validados</param> /// <param name="PastaXMLErro">Nome da pasta onde é para gravar os XML´s validados que apresentaram erro.</param> /// <param name="PastaXMLRetorno">Nome da pasta de retorno onde será gravado o XML com o status da validação</param> /// <param name="Certificado">Certificado digital a ser utilizado na validação</param> /// <by>Wandrey Mundin Ferreira</by> /// <date>28/05/2009</date> public void ValidarAssinarXML(string Arquivo) { int emp = Empresas.FindEmpresaByThread(); Boolean Assinou = true; //Assinar o XML se tiver tag para assinar AssinaturaDigital oAD = new AssinaturaDigital(); try { if (TipoArqXml.nRetornoTipoArq >= 1 && TipoArqXml.nRetornoTipoArq <= SchemaXML.MaxID) { EncryptAssinatura(Arquivo); oAD.Assinar(Arquivo, emp, Empresas.Configuracoes[emp].UnidadeFederativaCodigo); Assinou = true; } } catch (Exception ex) { Assinou = false; try { GravarXMLRetornoValidacao(Arquivo, "2", "Ocorreu um erro ao assinar o XML: " + ex.Message); new Auxiliar().MoveArqErro(Arquivo); } catch { //Se deu algum erro na hora de gravar o retorno do erro para o ERP, infelizmente não posso fazer nada. //Isso pode acontecer se falhar rede, hd, problema de permissão de pastas, etc... Wandrey 23/03/2010 } } if (Assinou) { #region Adicionar a tag do qrCode na NFCe if (Arquivo.EndsWith(Propriedade.Extensao(Propriedade.TipoEnvio.NFe).EnvioXML, StringComparison.InvariantCultureIgnoreCase)) { if (!String.IsNullOrEmpty(Empresas.Configuracoes[emp].IdentificadorCSC)) { XmlDocument conteudoXML = new XmlDocument(); conteudoXML.Load(Arquivo); QRCode qrCode = new QRCode(conteudoXML); string url; string versao = string.Empty; if (((XmlElement)conteudoXML.GetElementsByTagName(conteudoXML.DocumentElement.Name)[0]).Attributes[TpcnResources.versao.ToString()] != null) { versao = ((XmlElement)conteudoXML.GetElementsByTagName(conteudoXML.DocumentElement.Name)[0]).Attributes[TpcnResources.versao.ToString()].Value; } else if (((XmlElement)conteudoXML.GetElementsByTagName(conteudoXML.DocumentElement.FirstChild.Name)[0]).Attributes[TpcnResources.versao.ToString()] != null) { versao = ((XmlElement)conteudoXML.GetElementsByTagName(conteudoXML.DocumentElement.FirstChild.Name)[0]).Attributes[TpcnResources.versao.ToString()].Value; } if (versao == "4.00") { url = Empresas.Configuracoes[emp].AmbienteCodigo == (int)TipoAmbiente.taHomologacao ? Empresas.Configuracoes[emp].URLConsultaDFe.UrlNFCeH_400 : Empresas.Configuracoes[emp].URLConsultaDFe.UrlNFCe_400; } else { url = Empresas.Configuracoes[emp].AmbienteCodigo == (int)TipoAmbiente.taHomologacao ? Empresas.Configuracoes[emp].URLConsultaDFe.UrlNFCeH : Empresas.Configuracoes[emp].URLConsultaDFe.UrlNFCe; } string linkUFManual = Empresas.Configuracoes[emp].AmbienteCodigo == (int)TipoAmbiente.taHomologacao ? Empresas.Configuracoes[emp].URLConsultaDFe.UrlNFCeH : Empresas.Configuracoes[emp].URLConsultaDFe.UrlNFCe; qrCode.GerarLinkConsulta(url, Empresas.Configuracoes[emp].IdentificadorCSC, Empresas.Configuracoes[emp].TokenCSC, linkUFManual); StreamWriter sw = File.CreateText(Arquivo); sw.Write(conteudoXML.OuterXml); sw.Close(); } } #endregion Adicionar a tag do qrCode na NFCe // Validar o Arquivo XML if (TipoArqXml.nRetornoTipoArq >= 1 && TipoArqXml.nRetornoTipoArq <= SchemaXML.MaxID) { try { Validar(Arquivo); if (Retorno != 0) { GravarXMLRetornoValidacao(Arquivo, "3", "Ocorreu um erro ao validar o XML: " + RetornoString); new Auxiliar().MoveArqErro(Arquivo); } else { if (!Directory.Exists(Empresas.Configuracoes[emp].PastaValidado)) { Directory.CreateDirectory(Empresas.Configuracoes[emp].PastaValidado); } string ArquivoNovo = Empresas.Configuracoes[emp].PastaValidado + "\\" + Path.GetFileName(Arquivo); Functions.Move(Arquivo, ArquivoNovo); this.GravarXMLRetornoValidacao(Arquivo, "1", "XML assinado e validado com sucesso."); } } catch (Exception ex) { try { this.GravarXMLRetornoValidacao(Arquivo, "4", "Ocorreu um erro ao validar o XML: " + ex.Message); new Auxiliar().MoveArqErro(Arquivo); } catch { //Se deu algum erro na hora de gravar o retorno do erro para o ERP, infelizmente não posso fazer nada. //Isso pode acontecer se falhar rede, hd, problema de permissão de pastas, etc... Wandrey 23/03/2010 } } } else { if (TipoArqXml.nRetornoTipoArq == -1) { /// /// OPS!!! Arquivo de NFS-e enviado p/ a pasta de validação, mas não existe definicao de schemas p/ sua validacao /// this.GravarXMLRetornoValidacao(Arquivo, "1", "XML não validado contra o schema da prefeitura. XML: " + TipoArqXml.cRetornoTipoArq); new Auxiliar().MoveArqErro(Arquivo); } else { try { this.GravarXMLRetornoValidacao(Arquivo, "5", "Ocorreu um erro ao validar o XML: " + TipoArqXml.cRetornoTipoArq); new Auxiliar().MoveArqErro(Arquivo); } catch { //Se deu algum erro na hora de gravar o retorno do erro para o ERP, infelizmente não posso fazer nada. //Isso pode acontecer se falhar rede, hd, problema de permissão de pastas, etc... Wandrey 23/03/2010 } } } } }