Beispiel #1
0
        public static string GeraQrCode(this TNFe nfe, string cscId, string cscToken, string digest = null)
        {
            var builder = new StringBuilder();

            builder.Append(ListaUrl.BuscaUrls(nfe.infNFe.ide.cUF, nfe.infNFe.ide.tpAmb).UrlNfceQrCode);

            var dataHex = ToHex(nfe.infNFe.ide.dhEmi ?? nfe.infNFe.ide.dhCont);

            if (digest == null)
            {
                digest = ToHex(nfe.Signature.SignedInfo.Reference.DigestValue);
            }

            var parametros = string.Format("chNFe={0}&nVersao={1}&tpAmb={2}&cDest={3}&dhEmi={4}&vNF={5}&vICMS={6}&digVal={7}",
                                           nfe.infNFe.Id.Substring(3),
                                           nfe.infNFe.versao,
                                           (int)nfe.infNFe.ide.tpAmb,
                                           (nfe.infNFe.dest != null && nfe.infNFe.dest.Item.HasValue()) ? nfe.infNFe.dest.Item : String.Empty,
                                           dataHex,
                                           nfe.infNFe.total.ICMSTot.vNF,
                                           nfe.infNFe.total.ICMSTot.vICMS,
                                           digest);

            builder.Append(parametros);
            builder.AppendFormat("&cIdToken={0}", cscId);
            using (var sha = SHA1.Create())
            {
                parametros += "&CSC=" + cscToken;
                builder.Append("&cHashQRCode=" + ToHex(sha.ComputeHash(Encoding.UTF8.GetBytes(parametros))));
            }

            return(builder.ToString());
        }
Beispiel #2
0
        public TRetEnviNFe EnviaLote2(HiperNFe Notas, int NumLote)
        {
            XmlNode strRetorno = null;
            dynamic xmldoc     = new XmlDocument();

            ListaUrl listaURL = default(ListaUrl);

            listaURL = WsUrls.BuscaURL(Notas.Configuracao.CodUF, Notas.Configuracao.Ambiente);

            string nomeArquivoLote    = _PastaLog + NumLote.ToString() + "-env-lot.xml";
            string nomeArquivoRetLote = _PastaLog + NumLote.ToString() + "-rec.xml";

            try
            {
                TEnviNFe LoteNFe = new TEnviNFe();
                LoteNFe.idLote = NumLote.ToString();
                LoteNFe.versao = Notas.Configuracao.Versao;
                // ERROR: Not supported in C#: ReDimStatement

                int indice = 0;
                LoteNFe.NFe = new TNFe[Notas.NotasFiscais.Count];
                foreach (TNfeProc nota in Notas.NotasFiscais)
                {
                    LoteNFe.NFe[indice] = nota.NFe;
                    indice += 1;
                }
                LoteNFe.GeraLoteNFe(nomeArquivoLote);
                xmldoc.Load(nomeArquivoLote);
                //Carrega o arquivo XML

                Recepcao2.NfeRecepcao2 wsMsg = default(Recepcao2.NfeRecepcao2);
                Recepcao2.nfeCabecMsg  cab   = new Recepcao2.nfeCabecMsg();

                //UF E VERSÃO DO CABEÇALHO
                cab.cUF         = PegarCodigoUF(Notas.Configuracao.CodUF);
                cab.versaoDados = LoteNFe.versao;

                //CABEÇALHO USADA PARA ENVIO DE LOTE
                wsMsg = new Recepcao2.NfeRecepcao2(listaURL.UrlNfeRecepcao);
                wsMsg.nfeCabecMsgValue = cab;

                wsMsg.Timeout = 100000;
                wsMsg.ClientCertificates.Add(Notas.Certificado);
                wsMsg.SoapVersion = SoapProtocolVersion.Soap12;

                xmldoc.Save(nomeArquivoLote);
                //RETORNO DA SEFAZ
                strRetorno = wsMsg.nfeRecepcaoLote2(xmldoc);
                TRetEnviNFe retornoEnvio = new TRetEnviNFe();
                XmlDocument retornoXML   = new XmlDocument();
                retornoXML.LoadXml(strRetorno.OuterXml);
                retornoXML.Save(nomeArquivoRetLote);
                retornoEnvio = TRetEnviNFe.LoadFromFile(nomeArquivoRetLote);

                return(retornoEnvio);
            }
            catch (Exception)
            {
                throw new ACBr.Net.NFe.Exceptions.EnviaLote2Exception("Falha ao enviar o lote de NFe.");
            }
        }