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); }
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); } }
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; } }
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; }
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); } }
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); } }
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); }
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); } }
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); } }
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); } }
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(); } }
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); } }
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; } }