/// <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 } } } }