private async Task <List <string> > TransmitirConsultarLoteContingenciaAsync(ConfiguracaoEntity config, List <string> notasNFCe, Modelo modelo) { var retornoTransmissao = TransmitirLoteNotasFiscaisContingencia(notasNFCe, modelo); if (retornoTransmissao.TipoMensagem == TipoMensagem.ErroValidacao) { return(new List <string>() { retornoTransmissao.Mensagem }); } else if (retornoTransmissao.TipoMensagem == TipoMensagem.ServicoIndisponivel) { return(new List <string>() { mensagemErro }); } int tempoEspera = Int32.Parse(retornoTransmissao.RetEnviNFeInfRec.tMed) * 1000; List <string> erros = new List <string>(); Thread.Sleep(tempoEspera); var resultadoConsulta = ConsultarReciboLoteContingencia(retornoTransmissao.RetEnviNFeInfRec.nRec, modelo); if (resultadoConsulta == null) { return(new List <string>() { mensagemErro }); } foreach (var resultado in resultadoConsulta) { var ambiente = config.IsProducao ? Ambiente.Producao : Ambiente.Homologacao; var nota = new NotaFiscalService().GetNotaFiscalByChave(resultado.Chave); if (resultado.CodigoStatus == "100") { nota.DataAutorizacao = DateTime.ParseExact(resultado.DataAutorizacao, "yyyy-MM-ddTHH:mm:sszzz", CultureInfo.InvariantCulture); nota.Protocolo = resultado.Protocolo; nota.Status = (int)NFe.Repository.Status.ENVIADA; string xml = await nota.LoadXmlAsync(); xml = xml.Replace("<protNFe />", resultado.Xml); var notaFiscalService = new NotaFiscalService(); await notaFiscalService.SalvarAsync(nota, xml); } else { if (resultado.Motivo.Contains("Duplicidade")) { X509Certificate2 certificado; var certificadoEntity = new CertificadoRepository(new NFeContext()).GetCertificado(); var emitente = EmissorService.GetEmissor(); if (!string.IsNullOrWhiteSpace(certificadoEntity.Caminho)) { certificado = CertificateManager.GetCertificateByPath(certificadoEntity.Caminho, RijndaelManagedEncryption.DecryptRijndael(certificadoEntity.Senha)); } else { certificado = CertificateManager.GetCertificateBySerialNumber(certificadoEntity.NumeroSerial, false); } var retornoConsulta = NFeConsulta.ConsultarNotaFiscal ( nota.Chave, emitente.Endereco.CodigoUF, certificado, config.IsProducao ? Ambiente.Producao : Ambiente.Homologacao, nota.Modelo.Equals("65") ? Modelo.Modelo65 : Modelo.Modelo55 ); if (retornoConsulta.IsEnviada) { var protSerialized = XmlUtil.Serialize(retornoConsulta.Protocolo, string.Empty) .Replace("<?xml version=\"1.0\" encoding=\"utf-8\"?>", string.Empty) .Replace("TProtNFe", "protNFe"); protSerialized = Regex.Replace(protSerialized, "<infProt (.*?)>", "<infProt>"); nota.DataAutorizacao = retornoConsulta.DhAutorizacao; nota.Protocolo = retornoConsulta.Protocolo.infProt.nProt; nota.Status = (int)NFe.Repository.Status.ENVIADA; string xml = await nota.LoadXmlAsync(); xml = xml.Replace("<protNFe />", protSerialized); var notaFiscalService = new NotaFiscalService(); await notaFiscalService.SalvarAsync(nota, xml); } else { erros.Add(string.Format("Modelo: {0} Nota: {1} Série: {2} \nMotivo: {3}", nota.Modelo, nota.Numero, nota.Serie, resultado.Motivo)); //O que fazer com essas mensagens de erro? } } else { erros.Add(string.Format("Modelo: {0} Nota: {1} Série: {2} \nMotivo: {3}", nota.Modelo, nota.Numero, nota.Serie, resultado.Motivo)); //O que fazer com essas mensagens de erro? } } } return(erros); }