Esempio n. 1
0
        private void AtualizarFormaPagamento(BD bd, EstruturaVenda venda)
        {
            oVendaBilheteriaFormaPagamento.Ler(venda.FormaPagamento.VendaBilheteriaFormaPagamentoID);

            if (oProcessamento.oPagamento.TipoPagamento == ClientObjects.EstruturaPagamento.enumTipoPagamento.Adyen)
            {
                oVendaBilheteriaFormaPagamento.CodigoRespostaVenda.Valor = oProcessamento.oPagamento.oAdyen.CodigoReferencia;
                oVendaBilheteriaFormaPagamento.NumeroAutorizacao.Valor   = oProcessamento.oPagamento.oAdyen.CodigoAutenticacao ?? oVendaBilheteriaFormaPagamento.NumeroAutorizacao.Valor;
                oVendaBilheteriaFormaPagamento.Cupom.Valor = IRLib.AdyenStatic.Fields.NotaFiscal;
            }
            else
            {
                oVendaBilheteriaFormaPagamento.VendaBilheteriaFormaPagamentoTEFID.Valor = oProcessamento.oPagamento.oSitef.ID;
                oVendaBilheteriaFormaPagamento.CodigoRespostaVenda.Valor = oProcessamento.oPagamento.oSitef.CodigoRespostaSitefVenda;
                oVendaBilheteriaFormaPagamento.MensagemRetorno.Valor     = oProcessamento.oPagamento.oSitef.MensagemFinaliza;
                oVendaBilheteriaFormaPagamento.HoraTransacao.Valor       = oProcessamento.oPagamento.oSitef.HoraTransacao;
                oVendaBilheteriaFormaPagamento.DataTransacao.Valor       = oProcessamento.oPagamento.oSitef.DataTransacao;
                oVendaBilheteriaFormaPagamento.CodigoIR.Valor            = oProcessamento.oPagamento.oSitef.CodigoIR;
                oVendaBilheteriaFormaPagamento.NumeroAutorizacao.Valor   = oProcessamento.oPagamento.oSitef.NumeroAutorizacao;
                oVendaBilheteriaFormaPagamento.NSUHost.Valor             = oProcessamento.oPagamento.oSitef.NSUHost;
                oVendaBilheteriaFormaPagamento.NSUSitef.Valor            = oProcessamento.oPagamento.oSitef.NSUSitef;
                oVendaBilheteriaFormaPagamento.Cupom.Valor = oProcessamento.oPagamento.oSitef.CupomFiscal;
                oVendaBilheteriaFormaPagamento.DadosConfirmacaoVenda.Valor = oProcessamento.oPagamento.oSitef.DadosConfirmacao;
                oVendaBilheteriaFormaPagamento.Rede.Valor = oProcessamento.oPagamento.oSitef.RedeRetorno;
                oVendaBilheteriaFormaPagamento.CodigoRespostaTransacao.Valor = oProcessamento.oPagamento.oSitef.CodigoRespostaSitefFinaliza;

                if (ConfiguracaoHammerHead.Instancia.Configuracao.SalvarLog.Valor)
                {
                    SalvarLog.Salvar("VendaBilheteriaFormaPagamento Atualizada\n NotaFiscal: " + oProcessamento.oPagamento.oSitef.CupomFiscal, Enumeradores.TipoEntrada.Sucesso, SalvarLog.Events.Transacoes);
                }
            }
            oVendaBilheteriaFormaPagamento.Atualizar(bd);
        }
Esempio n. 2
0
        public bool PodeProcessar()
        {
            try
            {
                if (Single)
                {
                    return(true);
                }

                if (TimeOut && DateTime.Now.Subtract(UltimaRequisicao).Seconds < IntervaloRequisicoesTimeout)
                {
                    return(false);
                }

                if (UtilizacaoCanal >= LimiteUtilizacao && UltimaRequisicao != DateTime.MinValue && DateTime.Now.Subtract(UltimaRequisicao).Seconds < IntervaloRequisicoes)
                {
                    return(false);
                }

                UltimaRequisicao = DateTime.Now;

                return(true);
            }
            catch (Exception ex)
            {
                SalvarLog.SalvarErro("Não foi possível determinar a utilização do link.", ex.Message, SalvarLog.Events.UtilizacaoLink);
                return(false);
            }
        }
