protected override void TratarRetornoConsultarLoteRps(RetornoWebservice retornoWebservice, NotaFiscalCollection notas) { // Analisa mensagem de retorno var xmlRet = XDocument.Parse(retornoWebservice.XmlRetorno); MensagemErro(retornoWebservice, xmlRet, "ConsultarLoteRpsResult"); if (retornoWebservice.Erros.Any()) { return; } var retornoLote = xmlRet.ElementAnyNs("ConsultarLoteRpsResult"); var listaNfse = retornoLote?.ElementAnyNs("ListaNfse"); if (listaNfse == null) { retornoWebservice.Erros.Add(new Evento { Codigo = "0", Descricao = "Lista de NFSe não encontrada! (ListaNfse)" }); return; } retornoWebservice.Sucesso = true; foreach (var compNfse in listaNfse.ElementsAnyNs("CompNfse")) { var nfse = compNfse.ElementAnyNs("Nfse").ElementAnyNs("InfNfse"); var numeroNFSe = nfse.ElementAnyNs("Numero")?.GetValue <string>() ?? string.Empty; var chaveNFSe = nfse.ElementAnyNs("CodigoVerificacao")?.GetValue <string>() ?? string.Empty; var dataEmissao = nfse.ElementAnyNs("DataEmissao")?.GetValue <DateTime>() ?? DateTime.Now; var numeroRps = nfse?.ElementAnyNs("IdentificacaoRps")?.ElementAnyNs("Numero")?.GetValue <string>() ?? string.Empty; GravarNFSeEmDisco(compNfse.AsString(true), $"NFSe-{numeroNFSe}-{chaveNFSe}-.xml", dataEmissao); var nota = notas.FirstOrDefault(x => x.IdentificacaoRps.Numero == numeroRps); if (nota == null) { notas.Load(compNfse.ToString()); } else { nota.IdentificacaoNFSe.Numero = numeroNFSe; nota.IdentificacaoNFSe.Chave = chaveNFSe; nota.IdentificacaoNFSe.DataEmissao = dataEmissao; } } }
private RetornoWebservice ConsultarRpsNfseSP(string numeroRPS, string serieRPS, string numeroNFSe, NotaFiscalCollection notas) { var retornoWebservice = new RetornoWebservice(); if (string.IsNullOrWhiteSpace(numeroRPS) & string.IsNullOrWhiteSpace(numeroNFSe)) { retornoWebservice.Erros.Add(new Evento { Codigo = "0", Descricao = "Número do RPS/NFSe não informado para a consulta." }); return(retornoWebservice); } var loteBuilder = new StringBuilder(); loteBuilder.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); loteBuilder.Append("<p1:PedidoConsultaNFe xmlns:p1=\"http://www.prefeitura.sp.gov.br/nfe\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">"); loteBuilder.Append("<Cabecalho Versao=\"1\">"); loteBuilder.Append($"<CPFCNPJRemetente><CNPJ>{Configuracoes.PrestadorPadrao.CpfCnpj.ZeroFill(14)}</CNPJ></CPFCNPJRemetente>"); loteBuilder.Append("</Cabecalho>"); loteBuilder.Append("<Detalhe>"); if (!string.IsNullOrWhiteSpace(numeroRPS)) { // RPS loteBuilder.Append("<ChaveRPS>"); loteBuilder.Append($"<InscricaoPrestador>{Configuracoes.PrestadorPadrao.InscricaoMunicipal.ZeroFill(8)}</InscricaoPrestador>"); loteBuilder.Append($"<SerieRPS>{serieRPS}</SerieRPS>"); loteBuilder.Append($"<NumeroRPS>{numeroRPS}</NumeroRPS>"); loteBuilder.Append("</ChaveRPS>"); } else { // NFSe loteBuilder.Append("<ChaveNFe>"); loteBuilder.Append($"<InscricaoPrestador>{Configuracoes.PrestadorPadrao.InscricaoMunicipal.ZeroFill(8)}</InscricaoPrestador>"); loteBuilder.Append($"<NumeroNFe>{numeroNFSe}</NumeroNFe>"); loteBuilder.Append("</ChaveNFe>"); } loteBuilder.Append("</Detalhe>"); loteBuilder.Append("</p1:PedidoConsultaNFe>"); retornoWebservice.XmlEnvio = loteBuilder.ToString(); if (Configuracoes.Geral.RetirarAcentos) { retornoWebservice.XmlEnvio = retornoWebservice.XmlEnvio.RemoveAccent(); } retornoWebservice.XmlEnvio = XmlSigning.AssinarXml(retornoWebservice.XmlEnvio, "p1:PedidoConsultaNFe", "", Certificado); GravarArquivoEmDisco(retornoWebservice.XmlEnvio, $"ConNotaRps-{numeroRPS}-env.xml"); // Verifica Schema ValidarSchema(retornoWebservice, "PedidoConsultaNFe_v01.xsd"); if (retornoWebservice.Erros.Any()) { return(retornoWebservice); } // Recebe mensagem de retorno try { using (var cliente = GetCliente(TipoUrl.ConsultaNFSeRps)) { retornoWebservice.XmlRetorno = cliente.ConsultaNFe(retornoWebservice.XmlEnvio); } } catch (Exception ex) { retornoWebservice.Erros.Add(new Evento { Codigo = "0", Descricao = ex.Message }); return(retornoWebservice); } GravarArquivoEmDisco(retornoWebservice.XmlRetorno, $"ConNotaRps-{numeroRPS}-ret.xml"); // Analisa mensagem de retorno var xmlRet = XDocument.Parse(retornoWebservice.XmlRetorno); MensagemErro(retornoWebservice, xmlRet, "RetornoConsulta"); if (retornoWebservice.Erros.Any()) { return(retornoWebservice); } retornoWebservice.Sucesso = xmlRet.Root?.ElementAnyNs("Cabecalho")?.ElementAnyNs("Sucesso")?.GetValue <bool>() ?? false; foreach (var nfse in xmlRet.Root.ElementsAnyNs("NFe")) { notas.Load(nfse.ToString()); } return(retornoWebservice); }
public override RetornoWebservice ConsultarLoteRps(int lote, string protocolo, NotaFiscalCollection notas) { var retornoWebservice = new RetornoWebservice(); var loteBuilder = new StringBuilder(); loteBuilder.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); loteBuilder.Append("<PedidoConsultaLote xmlns=\"http://www.prefeitura.sp.gov.br/nfe\" xmlns:xsi = \"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd = \"http://www.w3.org/2001/XMLSchema\">"); loteBuilder.Append("<Cabecalho xmlns=\"\" Versao=\"1\">"); loteBuilder.Append($"<CPFCNPJRemetente><CNPJ>{Configuracoes.PrestadorPadrao.CpfCnpj.ZeroFill(14)}</CNPJ></CPFCNPJRemetente>"); loteBuilder.Append($"<NumeroLote>{lote}</NumeroLote>"); loteBuilder.Append("</Cabecalho>"); loteBuilder.Append("</PedidoConsultaLote>"); retornoWebservice.XmlEnvio = loteBuilder.ToString(); if (Configuracoes.Geral.RetirarAcentos) { retornoWebservice.XmlEnvio = retornoWebservice.XmlEnvio.RemoveAccent(); } retornoWebservice.XmlEnvio = XmlSigning.AssinarXml(retornoWebservice.XmlEnvio, "PedidoConsultaLote", "", Certificado); GravarArquivoEmDisco(retornoWebservice.XmlEnvio, $"ConsultarSituacao-{DateTime.Now:yyyyMMddssfff}-{protocolo}-env.xml"); // Verifica Schema ValidarSchema(retornoWebservice, "PedidoConsultaLote_v01.xsd"); if (retornoWebservice.Erros.Any()) { return(retornoWebservice); } // Recebe mensagem de retorno try { using (var cliente = GetCliente(TipoUrl.ConsultarSituacao)) { retornoWebservice.XmlRetorno = cliente.ConsultaLote(retornoWebservice.XmlEnvio); retornoWebservice.EnvelopeEnvio = cliente.EnvelopeEnvio; retornoWebservice.EnvelopeRetorno = cliente.EnvelopeRetorno; } } catch (Exception ex) { retornoWebservice.Erros.Add(new Evento { Codigo = "0", Descricao = ex.Message }); return(retornoWebservice); } GravarArquivoEmDisco(retornoWebservice.XmlRetorno, $"ConsultarSituacao-{DateTime.Now:yyyyMMddssfff}-{lote}-ret.xml"); // Analisa mensagem de retorno var xmlRet = XDocument.Parse(retornoWebservice.XmlRetorno); MensagemErro(retornoWebservice, xmlRet, "RetornoConsulta"); if (retornoWebservice.Erros.Any()) { return(retornoWebservice); } retornoWebservice.Sucesso = xmlRet.Root?.ElementAnyNs("Cabecalho")?.ElementAnyNs("Sucesso")?.GetValue <bool>() ?? false; foreach (var nfse in xmlRet.Root.ElementsAnyNs("NFe")) { var chaveNFSe = nfse.ElementAnyNs("ChaveNFe"); var numeroNFSe = chaveNFSe?.ElementAnyNs("NumeroNFe")?.GetValue <string>() ?? string.Empty; var codigoVerificacao = chaveNFSe?.ElementAnyNs("CodigoVerificacao")?.GetValue <string>() ?? string.Empty; var dataNFSe = nfse.ElementAnyNs("DataEmissaoNFe")?.GetValue <DateTime>() ?? DateTime.Now; var chaveRPS = nfse.ElementAnyNs("ChaveRPS"); var numeroRps = chaveRPS?.ElementAnyNs("NumeroRPS")?.GetValue <string>() ?? string.Empty; GravarNFSeEmDisco(nfse.ToString(), $"NFSe-{numeroNFSe}-{codigoVerificacao}-.xml", dataNFSe); var nota = notas.FirstOrDefault(x => x.IdentificacaoRps.Numero == numeroRps); if (nota == null) { notas.Load(nfse.ToString()); } else { nota.IdentificacaoNFSe.Numero = numeroNFSe; nota.IdentificacaoNFSe.Chave = codigoVerificacao; } } return(retornoWebservice); }
public override RetornoWebservice ConsultarLoteRps(int lote, string protocolo, NotaFiscalCollection notas) { var retornoWebservice = new RetornoWebservice(); var loteBuilder = new StringBuilder(); loteBuilder.Append("<WS_ConsultaLoteRps.Execute xmlns:fiss=\"FISS-LEX\">"); loteBuilder.Append("<fiss:Consultarloterpsenvio>"); loteBuilder.Append("<Prestador>"); loteBuilder.Append($"<Cnpj>{Configuracoes.PrestadorPadrao.CpfCnpj.ZeroFill(14)}</Cnpj>"); loteBuilder.Append($"<InscricaoMunicipal>{Configuracoes.PrestadorPadrao.InscricaoMunicipal}</InscricaoMunicipal>"); loteBuilder.Append("</Prestador>"); loteBuilder.Append($"<Protocolo>{protocolo}</Protocolo>"); loteBuilder.Append("</fiss:Consultarloterpsenvio>"); loteBuilder.Append("</WS_ConsultaLoteRps.Execute>"); retornoWebservice.XmlEnvio = loteBuilder.ToString(); if (Configuracoes.Geral.RetirarAcentos) { retornoWebservice.XmlEnvio = retornoWebservice.XmlEnvio.RemoveAccent(); } GravarArquivoEmDisco(retornoWebservice.XmlEnvio, $"ConsultarLote-{DateTime.Now:yyyyMMddssfff}-{protocolo}-env.xml"); // Verifica Schema ValidarSchema(retornoWebservice, GetSchema(TipoUrl.ConsultarLoteRps)); if (retornoWebservice.Erros.Any()) { return(retornoWebservice); } // Recebe mensagem de retorno try { using (var cliente = GetClient(TipoUrl.ConsultarLoteRps)) { retornoWebservice.XmlRetorno = cliente.ConsultarLoteRps(GerarCabecalho(), retornoWebservice.XmlEnvio); } } catch (Exception ex) { retornoWebservice.Erros.Add(new Evento { Codigo = "0", Descricao = ex.Message }); return(retornoWebservice); } GravarArquivoEmDisco(retornoWebservice.XmlRetorno, $"ConsultarLote-{DateTime.Now:yyyyMMddssfff}-{lote}-ret.xml"); // Analisa mensagem de retorno var xmlRet = XDocument.Parse(AjustarRetorno(retornoWebservice.XmlRetorno)); MensagemErro(retornoWebservice, xmlRet, "WS_ConsultaLoteRps.ExecuteResponse", "Listamensagemretorno", "tcMensagemRetorno"); if (retornoWebservice.Erros.Any()) { return(retornoWebservice); } var rootElement = xmlRet.ElementAnyNs("WS_ConsultaLoteRps.ExecuteResponse").ElementAnyNs("Consultarloterpsresposta"); var listaNfse = rootElement?.ElementAnyNs("ListaNfse"); if (listaNfse == null) { retornoWebservice.Erros.Add(new Evento { Codigo = "0", Descricao = "Nenhuma NFSe retornada pelo webservice." }); return(retornoWebservice); } retornoWebservice.Sucesso = true; foreach (var compNfse in listaNfse.ElementsAnyNs("CompNfse")) { var nfse = compNfse.ElementAnyNs("Nfse").ElementAnyNs("InfNfse"); var numeroNFSe = nfse.ElementAnyNs("Numero")?.GetValue <string>() ?? string.Empty; var chaveNFSe = nfse.ElementAnyNs("CodigoVerificacao")?.GetValue <string>() ?? string.Empty; var dataNFSe = nfse.ElementAnyNs("DataEmissao")?.GetValue <DateTime>() ?? DateTime.Now; var numeroRps = nfse?.ElementAnyNs("IdentificacaoRps")?.ElementAnyNs("Numero")?.GetValue <string>() ?? string.Empty; GravarNFSeEmDisco(compNfse.AsString(true), $"NFSe-{numeroNFSe}-{chaveNFSe}-.xml", dataNFSe); var nota = notas.FirstOrDefault(x => x.IdentificacaoRps.Numero == numeroRps); if (nota == null) { notas.Load(compNfse.ToString()); } else { nota.IdentificacaoNFSe.Numero = numeroNFSe; nota.IdentificacaoNFSe.Chave = chaveNFSe; } } return(retornoWebservice); }
public override RetornoWebservice ConsultarLoteRps(int lote, string protocolo, NotaFiscalCollection notas) { var retornoWebservice = new RetornoWebservice(); var loteBuilder = new StringBuilder(); loteBuilder.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); switch (Configuracoes.WebServices.Ambiente) { case DFeTipoAmbiente.Homologacao: loteBuilder.Append("<ConsultarLoteRpsEnvio xmlns=\"http://www.abrasf.org.br/nfse.xsd\" > "); loteBuilder.Append("<Prestador>"); loteBuilder.Append($"<Cnpj>{Configuracoes.PrestadorPadrao.CpfCnpj.ZeroFill(14)}</Cnpj>"); break; case DFeTipoAmbiente.Producao: loteBuilder.Append("<ConsultarLoteRpsEnvio xmlns=\"http://www.abrasf.org.br/ABRASF/arquivos/nfse.xsd\" > "); loteBuilder.Append("<Prestador>"); loteBuilder.Append($"<CpfCnpj><Cnpj>{Configuracoes.PrestadorPadrao.CpfCnpj.ZeroFill(14)}</Cnpj></CpfCnpj>"); break; } loteBuilder.Append($"<InscricaoMunicipal>{Configuracoes.PrestadorPadrao.InscricaoMunicipal}</InscricaoMunicipal>"); loteBuilder.Append("</Prestador>"); loteBuilder.Append($"<Protocolo>{protocolo}</Protocolo>"); loteBuilder.Append("</ConsultarLoteRpsEnvio>"); retornoWebservice.XmlEnvio = loteBuilder.ToString(); if (Configuracoes.Geral.RetirarAcentos) { retornoWebservice.XmlEnvio = retornoWebservice.XmlEnvio.RemoveAccent(); } //Versão 2.02 da Abrasaf não define a assinatura da consulta de lotes //retornoWebservice.XmlEnvio = XmlSigning.AssinarXml(retornoWebservice.XmlEnvio, "ConsultarLoteRpsEnvio", "", Certificado); GravarArquivoEmDisco(retornoWebservice.XmlEnvio, $"ConsultarLote-{DateTime.Now:yyyyMMddssfff}-{protocolo}-env.xml"); // Verifica Schema ValidarSchema(retornoWebservice, "nfse_v202.xsd"); if (retornoWebservice.Erros.Any()) { return(retornoWebservice); } // Recebe mensagem de retorno try { using (var cliente = GetCliente(TipoUrl.ConsultarLoteRps)) { retornoWebservice.XmlRetorno = cliente.ConsultarLoteRps(GerarCabecalho(), retornoWebservice.XmlEnvio); } } catch (Exception ex) { retornoWebservice.Erros.Add(new Evento { Codigo = "0", Descricao = ex.Message }); return(retornoWebservice); } GravarArquivoEmDisco(retornoWebservice.XmlRetorno, $"ConsultarLote-{DateTime.Now:yyyyMMddssfff}-{lote}-ret.xml"); // Analisa mensagem de retorno var xmlRet = XDocument.Parse(retornoWebservice.XmlRetorno); MensagemErro(retornoWebservice, xmlRet, "ConsultarLoteRpsResposta"); if (retornoWebservice.Erros.Any()) { return(retornoWebservice); } var retornoLote = xmlRet.ElementAnyNs("ConsultarLoteRpsResposta"); var listaNfse = retornoLote?.ElementAnyNs("ListaNfse"); if (listaNfse == null) { retornoWebservice.Erros.Add(new Evento { Codigo = "0", Descricao = "Lista de NFSe não encontrada! (ListaNfse)" }); return(retornoWebservice); } retornoWebservice.Sucesso = true; foreach (var compNfse in listaNfse.ElementsAnyNs("CompNfse")) { var nfse = compNfse.ElementAnyNs("Nfse").ElementAnyNs("InfNfse"); var numeroNFSe = nfse.ElementAnyNs("Numero")?.GetValue <string>() ?? string.Empty; var chaveNFSe = nfse.ElementAnyNs("CodigoVerificacao")?.GetValue <string>() ?? string.Empty; var dataNFSe = nfse.ElementAnyNs("DataEmissao")?.GetValue <DateTime>() ?? DateTime.Now; var numeroRps = nfse?.ElementAnyNs("IdentificacaoRps")?.ElementAnyNs("Numero")?.GetValue <string>() ?? string.Empty; GravarNFSeEmDisco(compNfse.ToString(), $"NFSe-{numeroNFSe}-{chaveNFSe}-.xml", dataNFSe); var nota = notas.FirstOrDefault(x => x.IdentificacaoRps.Numero == numeroRps); if (nota == null) { notas.Load(compNfse.ToString()); } else { nota.IdentificacaoNFSe.Numero = numeroNFSe; nota.IdentificacaoNFSe.Chave = chaveNFSe; } } return(retornoWebservice); }
public override RetornoWebservice EnviarSincrono(int lote, NotaFiscalCollection notas) { var retornoWebservice = new RetornoWebservice(); if (lote == 0) { retornoWebservice.Erros.Add(new Evento { Codigo = "0", Descricao = "Lote não informado." }); } if (notas.Count == 0) { retornoWebservice.Erros.Add(new Evento { Codigo = "0", Descricao = "Nenhuma RPS informada." }); } if (notas.Count > 1) { retornoWebservice.Erros.Add(new Evento { Codigo = "0", Descricao = "Apenas uma RPS pode ser enviada em modo Sincrono." }); } if (retornoWebservice.Erros.Count > 0) { return(retornoWebservice); } var xmlLote = new StringBuilder(); xmlLote.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); xmlLote.Append("<GerarNfseEnvio xmlns=\"http://notacarioca.rio.gov.br/WSNacional/XSD/1/nfse_pcrj_v01.xsd\">"); var xmlRps = WriteXmlRps(notas[0], false, false); XmlSigning.AssinarXml(xmlRps, "Rps", "InfRps", Certificado); GravarRpsEmDisco(xmlRps, $"Rps-{notas[0].IdentificacaoRps.DataEmissao:yyyyMMdd}-{notas[0].IdentificacaoRps.Numero}.xml", notas[0].IdentificacaoRps.DataEmissao); xmlLote.Append(xmlRps); xmlLote.Append("</GerarNfseEnvio>"); retornoWebservice.XmlEnvio = xmlLote.ToString(); if (Configuracoes.Geral.RetirarAcentos) { retornoWebservice.XmlEnvio = retornoWebservice.XmlEnvio.RemoveAccent(); } GravarArquivoEmDisco(retornoWebservice.XmlEnvio, $"lote-sinc-{lote}-env.xml"); // Verifica Schema ValidarSchema(retornoWebservice, GetSchema(TipoUrl.EnviarSincrono)); if (retornoWebservice.Erros.Any()) { return(retornoWebservice); } // Recebe mensagem de retorno try { using (var cliente = GetClient(TipoUrl.EnviarSincrono)) { retornoWebservice.XmlRetorno = cliente.GerarNfse(GerarCabecalho(), retornoWebservice.XmlEnvio); retornoWebservice.EnvelopeEnvio = cliente.EnvelopeEnvio; retornoWebservice.EnvelopeRetorno = cliente.EnvelopeRetorno; } } catch (Exception ex) { retornoWebservice.Erros.Add(new Evento { Codigo = "0", Descricao = ex.Message }); return(retornoWebservice); } GravarArquivoEmDisco(retornoWebservice.XmlRetorno, $"lote-sinc-{lote}-ret.xml"); // Analisa mensagem de retorno var xmlRet = XDocument.Parse(retornoWebservice.XmlRetorno); MensagemErro(retornoWebservice, xmlRet, "GerarNfseResposta"); if (retornoWebservice.Erros.Any()) { return(retornoWebservice); } var compNfse = xmlRet.ElementAnyNs("GerarNfseResposta")?.ElementAnyNs("CompNfse"); var nfse = compNfse.ElementAnyNs("Nfse").ElementAnyNs("InfNfse"); var numeroNFSe = nfse.ElementAnyNs("Numero")?.GetValue <string>() ?? string.Empty; var chaveNFSe = nfse.ElementAnyNs("CodigoVerificacao")?.GetValue <string>() ?? string.Empty; var dataNFSe = nfse.ElementAnyNs("DataEmissao")?.GetValue <DateTime>() ?? DateTime.Now; var numeroRps = nfse?.ElementAnyNs("IdentificacaoRps")?.ElementAnyNs("Numero")?.GetValue <string>() ?? string.Empty; GravarNFSeEmDisco(compNfse.AsString(true), $"NFSe-{numeroNFSe}-{chaveNFSe}-.xml", dataNFSe); var nota = notas.FirstOrDefault(x => x.IdentificacaoRps.Numero == numeroRps); if (nota == null) { notas.Load(compNfse.ToString()); } else { nota.IdentificacaoNFSe.Numero = numeroNFSe; nota.IdentificacaoNFSe.Chave = chaveNFSe; } retornoWebservice.Sucesso = true; return(retornoWebservice); }
public override RetornoWebservice EnviarSincrono(int lote, NotaFiscalCollection notas) { var retornoWebservice = new RetornoWebservice(); if (lote == 0) { retornoWebservice.Erros.Add(new Evento { Codigo = "0", Descricao = "Lote não informado." }); } if (notas.Count == 0) { retornoWebservice.Erros.Add(new Evento { Codigo = "0", Descricao = "RPS não informado." }); } if (notas.Count > 3) { retornoWebservice.Erros.Add(new Evento { Codigo = "0", Descricao = "Apenas 3 RPS podem ser enviados em modo Sincrono." }); } if (retornoWebservice.Erros.Count > 0) { return(retornoWebservice); } var xmlLoteRps = new StringBuilder(); foreach (var nota in notas) { var xmlRps = GetXmlRps(nota, false, false); xmlLoteRps.Append(xmlRps); GravarRpsEmDisco(xmlRps, $"Rps-{nota.IdentificacaoRps.DataEmissao:yyyyMMdd}-{nota.IdentificacaoRps.Numero}.xml", nota.IdentificacaoRps.DataEmissao); } var xmlLote = new StringBuilder(); xmlLote.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); xmlLote.Append($"<GerarNfseEnvio {GetNamespace()}>"); xmlLote.Append($"<LoteRps Id=\"L{lote}\">"); xmlLote.Append($"<NumeroLote>{lote}</NumeroLote>"); xmlLote.Append($"<Cnpj>{Configuracoes.PrestadorPadrao.CpfCnpj.ZeroFill(14)}</Cnpj>"); xmlLote.Append($"<InscricaoMunicipal>{Configuracoes.PrestadorPadrao.InscricaoMunicipal}</InscricaoMunicipal>"); xmlLote.Append($"<QuantidadeRps>{notas.Count}</QuantidadeRps>"); xmlLote.Append("<ListaRps>"); xmlLote.Append(xmlLoteRps); xmlLote.Append("</ListaRps>"); xmlLote.Append("</LoteRps>"); xmlLote.Append("</GerarNfseEnvio>"); retornoWebservice.XmlEnvio = xmlLote.ToString(); if (Configuracoes.Geral.RetirarAcentos) { retornoWebservice.XmlEnvio = retornoWebservice.XmlEnvio.RemoveAccent(); } retornoWebservice.XmlEnvio = XmlSigning.AssinarXmlTodos(retornoWebservice.XmlEnvio, "Rps", "InfRps", Certificado); retornoWebservice.XmlEnvio = XmlSigning.AssinarXml(retornoWebservice.XmlEnvio, "GerarNfseEnvio", "LoteRps", Certificado); GravarArquivoEmDisco(retornoWebservice.XmlEnvio, $"lote-{lote}-env.xml"); // Verifica Schema ValidarSchema(retornoWebservice, GetSchema(TipoUrl.EnviarSincrono)); if (retornoWebservice.Erros.Any()) { return(retornoWebservice); } // Recebe mensagem de retorno try { using (var cliente = GetClient(TipoUrl.EnviarSincrono)) { retornoWebservice.XmlRetorno = cliente.GerarNfse(GerarCabecalho(), retornoWebservice.XmlEnvio); } } catch (Exception ex) { retornoWebservice.Erros.Add(new Evento { Codigo = "0", Descricao = ex.Message }); return(retornoWebservice); } GravarArquivoEmDisco(retornoWebservice.XmlRetorno, $"lote-{lote}-ret.xml"); // Analisa mensagem de retorno var xmlRet = XDocument.Parse(retornoWebservice.XmlRetorno); MensagemErro(retornoWebservice, xmlRet, "GerarNfseResposta"); MensagemErro(retornoWebservice, xmlRet, "GerarNfseResposta", "ListaMensagemRetornoLote"); if (retornoWebservice.Erros.Any()) { return(retornoWebservice); } retornoWebservice.NumeroLote = xmlRet.Root?.ElementAnyNs("NumeroLote")?.GetValue <string>() ?? string.Empty; retornoWebservice.DataLote = xmlRet.Root?.ElementAnyNs("DataRecebimento")?.GetValue <DateTime>() ?? DateTime.MinValue; retornoWebservice.Protocolo = xmlRet.Root?.ElementAnyNs("Protocolo")?.GetValue <string>() ?? string.Empty; retornoWebservice.Sucesso = !retornoWebservice.NumeroLote.IsEmpty(); if (!retornoWebservice.Sucesso) { return(retornoWebservice); } var retornoLote = xmlRet.ElementAnyNs("GerarNfseResposta"); var listaNfse = retornoLote?.ElementAnyNs("ListaNfse"); if (listaNfse == null) { retornoWebservice.Erros.Add(new Evento { Codigo = "0", Descricao = "Lista de NFSe não encontrada! (ListaNfse)" }); return(retornoWebservice); } retornoWebservice.Sucesso = true; foreach (var compNfse in listaNfse.ElementsAnyNs("CompNfse")) { var nfse = compNfse.ElementAnyNs("Nfse").ElementAnyNs("InfNfse"); var numeroNFSe = nfse.ElementAnyNs("Numero")?.GetValue <string>() ?? string.Empty; var chaveNFSe = nfse.ElementAnyNs("CodigoVerificacao")?.GetValue <string>() ?? string.Empty; var dataNFSe = nfse.ElementAnyNs("DataEmissao")?.GetValue <DateTime>() ?? DateTime.Now; var numeroRps = nfse?.ElementAnyNs("IdentificacaoRps")?.ElementAnyNs("Numero")?.GetValue <string>() ?? string.Empty; GravarNFSeEmDisco(compNfse.AsString(true), $"NFSe-{numeroNFSe}-{chaveNFSe}-.xml", dataNFSe); var nota = notas.FirstOrDefault(x => x.IdentificacaoRps.Numero == numeroRps); if (nota == null) { notas.Load(compNfse.ToString()); } else { nota.IdentificacaoNFSe.Numero = numeroNFSe; nota.IdentificacaoNFSe.Chave = chaveNFSe; } } return(retornoWebservice); }