Ejemplo n.º 1
0
        /// <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
                        }
                    }
                }
            }
        }
Ejemplo n.º 2
0
        private void AssinarXMLLote(int emp)
        {
            AssinaturaDigital ad = new AssinaturaDigital();

            ad.AssinarLoteEFDReinf(ConteudoXML, emp);
        }