/// <summary> /// Assina um objeto CTe /// </summary> /// <param name="cte"></param> /// <param name="configuracaoServico"></param> /// <returns>Retorna um objeto do tipo CTe assinado</returns> public static void Assina(this CteEletronica cte, ConfiguracaoServico configuracaoServico = null) { if (cte == null) { throw new ArgumentNullException("cte"); } var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; var modeloDocumentoFiscal = cte.infCte.ide.mod; var tipoEmissao = (int)cte.infCte.ide.tpEmis; var codigoNumerico = cte.infCte.ide.cCT; var estado = cte.infCte.ide.cUF; var dataEHoraEmissao = cte.infCte.ide.dhEmi; var cnpj = cte.infCte.emit.CNPJ; var numeroDocumento = cte.infCte.ide.nCT; int serie = cte.infCte.ide.serie; var dadosChave = ChaveFiscal.ObterChave(estado, dataEHoraEmissao, cnpj, modeloDocumentoFiscal, serie, numeroDocumento, tipoEmissao, codigoNumerico); cte.infCte.Id = "CTe" + dadosChave.Chave; cte.infCte.versao = configServico.VersaoLayout; cte.infCte.ide.cDV = dadosChave.DigitoVerificador; var assinatura = AssinaturaDigital.Assina(cte, cte.infCte.Id, configServico.X509Certificate2); cte.Signature = assinatura; }
public async Task <retEnvEvento> ManifestarAsync(ChaveFiscal chaveNFe, eTipoEventoNFe tipoEvento, string justificativa = null) { if (tipoEvento != eTipoEventoNFe.CienciaOperacao && tipoEvento != eTipoEventoNFe.ConfirmacaoOperacao && tipoEvento != eTipoEventoNFe.DesconhecimentoOperacao && tipoEvento != eTipoEventoNFe.OperacaoNaoRealizada) { throw new Exception("Evento não permitido nesse serviço"); } var xmlEvento = GerarXmlEvento(chaveNFe.Chave, tipoEvento, justificativa); var arqEnv = Path.Combine("Logs", Arquivo.MontarNomeArquivo("ped-eve.xml", config)); await storage.SaveAsync(arqEnv, xmlEvento); await storage.SaveAsync($"{DateTime.Now.Ticks}-ped-eve.xml", xmlEvento); Schemas.ValidarSchema(eTipoServico.ManifestacaoDestinatario, xmlEvento, config); var envelope = SoapEnvelopeFabrica.FabricarEnvelope(eTipoServico.ManifestacaoDestinatario, xmlEvento); var sefazUrl = FabricarUrl.ObterUrl(eTipoServico.ManifestacaoDestinatario, config.TipoAmbiente, eModeloDocumento.NFe, eUF.AN); var xmlRetorno = await transmitir.TransmitirAsync(sefazUrl, envelope); var xmlRetLimpo = Soap.LimparEnvelope(xmlRetorno, "retEnvEvento").OuterXml; var arqRet = Path.Combine("Logs", Arquivo.MontarNomeArquivo("ret-eve.xml", config)); await storage.SaveAsync(arqRet, xmlRetLimpo); var retEnvEvento = XmlUtils.XmlStringParaClasse <retEnvEvento>(xmlRetLimpo); return(retEnvEvento); }
public async Task <retConsSitNFe> ConsultarPelaChave(string chaveAcesso, string versao) { var chave = new ChaveFiscal(chaveAcesso); var consSit = new consSitNFe { chNFe = chaveAcesso, tpAmb = Configuracao.TipoAmbiente, versao = versao }; var xmlEvento = XmlUtils.ClasseParaXmlString <consSitNFe>(consSit); var arqEnv = Path.Combine("Logs", $"{DateTime.Now.Ticks}-pedConsSitNFe.xml"); await storage.SaveAsync(arqEnv, xmlEvento); var modeloDoc = chave.Modelo; var sefazUrl = Fabrica.FabricarUrl.ObterUrl(eTipoServico.ConsultaSituacaoNFe, Configuracao.TipoAmbiente, modeloDoc, Configuracao.UF); var envelope = Fabrica.SoapEnvelopeFabrica.FabricarEnvelope(eTipoServico.ConsultaSituacaoNFe, xmlEvento); var retornoXmlString = await Transmitir.TransmitirAsync(sefazUrl, envelope); var retornoXmlStringLimpa = Soap.LimparEnvelope(retornoXmlString, "retConsSitNFe").OuterXml; var arqRet = Path.Combine("Logs", $"{DateTime.Now.Ticks}-retConsSitNFe.xml"); await storage.SaveAsync(arqRet, retornoXmlStringLimpa); var retEnvEvento = new retConsSitNFe().CarregarDeXmlString(retornoXmlStringLimpa, xmlEvento); return(retEnvEvento); }
public static MDFEletronico Assina(this MDFEletronico mdfe, EventHandler <string> eventHandlerChaveMdfe = null, object quemInvocouEventoChaveMDFe = null) { if (mdfe == null) { throw new ArgumentException("Erro de assinatura, MDFe esta null"); } var modeloDocumentoFiscal = mdfe.InfMDFe.Ide.Mod; var tipoEmissao = (int)mdfe.InfMDFe.Ide.TpEmis; var codigoNumerico = mdfe.InfMDFe.Ide.CMDF; var estado = mdfe.InfMDFe.Ide.CUF; var dataEHoraEmissao = mdfe.InfMDFe.Ide.DhEmi; var cnpj = mdfe.InfMDFe.Emit.CNPJ; var numeroDocumento = mdfe.InfMDFe.Ide.NMDF; int serie = mdfe.InfMDFe.Ide.Serie; var dadosChave = ChaveFiscal.ObterChave(estado, dataEHoraEmissao, cnpj, modeloDocumentoFiscal, serie, numeroDocumento, tipoEmissao, codigoNumerico); mdfe.InfMDFe.Id = "MDFe" + dadosChave.Chave; if (eventHandlerChaveMdfe != null) { eventHandlerChaveMdfe.Invoke(quemInvocouEventoChaveMDFe, dadosChave.Chave); } mdfe.InfMDFe.Versao = MDFeConfiguracao.VersaoWebService.VersaoLayout; mdfe.InfMDFe.Ide.CDV = dadosChave.DigitoVerificador; var assinatura = AssinaturaDigital.Assina(mdfe, mdfe.InfMDFe.Id, MDFeConfiguracao.X509Certificate2); mdfe.Signature = assinatura; return(mdfe); }
public async Task CancelarNFe() { var chave = new ChaveFiscal("33211029310114000110550010000000041000000546"); var protocolo = new ProtocoloAutorizacao("333210000440983"); var infoNFe = new InfoNFeCancelar(chave, protocolo); var retorno = await nfServico.CancelarNFe.Cancelar(infoNFe); Console.WriteLine(retorno.XmlRecebido); }
/// <summary> /// Assina um objeto NFe /// </summary> /// <param name="nfe"></param> /// <param name="cfgServico">ConfiguracaoServico para uso na classe Assinador</param> /// <returns>Retorna um objeto do tipo NFe assinado</returns> public static Classes.NFe Assina(this Classes.NFe nfe, ConfiguracaoServico cfgServico = null, X509Certificate2 _certificado = null) { var nfeLocal = nfe; if (nfeLocal == null) { throw new ArgumentNullException("nfe"); } var config = cfgServico ?? ConfiguracaoServico.Instancia; #region Define cNF var tamanhocNf = 9; var versao = (decimal.Parse(nfeLocal.infNFe.versao, CultureInfo.InvariantCulture)); if (versao >= 2) { tamanhocNf = 8; } nfeLocal.infNFe.ide.cNF = Convert.ToInt32(nfeLocal.infNFe.ide.cNF).ToString().PadLeft(tamanhocNf, '0'); #endregion var modeloDocumentoFiscal = nfeLocal.infNFe.ide.mod; var tipoEmissao = (int)nfeLocal.infNFe.ide.tpEmis; var codigoNumerico = int.Parse(nfeLocal.infNFe.ide.cNF); var estado = nfeLocal.infNFe.ide.cUF; var dataEHoraEmissao = nfeLocal.infNFe.ide.dhEmi; var cnpj = nfeLocal.infNFe.emit.CNPJ; if (cnpj == null) { cnpj = nfeLocal.infNFe.emit.CPF.PadLeft(14, '0'); } var numeroDocumento = nfeLocal.infNFe.ide.nNF; var serie = nfeLocal.infNFe.ide.serie; var dadosChave = ChaveFiscal.ObterChave(estado, dataEHoraEmissao.LocalDateTime, cnpj, modeloDocumentoFiscal, serie, numeroDocumento, tipoEmissao, codigoNumerico); nfeLocal.infNFe.Id = "NFe" + dadosChave.Chave; nfeLocal.infNFe.ide.cDV = Convert.ToInt16(dadosChave.DigitoVerificador); Signature assinatura = null; if (_certificado == null) { assinatura = Assinador.ObterAssinatura(nfeLocal, nfeLocal.infNFe.Id, config); } else { assinatura = Assinador.ObterAssinatura(nfeLocal, nfeLocal.infNFe.Id, _certificado, config.Certificado.ManterDadosEmCache, config.Certificado.SignatureMethodSignedXml, config.Certificado.DigestMethodReference, config.RemoverAcentos); } nfeLocal.Signature = assinatura; return(nfeLocal); }
public async Task <retDistDFeInt> ConsultarPorChaveAsync(ChaveFiscal chaveNFe, bool validarXmlConsulta = true) { var distDFeInt = new distDFeInt { Versao = "1.01", Cnpj = Configuracao.Emitente.CNPJ, consChNFe = new consChNFe { ChNFe = chaveNFe.Chave }, cUFAutor = ((int)Configuracao.UF).ToString(), TpAmb = Configuracao.TipoAmbiente }; var retorno = await PrepararTransmissao(distDFeInt, validarXmlConsulta); var retDistDFeInt = XmlUtils.XmlStringParaClasse <retDistDFeInt>(retorno); return(retDistDFeInt); }
/// <summary> /// Assina um objeto NFe /// </summary> /// <param name="nfe"></param> /// <returns>Retorna um objeto do tipo NFe assinado</returns> public static Classes.NFe Assina(this Classes.NFe nfe) { var nfeLocal = nfe; if (nfeLocal == null) { throw new ArgumentNullException("nfe"); } #region Define cNF var tamanhocNf = 9; var versao = (decimal.Parse(nfeLocal.infNFe.versao, CultureInfo.InvariantCulture)); if (versao >= 2) { tamanhocNf = 8; } nfeLocal.infNFe.ide.cNF = Convert.ToInt32(nfeLocal.infNFe.ide.cNF).ToString().PadLeft(tamanhocNf, '0'); #endregion var modeloDocumentoFiscal = nfeLocal.infNFe.ide.mod; var tipoEmissao = (int)nfeLocal.infNFe.ide.tpEmis; var codigoNumerico = int.Parse(nfeLocal.infNFe.ide.cNF); var estado = nfeLocal.infNFe.ide.cUF; var dataEHoraEmissao = nfeLocal.infNFe.ide.dhEmi; var cnpj = nfeLocal.infNFe.emit.CNPJ; var numeroDocumento = nfeLocal.infNFe.ide.nNF; var serie = nfeLocal.infNFe.ide.serie; var dadosChave = ChaveFiscal.ObterChave(estado, dataEHoraEmissao, cnpj, modeloDocumentoFiscal, serie, numeroDocumento, tipoEmissao, codigoNumerico); nfeLocal.infNFe.Id = "NFe" + dadosChave.Chave; nfeLocal.infNFe.ide.cDV = Convert.ToInt16(dadosChave.DigitoVerificador); var assinatura = Assinador.ObterAssinatura(nfeLocal, nfeLocal.infNFe.Id); nfeLocal.Signature = assinatura; return(nfeLocal); }
public InfoNFeCancelar(ChaveFiscal chaveAcesso, ProtocoloAutorizacao protocoloAutorizacao, string justificativa = "Nota Fiscal Emitida Indevidamente") { ChaveAcesso = chaveAcesso ?? throw new ArgumentNullException(nameof(chaveAcesso)); ProtocoloAutorizacao = protocoloAutorizacao ?? throw new ArgumentNullException(nameof(protocoloAutorizacao)); Justificativa = justificativa; }
public void ChaveAcesso() { var chave = new ChaveFiscal(eUF.RJ, new DateTime(2020, 12, 01), "29310114000110", eModeloDocumento.NFCe, 1, 273, eTipoEmissao.Normal, "00028034"); Assert.AreEqual("33201229310114000110650010000002731000280340", chave.Chave); }