protected override void PrepararCancelarNFSe(RetornoCancelar retornoWebservice)
        {
            if (retornoWebservice.NumeroNFSe.IsEmpty())
            {
                retornoWebservice.Erros.Add(new Evento {
                    Codigo = "0", Descricao = "Número da NFSe não informado para cancelamento."
                });
                return;
            }

            retornoWebservice.XmlEnvio = new StringBuilder()
                                         .Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")
                                         .Append("<es:esCancelarNfseEnvio xmlns:es=\"http://www.equiplano.com.br/esnfs\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.equiplano.com.br/enfs esCancelarNfseEnvio_v01.xsd\">")
                                         .Append("<prestador>")
                                         .Append($"<cnpj>{ Configuracoes.PrestadorPadrao.CpfCnpj }</cnpj>")
                                         .Append($"<idEntidade>{ Municipio.IdEntidade }</idEntidade>")
                                         .Append("</prestador>")
                                         .Append($"<nrNfse>{ retornoWebservice.NumeroNFSe }</nrNfse>")
                                         .Append($"<dsMotivoCancelamento>{ retornoWebservice.Motivo }</dsMotivoCancelamento>")
                                         .Append("</es:esCancelarNfseEnvio>")
                                         .ToString();
        }
        protected override void PrepararCancelarNFSe(RetornoCancelar retornoWebservice)
        {
            if (!retornoWebservice.NumeroNFSe.IsEmpty())
            {
                retornoWebservice.Erros.Add(new Evento {
                    Codigo = "0", Descricao = "Número da NFSe não informado para cancelamento."
                });
                return;
            }

            // Hash Cancelamento
            var hash = Configuracoes.PrestadorPadrao.InscricaoMunicipal.ZeroFill(8) + retornoWebservice.NumeroNFSe.ZeroFill(12);

            var hashAssinado = "";
            var rsa          = (RSACryptoServiceProvider)Certificado.PrivateKey;
            var hashBytes    = Encoding.ASCII.GetBytes(hash);

            byte[] signData = rsa.SignData(hashBytes, new SHA1CryptoServiceProvider());
            hashAssinado = Convert.ToBase64String(signData);

            var loteBuilder = new StringBuilder();

            loteBuilder.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
            loteBuilder.Append("<PedidoCancelamentoNFe xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns=\"http://www.prefeitura.sp.gov.br/nfe\">");
            loteBuilder.Append("<Cabecalho xmlns=\"\" Versao=\"1\">");
            loteBuilder.Append($"<CPFCNPJRemetente><CNPJ>{Configuracoes.PrestadorPadrao.CpfCnpj.ZeroFill(14)}</CNPJ></CPFCNPJRemetente>");
            loteBuilder.Append($"<transacao>true</transacao>");
            loteBuilder.Append("</Cabecalho>");
            loteBuilder.Append("<Detalhe xmlns=\"\">");
            loteBuilder.Append("<ChaveNFe>");
            loteBuilder.Append($"<InscricaoPrestador>{Configuracoes.PrestadorPadrao.InscricaoMunicipal.ZeroFill(8)}</InscricaoPrestador>");
            loteBuilder.Append($"<NumeroNFe>{retornoWebservice.NumeroNFSe}</NumeroNFe>");
            loteBuilder.Append("</ChaveNFe>");
            loteBuilder.Append($"<AssinaturaCancelamento>{hashAssinado}</AssinaturaCancelamento>");
            loteBuilder.Append("</Detalhe>");
            loteBuilder.Append("</PedidoCancelamentoNFe>");
            retornoWebservice.XmlEnvio = loteBuilder.ToString();
        }