Esempio n. 3
0
        private void AtualizarVendaBilheteria(BD bd, EstruturaVenda venda)
        {
            try
            {
                string nota = string.Empty;
                if (oProcessamento.oPagamento.TipoPagamento == ClientObjects.EstruturaPagamento.enumTipoPagamento.Adyen)
                {
                    nota = IRLib.AdyenStatic.Fields.NotaFiscal;
                }
                else
                {
                    nota = oProcessamento.oPagamento.oSitef.CupomFiscal;
                }

                oVendaBilheteria.AtualizarPagamentoProcessado(bd, venda.ID, nota);
                if (ConfiguracaoHammerHead.Instancia.Configuracao.SalvarLog.Valor)
                {
                    SalvarLog.Salvar("Pagamento e Nota fiscal Atualizados.", Enumeradores.TipoEntrada.Informacao, SalvarLog.Events.Transacoes);
                }
            }
            catch (Exception ex)
            {
                if (ConfiguracaoHammerHead.Instancia.Configuracao.SalvarLog.Valor)
                {
                    SalvarLog.SalvarErro("Não foi possível atualizar o Pagamento e Nota Fiscal.", ex.Message, SalvarLog.Events.Transacoes);
                }
                throw ex;
            }
        }
Esempio n. 4
0
        private void ConsultarAccertify()
        {
            if (Single) //Já foi preenchido!
            {
                return;
            }

            if (!ConfiguracaoAccertify.Instancia.Chaves.Ativo.Valor)
            {
                RetornoAccertify = Enumeradores.RetornoAccertify.Aceitar;
                if (ConfiguracaoHammerHead.Instancia.Configuracao.SalvarLog.Valor)
                {
                    SalvarLog.Salvar("Accertify inativa!. Aceitar automático!", Enumeradores.TipoEntrada.Informacao, SalvarLog.Events.Accertify);
                }

                return;
            }

            if (Venda.DataVenda.Date >= DateTime.Now.AddDays(IRLib.ConfiguracaoAdyen.Instancia.Chaves.DiasProcessamento.Valor))
            {
                if (Venda.Score == 0)
                {
                    RetornoAccertify = Enumeradores.RetornoAccertify.CancelarVendaInvalida; //Aconteceu erro ao processar a venda na accertify (provavel nem ter sido enviado), se passar muito tempo, cancela por venda inválida
                }
                else if (Venda.Score <= ConfiguracaoAccertify.Instancia.Chaves.ScoreAceitarTempoExcedido.Valor)
                {
                    RetornoAccertify = Enumeradores.RetornoAccertify.Aceitar;
                }
                else
                {
                    RetornoAccertify = Enumeradores.RetornoAccertify.CancelarTempoLimiteExcedido;
                }

                return;
            }

            XmlDocument xml        = null;
            XmlDocument xmlRetorno = new XmlDocument();

            try
            {
                xml = Accertify.GerarXMLVenda(Venda);

                xmlRetorno.LoadXml(Utilitario.HTTPPostXML(ConfiguracaoAccertify.Instancia.Chaves.URL.Valor, xml.InnerXml, ConfiguracaoAccertify.Instancia.Chaves.Usuario.Valor, ConfiguracaoAccertify.Instancia.Chaves.Senha.Valor));
            }
            catch (Exception ex)
            {
                throw ex;
            }

            int    score         = Convert.ToInt32(xmlRetorno.GetElementsByTagName("total-score")[0].InnerText);
            string recomendation = xmlRetorno.GetElementsByTagName("recommendation-code")[0].InnerText;

            Venda.Score = score;

            var retorno = (IRLib.Paralela.RetornoAccertify.Recommendation)Enum.Parse(typeof(IRLib.Paralela.RetornoAccertify.Recommendation), recomendation);

            Venda.RetornoAccertify = Accertify.ParseRetorno(recomendation);// RetornoAccertify;
            RetornoAccertify       = Venda.RetornoAccertify;
        }
