public async Task ManifestaNotas() { IEnumerable <Informacao> informacoes = await _rep.GetInformacoes(); foreach (Informacao info in informacoes) { try { DateTime dataManifestacao = DateTime.Now; RecepcaoEvento consulta = new RecepcaoEvento(info.Versao, info.Chave, info.CodigoOrgao, info.TipoAmbiente, info.Cnpj, dataManifestacao.ToString("yyyy-MM-ddTHH:mm:ss") + "-03:00", info.CodigoEvento, info.NumSeqEvento, info.VersaoEvento, info.Descricao, "", ""); try { Resultado resultado = RequesteRecepcaoEvento(url_webservice, "", @dir_certificados + info.PathCertificado, info.Senha, consulta); } catch (Exception ex) { if (ex.Message == "Rejeicao: A data do evento nao pode ser menor que a data de emissao da NF-e" || ex.Message == "Rejeicao: A data do evento nao pode ser menor que a data de autorizacao para NF-e nao emitida em contingencia") { consulta.DhEvento = dataManifestacao.AddHours(1).ToString("yyyy-MM-ddTHH:mm:ss") + "-03:00"; Resultado result = RequesteRecepcaoEvento(url_webservice, null, @dir_certificados + info.PathCertificado, info.Senha, consulta); } else if (ex.Message == "Rejeicao: A data do evento nao pode ser maior que a data do processamento") { consulta.DhEvento = dataManifestacao.AddHours(-1).ToString("yyyy-MM-ddTHH:mm:ss") + "-03:00"; Resultado result = RequesteRecepcaoEvento(url_webservice, null, @dir_certificados + info.PathCertificado, info.Senha, consulta); } else { throw new Exception(ex.Message); } } await _rep.ConfirmaManifestacao(1, info.Chave); } catch (Exception ex) { if (ex.Message == "Rejeicao: Duplicidade de evento") { await _rep.ConfirmaManifestacao(1, info.Chave); } else { throw new Exception("Error ao Manifestar DFe \n" + ex.Message); } } Console.WriteLine($"\n \t \t CNPJ: {info.Cnpj} -- Chave: {info.Chave} \n"); } }
private Resultado RequesteRecepcaoEvento(string url_webservice, string xJust, string certificado_path, string password, RecepcaoEvento consulta) { string msg_padrao = "<envEvento xmlns=\"http://www.portalfiscal.inf.br/nfe\" versao=\"" + consulta.Versao + "\"><idLote>1</idLote><evento versao=\"" + consulta.Versao + "\"><infEvento Id=\"ID" + consulta.TpEvento + consulta.ChNFE + "01\"><cOrgao>" + consulta.COrgao + "</cOrgao><tpAmb>" + consulta.TpAmb + "</tpAmb><CNPJ>" + consulta.CNPJ + "</CNPJ><chNFe>" + consulta.ChNFE + "</chNFe><dhEvento>" + consulta.DhEvento + "</dhEvento><tpEvento>" + consulta.TpEvento + "</tpEvento><nSeqEvento>" + consulta.NSeqEvento + "</nSeqEvento><verEvento>" + consulta.VerEvento + "</verEvento><detEvento versao=\"" + consulta.VerEvento + "\"><descEvento>" + consulta.DescEvento + "</descEvento>" + ((!String.IsNullOrWhiteSpace(xJust)) ? "<xJust>" + xJust + "</xJust>" : "") + "</detEvento></infEvento></evento></envEvento>"; XmlDocument xmlAss = new XmlDocument(); xmlAss.LoadXml(AssinaXML(msg_padrao, consulta.ChNFE, consulta.TpEvento, certificado_path, password).OuterXml); string msg_soap = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:nfer=\"http://www.portalfiscal.inf.br/nfe/wsdl/NFeRecepcaoEvento4\"><soapenv:Header/><soapenv:Body><nfer:nfeDadosMsg>" + xmlAss.InnerXml + "</nfer:nfeDadosMsg></soapenv:Body></soapenv:Envelope>"; XmlDocument Resposta_WS = new XmlDocument(); string result_request = ""; Resultado retorno; try { result_request = SOAP_WEBREQUEST(url_webservice, msg_soap, certificado_path, password); } catch (WebException) { throw new WebException("Erro na conexão com o webservice"); } try { Resposta_WS.LoadXml(result_request); retorno.verAplic = Resposta_WS.GetElementsByTagName("verAplic").Item(1).FirstChild.Value; retorno.cStat = Resposta_WS.GetElementsByTagName("cStat").Item(1).FirstChild.Value; retorno.xMotivo = Resposta_WS.GetElementsByTagName("xMotivo").Item(1).FirstChild.Value; retorno.cOrgao = Resposta_WS.GetElementsByTagName("cOrgao").Item(1).FirstChild.Value; retorno.tpEvento = Resposta_WS.GetElementsByTagName("tpEvento").Item(0).FirstChild.Value; retorno.chNFe = Resposta_WS.GetElementsByTagName("chNFe").Item(0).FirstChild.Value; } catch { throw new Exception("Erro nos dados de retorno da SEFAZ"); } if (retorno.cStat != "135") { throw new Exception(retorno.xMotivo); } return(retorno); }