Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        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));
        }
Пример #4
0
        /// <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();
        }
Пример #6
0
        /// <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);
        }