Esempio n. 5
0
        private Enumeradores.RetornoProcessamento ProcessarTEF()
        {
            try
            {
                this.ConsultarAccertify();

                switch (RetornoAccertify)
                {
                case Enumeradores.RetornoAccertify.Aceitar:
                    return(Enumeradores.RetornoProcessamento.Processado);

                case Enumeradores.RetornoAccertify.AguardarReview:
                    return(Enumeradores.RetornoProcessamento.AguardarAccertify);

                case Enumeradores.RetornoAccertify.CancelarAltoRisco:
                case Enumeradores.RetornoAccertify.CancelarTempoLimiteExcedido:
                case Enumeradores.RetornoAccertify.CancelarVendaInvalida:
                    return(Enumeradores.RetornoProcessamento.CancelarAccertify);

                case Enumeradores.RetornoAccertify.AcompanhamentoComCliente:
                    return(Enumeradores.RetornoProcessamento.SolicitarDocumentos);

                case Enumeradores.RetornoAccertify.CancelarSemFraude:
                    return(Enumeradores.RetornoProcessamento.CancelarSemFraude);

                default:
                    return(Enumeradores.RetornoProcessamento.Processado);
                }
            }
            catch (VendaCanceladaException ex)
            {
                if (ConfiguracaoHammerHead.Instancia.Configuracao.SalvarLog.Valor)
                {
                    SalvarLog.Salvar(ex.Message, Enumeradores.TipoEntrada.Alerta, SalvarLog.Events.Listener);
                }

                return(Enumeradores.RetornoProcessamento.VendaCancelada);
            }
            catch (TimeoutException)
            {
                if (ConfiguracaoHammerHead.Instancia.Configuracao.SalvarLog.Valor)
                {
                    SalvarLog.SalvarErro("Ocorreu um timeout na execução do HammerHead", oPagamento.oSitef.RetornoTEF, SalvarLog.Events.Transacoes);
                }

                return(Enumeradores.RetornoProcessamento.Timeout);
            }
            catch (Exception ex)
            {
                if (ConfiguracaoHammerHead.Instancia.Configuracao.SalvarLog.Valor)
                {
                    SalvarLog.SalvarErro("Transação Inválida.", oPagamento.oSitef.RetornoTEF + "\nException: " + ex.Message, SalvarLog.Events.Transacoes);
                }

                return(Enumeradores.RetornoProcessamento.CartaoInvalido);
            }
        }
Esempio n. 6
0
        private Enumeradores.RetornoProcessamento Processar()
        {
            DateTime inicio = DateTime.Now;

            try
            {
                if (ConfiguracaoHammerHead.Instancia.Configuracao.AmbienteDeTestes.Valor)
                {
                    SalvarLog.Salvar("Ambiente de testes ativo!", Enumeradores.TipoEntrada.Informacao, SalvarLog.Events.AmbienteTesteAtivo);

                    Random rnd = new Random();
                    Thread.Sleep(rnd.Next(2000));
                    if (rnd.Next() % 2 == 0)
                    {
                        return(Enumeradores.RetornoProcessamento.Processado);
                    }
                    else
                    {
                        return(Enumeradores.RetornoProcessamento.CartaoInvalido);
                    }
                }
                else
                {
                    switch (this.oPagamento.TipoPagamento)
                    {
                    case EstruturaPagamento.enumTipoPagamento.TEF:
                        return(this.ProcessarTEF());

                    case EstruturaPagamento.enumTipoPagamento.Adyen:
                        return(this.ProcessarAdyen());

                    default:
                        return(Enumeradores.RetornoProcessamento.Processado);
                    }
                }
            }

            catch (Exception ex)
            {
                if (ConfiguracaoHammerHead.Instancia.Configuracao.SalvarLog.Valor)
                {
                    SalvarLog.SalvarErro("Transação Inválida.", "Venda: " + Venda.ID + "\nException: " + ex.Message, SalvarLog.Events.Transacoes);
                }

                return(Enumeradores.RetornoProcessamento.CartaoInvalido);
            }
            finally
            {
                DateTime fim = DateTime.Now;
                this.AtribuirProcessamento(fim.Subtract(inicio).TotalMilliseconds);
            }
        }
Esempio n. 7
0
        public void Executar()
        {
            if (!this.CarregarFila())
            {
                return;
            }

            this.salvarlogevent = SalvarLog.Events.HammerHead;

            var transacoes = this.Vendas.Count;
            var inicio     = DateTime.Now;

            this.EfetuarPagamentos();
            var tempoExecucao = DateTime.Now - inicio;

            SalvarLog.Salvar("Fila de " + transacoes + " processada em " + tempoExecucao.TotalSeconds + ".", Enumeradores.TipoEntrada.Informacao);
        }
