private void AssinarXMLLote(int emp) { AssinaturaDigital ad = new AssinaturaDigital(); ad.AssinarLoteESocial(ConteudoXML, emp); }
/// <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(); bool Assinou = true; //Assinar o XML se tiver tag para assinar AssinaturaDigital oAD = new AssinaturaDigital(); XmlDocument conteudoXML = null; try { conteudoXML = new XmlDocument(); conteudoXML.Load(Arquivo); RespTecnico respTecnico = new RespTecnico(Empresas.Configuracoes[emp].RespTecCNPJ, Empresas.Configuracoes[emp].RespTecXContato, Empresas.Configuracoes[emp].RespTecEmail, Empresas.Configuracoes[emp].RespTecTelefone, Empresas.Configuracoes[emp].RespTecIdCSRT, Empresas.Configuracoes[emp].RespTecCSRT); respTecnico.AdicionarResponsavelTecnico(conteudoXML); if (TipoArqXml.nRetornoTipoArq >= 1 && TipoArqXml.nRetornoTipoArq <= SchemaXML.MaxID) { EncryptAssinatura(Arquivo); if (TipoArqXml.TargetNameSpace.Contains("envioLoteEventos") && TipoArqXml.TargetNameSpace.Contains("reinf")) //Lote de eventos do EFDReinf { oAD.AssinarLoteEFDReinf(Arquivo, emp); } else if (TipoArqXml.TargetNameSpace.Contains("lote/eventos") && TipoArqXml.TargetNameSpace.Contains("esocial")) //Lote de eventos do eSocial { oAD.AssinarLoteESocial(Arquivo, emp); } else if (TipoArqXml.TagAssinatura == "eSocial") { oAD.Assinar(Arquivo, emp, Empresas.Configuracoes[emp].UnidadeFederativaCodigo, AlgorithmType.Sha256, false); } else if (TipoArqXml.TagAssinatura == "Reinf") { oAD.Assinar(Arquivo, emp, Empresas.Configuracoes[emp].UnidadeFederativaCodigo, AlgorithmType.Sha256); } else { oAD.Assinar(conteudoXML, 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)) { conteudoXML.Load(Arquivo); QRCodeNFCe qrCode = new QRCodeNFCe(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.UrlNFCeMH : Empresas.Configuracoes[emp].URLConsultaDFe.UrlNFCeM; qrCode.GerarLinkConsulta(url, Empresas.Configuracoes[emp].IdentificadorCSC, Empresas.Configuracoes[emp].TokenCSC, linkUFManual); StreamWriter sw = File.CreateText(Arquivo); sw.Write(conteudoXML.OuterXml); sw.Close(); } } #endregion #region Adicionar a tag do QrCode no MDFe else if (Arquivo.EndsWith(Propriedade.Extensao(Propriedade.TipoEnvio.MDFe).EnvioXML, StringComparison.InvariantCultureIgnoreCase)) { conteudoXML.Load(Arquivo); QRCodeMDFe qrCodeMDFe = new QRCodeMDFe(conteudoXML); qrCodeMDFe.MontarLinkQRCode(Empresas.Configuracoes[emp].X509Certificado); StreamWriter sw = File.CreateText(Arquivo); sw.Write(conteudoXML.OuterXml); sw.Close(); } else if (Arquivo.EndsWith(Propriedade.Extensao(Propriedade.TipoEnvio.CTe).EnvioXML, StringComparison.InvariantCultureIgnoreCase)) { conteudoXML.Load(Arquivo); string urlCte = Empresas.Configuracoes[emp].AmbienteCodigo == (int)TipoAmbiente.taHomologacao ? Empresas.Configuracoes[emp].URLConsultaDFe.UrlCTeQrCodeH : Empresas.Configuracoes[emp].URLConsultaDFe.UrlCTeQrCodeP; QRCodeCTe qrCodeCTe = new QRCodeCTe(conteudoXML, urlCte); qrCodeCTe.MontarLinkQRCode(Empresas.Configuracoes[emp].X509Certificado); StreamWriter sw = File.CreateText(Arquivo); sw.Write(conteudoXML.OuterXml); sw.Close(); } #endregion // 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); GravarXMLRetornoValidacao(Arquivo, "1", "XML assinado e validado com sucesso."); } } catch (Exception ex) { try { 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 /// GravarXMLRetornoValidacao(Arquivo, "1", "XML não validado contra o schema da prefeitura. XML: " + TipoArqXml.cRetornoTipoArq); new Auxiliar().MoveArqErro(Arquivo); } else { try { 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 } } } } }