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(); }
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; }
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(); }
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); }