Esempio n. 8
0
        private void CancelarSemFraude(object objVenda)
        {
            if (!(objVenda is EstruturaVenda))
            {
                return;
            }

            EstruturaVenda venda = (EstruturaVenda)objVenda;

            try
            {
                oVendaBilheteria.Score.Valor = venda.Score;
                oVendaBilheteria.AtualizarStatusAntiFraude(venda.ID, VendaBilheteria.StatusAntiFraude.Cancelado, venda.Score, venda.RetornoAccertify);
            }
            catch (Exception ex)
            {
                SalvarLog.SalvarErro("Erro ao cancelar a Venda: " + venda.ID, ex.Message, SalvarLog.Events.Transacoes);
            }
        }
Esempio n. 9
0
        private Enumeradores.RetornoProcessamento ProcessarAdyen()
        {
            try
            {
                if (string.Compare(Venda.FormaPagamento.NotaFiscal, IRLib.AdyenStatic.Fields.NotaFiscal) != 0)
                {
                    oPagamento.oAdyen.EfetuarPagamento();
                }
                else
                {
                    oPagamento.oAdyen.CodigoReferencia = Venda.FormaPagamento.CodigoResposta;
                }

                if (ConfiguracaoHammerHead.Instancia.Configuracao.SalvarLog.Valor)
                {
                    SalvarLog.Salvar("Cobrança Adyen (Inicial) HammerHead OK", Enumeradores.TipoEntrada.Sucesso, SalvarLog.Events.Transacoes);
                }


                this.ConsultarAccertify();

                oPagamento.oAdyen.CapturarPagamento();
                return(Enumeradores.RetornoProcessamento.Processado);
            }
            catch (Exception ex)
            {
                if (ConfiguracaoHammerHead.Instancia.Configuracao.SalvarLog.Valor)
                {
                    SalvarLog.SalvarErro("Pagamento Adyen", "Não foi possível processar o pagamento.\nVenda: " + Venda.ID + "\nMotivo: " + ex.Message, SalvarLog.Events.Transacoes);
                }

                if (string.Compare(Venda.FormaPagamento.NotaFiscal, IRLib.AdyenStatic.Fields.NotaFiscal) == 0)
                {
                    oPagamento.oAdyen.CancelarPagamento();
                }

                return(Enumeradores.RetornoProcessamento.CartaoInvalido);
            }
        }
Esempio n. 10
0
        private bool CarregarFila()
        {
            try
            {
                if (Vendas.Count > 0)
                {
                    SalvarLog.Salvar("A fila não está vazia!!!!", Enumeradores.TipoEntrada.Informacao, SalvarLog.Events.HammerHead);
                    return(false);
                }

                Vendas = oVendaBilheteria.CarregarVendasParaPagamento();
                return(true);
            }
            catch (Exception ex)
            {
                SalvarLog.SalvarErro("Não foi possível carregar a fila.", ex.Message, SalvarLog.Events.Fila);
                return(false);
            }
            finally
            {
                SalvarLog.Salvar("Foram encontrados : " + Vendas.Count + " registros para processar", Enumeradores.TipoEntrada.Informacao, SalvarLog.Events.Fila);
            }
        }
Esempio n. 11
0
        private void AtualizarVenda(EstruturaVenda venda)
        {
            BD bd = new BD();

            try
            {
                bd.IniciarTransacao();

                this.AtualizarVendaBilheteria(bd, venda);
                this.AtualizarFormaPagamento(bd, venda);

                bd.FinalizarTransacao();
            }
            catch (Exception ex)
            {
                bd.DesfazerTransacao();
                SalvarLog.SalvarErro("Falha ao atualizar a venda", ex.Message, SalvarLog.Events.Transacoes);
            }
            finally
            {
                bd.Fechar();
            }
        }
