/// <summary> /// Obter mensagem Soap em formato Xml /// <para>Corpo da mensagem compativel com a especificação SOAP e requisitos Sefaz</para> /// </summary> /// <param name="urlWsdl">Endereço WSDL do serviço</param> /// <param name="entity"></param> /// <example></example> /// <returns></returns> protected virtual string ObterCorpoMensagemSoap(string urlWsdl, enviNFe entity) { var xmlCorpo = Utils.ObterStringXML(entity); var stringBuilder = new StringBuilder(); stringBuilder.Append("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>"); stringBuilder.Append( "<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">"); stringBuilder.Append("<soap:Body>"); if (_compactarMensagem) { //Compacta arquivo para uma bas64 var xmlCompactado = Convert.ToBase64String(Utils.Zip(xmlCorpo)); stringBuilder.Append("<nfeDadosMsgZip xmlns=\"" + urlWsdl + "\">" + xmlCompactado + "</nfeDadosMsgZip>"); } else { stringBuilder.Append("<nfeDadosMsg xmlns=\"" + urlWsdl + "\">" + xmlCorpo + "</nfeDadosMsg>"); } stringBuilder.Append("</soap:Body>"); stringBuilder.Append("</soap:Envelope>"); var msg = stringBuilder.ToString(); return(msg); }
/// <summary> /// Processa retorno /// </summary> /// <param name="xmlRecebido"></param> /// <param name="enviNFe"></param> /// <param name="contingencia">True, enviado em contingência</param> /// <returns></returns> private RetAutorz RetornoProcessamento(string xmlRecebido, enviNFe enviNFe, bool contingencia) { var xmlRecebidoTratado = Utils.ObterNodeDeStringXml("retEnviNFe", xmlRecebido); var retorno1 = Utils.ConverterXMLParaClasse <retEnviNFe>(xmlRecebidoTratado); _processadas++; if (retorno1.protNFe == null) { _rejeitadas++; } if (retorno1.protNFe != null) { if (StatusSefaz.ListarCodigo.All(n => retorno1.protNFe.infProt.cStat != n.Key)) { _rejeitadas++; } } var xmlEnviado = Utils.ObterStringXML(enviNFe); var retorno2 = new RetAutorz(retorno1, xmlRecebidoTratado, _processadas, _rejeitadas, xmlEnviado, contingencia); SalvarArquivoLoteRecebidos(retorno2); return(retorno2); }
public async Task <IRetornoAutorizacao> Autorizar(IList <NFe> nfes, int idLote = 0) { new ValidarNFeAutorizacao(nfes, cfgServico).Validar(); new TratarNFeAutorizacao(ref nfes, cfgServico).Tratar(); if (idLote <= 0) { idLote = new Random().Next(10000000, 99999999); } var nfesAssinadas = new List <NFe>(); foreach (var nfe in nfes) { var nfeAssinada = nfe.Assinar(ObterCertificado.Obter(cfgServico.ConfigCertificado)); var xml = XmlUtils.ClasseParaXmlString <NFe>(nfeAssinada); xml = xml.Replace("xmlns=\"http://www.portalfiscal.inf.br/nfe\"", string.Empty); Schemas.ValidarSchema(eTipoServico.AutorizarNFe, xml, cfgServico); nfesAssinadas.Add(nfeAssinada); } var mod = nfes.Select(x => x.infNFe.ide.mod) .Distinct() .SingleOrDefault() .Parse(); var versaoServico = cfgServico.VersaoAutorizacaoNFe.Descricao(); var enviNFe = new enviNFe(versaoServico, idLote, IndicadorSincronizacao.Sincrono, nfesAssinadas); var xmlEnviNFe = XmlUtils.ClasseParaXmlString <enviNFe>(enviNFe); return(await Autorizar(xmlEnviNFe, mod)); }
/// <summary> /// Processar envio e retorno da mensagem /// </summary> /// <param name="d1"></param> /// <returns></returns> private IRetAutorz ProcessarEnvioMensagem(enviNFe d1) { var soapXml = ObterCorpoMensagemSoap(_urlWsdlServico, d1); SalvarArquivoLoteEnviado(soapXml); var ws = _servicoBase.ObterRequisicaoSoap(_urlServico, soapXml); var resposta = _servicoBase.ObterResposta(ws); if (string.IsNullOrWhiteSpace(resposta)) { throw new InvalidOperationException("Não foi possível obter resposta a chamada do serviço"); } return(RetornoProcessamento(resposta, d1, _contingencia)); }
private static void Main(string[] args) { var listaItens = new List <enviNFeNFeInfNFeDet> { new enviNFeNFeInfNFeDet { nItem = 1, prod = new enviNFeNFeInfNFeDetProd { cProd = 1, CFOP = 5405, qCom = 1 } }, new enviNFeNFeInfNFeDet { nItem = 2, prod = new enviNFeNFeInfNFeDetProd { cProd = 2, CFOP = 5102, qCom = 2 } } }; var nota = new enviNFe { versao = 4, NFe = new enviNFeNFe { infNFe = new enviNFeNFeInfNFe { dest = new enviNFeNFeInfNFeDest { xNome = "Matheus", email = "*****@*****.**" }, det = listaItens } } }; var xml = GerarXml <enviNFe> .Serialize(nota); Console.WriteLine(xml); Console.ReadLine(); }
/// <summary> /// Obter Dados /// </summary> /// <returns></returns> private enviNFe ObterDados() { if (!string.IsNullOrWhiteSpace(_xmlNfe)) { var d0 = Utils.ConverterXMLParaClasse <NFe>(_xmlNfe); return(new enviNFe(_versao.ObterVersaoServico(), _idlote, _emisorEmissorServicoConfig.IndicadorSincronizacao, new List <NFe> { d0 })); } if (_nFes.Count == 0) { throw new InvalidOperationException("Informe ao menos uma Nfe"); } var pedEnvio = new enviNFe(_versao.ObterVersaoServico(), _idlote, _emisorEmissorServicoConfig.IndicadorSincronizacao, _nFes.ToList()); return(pedEnvio); }