示例#3
0
        protected override void TratarRetornoCancelarNFSe(RetornoCancelar retornoWebservice, NotaServicoCollection notas)
        {
            // Analisa mensagem de retorno
            var xmlRet = XDocument.Parse(AjustarRetorno(retornoWebservice.XmlRetorno));

            MensagemErro(retornoWebservice, xmlRet.Root);
            if (retornoWebservice.Erros.Count > 0)
            {
                return;
            }

            var confirmacaoCancelamento = xmlRet.ElementAnyNs("CancelarNfseResposta")?.ElementAnyNs("RetCancelamento")?.ElementAnyNs("NfseCancelamento")?.ElementAnyNs("Confirmacao");

            if (confirmacaoCancelamento == null)
            {
                retornoWebservice.Erros.Add(new Evento {
                    Codigo = "0", Descricao = "Confirmação do cancelamento não encontrada!"
                });
                return;
            }

            retornoWebservice.Data    = confirmacaoCancelamento.ElementAnyNs("DataHora")?.GetValue <DateTime>() ?? DateTime.MinValue;
            retornoWebservice.Sucesso = retornoWebservice.Data != DateTime.MinValue;

            // Se a nota fiscal cancelada existir na coleção de Notas Fiscais, atualiza seu status:
            var nota = notas.FirstOrDefault(x => x.IdentificacaoNFSe.Numero.Trim() == retornoWebservice.NumeroNFSe);

            if (nota == null)
            {
                return;
            }

            nota.Situacao = SituacaoNFSeRps.Cancelado;
            nota.Cancelamento.Pedido.CodigoCancelamento = retornoWebservice.CodigoCancelamento;
            nota.Cancelamento.DataHora           = confirmacaoCancelamento.ElementAnyNs("DataHora")?.GetValue <DateTime>() ?? DateTime.MinValue;
            nota.Cancelamento.MotivoCancelamento = retornoWebservice.Motivo;
        }
示例#4
0
        protected override void PrepararCancelarNFSe(RetornoCancelar retornoWebservice)
        {
            if (retornoWebservice.NumeroNFSe.IsEmpty() || retornoWebservice.CodigoCancelamento.IsEmpty())
            {
                retornoWebservice.Erros.Add(new Evento {
                    Codigo = "0", Descricao = "Número da NFSe/Codigo de cancelamento não informado para cancelamento."
                });
                return;
            }

            var loteBuilder = new StringBuilder();

            loteBuilder.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
            loteBuilder.Append("<pl:CancelarNfseEnvio xmlns:pl=\"http://www.issnetonline.com.br/webserviceabrasf/vsd/servico_cancelar_nfse_envio.xsd\">" +
                               "xmlns:tc=\"http://www.issnetonline.com.br/webserviceabrasf/vsd/tipos_complexos.xsd\">");
            loteBuilder.Append("<Pedido>");
            loteBuilder.Append("<tc:InfPedidoCancelamento>");
            loteBuilder.Append("<tc:IdentificacaoNfse>");
            loteBuilder.Append($"<tc:Numero>{retornoWebservice.NumeroNFSe}</tc:Numero>");
            loteBuilder.Append($"<tc:Cnpj>{Configuracoes.PrestadorPadrao.CpfCnpj.ZeroFill(14)}</tc:Cnpj>");
            loteBuilder.Append($"<tc:InscricaoMunicipal>{Configuracoes.PrestadorPadrao.InscricaoMunicipal}</tc:InscricaoMunicipal>");
            loteBuilder.Append($"<tc:CodigoMunicipio>{Configuracoes.PrestadorPadrao.Endereco.CodigoMunicipio}</tc:CodigoMunicipio>");
            loteBuilder.Append("</tc:IdentificacaoNfse>");
            loteBuilder.Append($"<tc:CodigoCancelamento>{retornoWebservice.CodigoCancelamento}</tc:CodigoCancelamento>");

            if (!retornoWebservice.Motivo.IsEmpty())
            {
                loteBuilder.Append($"<tc:MotivoCancelamentoNfse>{retornoWebservice.Motivo}</tc:MotivoCancelamentoNfse>");
            }

            loteBuilder.Append("</tc:InfPedidoCancelamento>");
            loteBuilder.Append("</Pedido>");
            loteBuilder.Append("</pl:CancelarNfseEnvio>");

            retornoWebservice.XmlEnvio = loteBuilder.ToString();
        }
示例#5
0
 protected override void AssinarCancelarNFSe(RetornoCancelar retornoWebservice)
 {
 }
 protected override void AssinarCancelarNFSe(RetornoCancelar retornoWebservice)
 {
     retornoWebservice.XmlEnvio = XmlSigning.AssinarXml(retornoWebservice.XmlEnvio, "es:esCancelarNfseEnvio", "", Certificado);
 }
 protected override void AssinarCancelarNFSe(RetornoCancelar retornoWebservice)
 {
     retornoWebservice.XmlEnvio = XmlSigning.AssinarXml(retornoWebservice.XmlEnvio, "PedidoCancelamentoNFe", "", Certificado);
 }