Esempio n. 12
0
        private static void Salvar(bool hasEnd, DateTime inicio, DateTime fim, string mensagem, string Erro, Enumeradores.TipoEntrada tipo, Events evento)
        {
            try
            {
                var eventID = (int)evento;

                if (!System.Diagnostics.EventLog.SourceExists("HammerHead"))
                {
                    System.Diagnostics.EventLog.CreateEventSource("HammerHead", "Processamento TEF");
                }

                EventLog log = new EventLog("HammerHead");

                if (evento == Events.Listener)
                {
                    log.Source = "Listener";
                }
                else
                {
                    log.Source = "HammerHead";
                }

                log.Log = "Processamento TEF";

                if (tipo == Enumeradores.TipoEntrada.Erro)
                {
                    mensagem = string.Format("Erro ao processar.\n\n{0}\nErro:{1}", mensagem, Erro);
                }

                if (!hasEnd)
                {
                    switch (tipo)
                    {
                    case Enumeradores.TipoEntrada.Sucesso:
                        log.WriteEntry(mensagem, EventLogEntryType.SuccessAudit, eventID);
                        break;

                    case Enumeradores.TipoEntrada.Erro:
                        log.WriteEntry(mensagem, EventLogEntryType.Error, eventID);
                        break;

                    case Enumeradores.TipoEntrada.Alerta:
                        log.WriteEntry(mensagem, EventLogEntryType.Warning, eventID);
                        break;

                    default:
                        log.WriteEntry(mensagem, EventLogEntryType.Information, eventID);
                        break;
                    }

                    if (ConfiguracaoHammerHead.Instancia.Configuracao.SalvarLogSQL.Valor)
                    {
                        BD.Executar(string.Format("INSERT INTO tLogHammerHead VALUES ('{0}','{1}','{2}','{3}','{4}', '{5}')", log.Source, log.Log, mensagem, tipo, evento.ToString(), DateTime.Now.ToString("yyyyMMddHHmmss")));
                    }
                }
                else
                {
                    switch (tipo)
                    {
                    case Enumeradores.TipoEntrada.Sucesso:
                        log.WriteEntry(string.Format("Ação executada com sucesso\n{0} em {1} segundos", mensagem, fim.Subtract(inicio).Seconds), EventLogEntryType.SuccessAudit, eventID);
                        break;

                    case Enumeradores.TipoEntrada.Erro:
                        log.WriteEntry(string.Format("Ação executada com sucesso\n{0} em {1} segundos", mensagem, fim.Subtract(inicio).Seconds), EventLogEntryType.SuccessAudit, eventID);
                        break;

                    default:
                        log.WriteEntry(string.Format("Ação executada com sucesso\n{0} em {1} segundos", mensagem, fim.Subtract(inicio).Seconds), EventLogEntryType.Information, eventID);
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                SalvarLog.EscreveLog(mensagem + "\n " + Erro + "\nException: " + ex.Message);
            }
        }
Esempio n. 13
0
        private void EfetuarPagamentos()
        {
            try
            {
                if (Vendas.Count == 0)
                {
                    return; // A fila está vazia
                }
                while (Vendas.Count > 0)
                {
                    EstruturaVenda venda = Vendas[0];

                    try
                    {
                        Enumeradores.RetornoProcessamento retorno = oProcessamento.ProcessarVenda(venda);

                        switch (retorno)
                        {
                        case Enumeradores.RetornoProcessamento.Processado:
                            this.Aprovar(venda);
                            break;

                        case Enumeradores.RetornoProcessamento.CancelarAccertify:
                            this.Fraude(venda);
                            break;

                        case Enumeradores.RetornoProcessamento.AguardarAccertify:
                        case Enumeradores.RetornoProcessamento.Timeout:
                            this.Analisar(venda);
                            break;

                        case Enumeradores.RetornoProcessamento.SolicitarDocumentos:
                            this.SolicitarDocumentos(venda);
                            break;

                        case Enumeradores.RetornoProcessamento.CancelarSemFraude:
                            this.CancelarSemFraude(venda);
                            break;

                        default:
                            this.AtualizarScore(venda);
                            break;
                        }

                        if (ConfiguracaoHammerHead.Instancia.Configuracao.SalvarLog.Valor)
                        {
                            SalvarLog.Salvar(string.Format("Venda processada HammerHead. \n Venda: {0} \nScore:{1}\nRecommendation: {2}", venda.Senha, venda.Score.ToString(), venda.RetornoAccertify.ToString()), Enumeradores.TipoEntrada.Sucesso);
                        }
                    }
                    catch (Exception ex)
                    {
                        SalvarLog.SalvarErro("Falha ao processar transação: " + venda.Senha, ex.Message, this.salvarlogevent);
                    }
                    finally
                    {
                        Vendas.Remove(venda);
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }