public IHttpActionResult UpdatePagamento(string operation, string notification_type, string hash_codes) { /* * The payment status. The following statuses are available: * OP: the customer has not yet filled the payment details on the EBANX Checkout. It can change either to CA (time out) or PE. * PE: the payment is pending confirmation. It can change either to CA or CO. * CO: the payment is confirmed (paid). * CA: the payment is cancelled. */ var hash_list = hash_codes.Split(",".ToArray(), StringSplitOptions.RemoveEmptyEntries); foreach (var hash in hash_list) { var pedido = _pedidoServico.PrimeiroPor(p => p.ListaHistorico.Any(lh => lh.StatusPedido == StatusPedido.AguardandoPagamento && lh.CodigoRetornoTransacao == hash)); var consultaResponse = _apiTransacaoCartaoEbanx.Consulta(hash: hash); if (consultaResponse.payment.status.Equals("PE")) { _pedidoServico.AtribuiStatus(pedido.Id, (int)StatusPedido.AguardandoConfirmacao, pedido.Usuario, consultaResponse.Message, consultaResponse.Code); } else if (consultaResponse.payment.status.Equals("CO")) { _pedidoServico.AtribuiStatus(pedido.Id, (int)StatusPedido.PagamentoAprovado, pedido.Usuario, "Pagamento aprovado", consultaResponse.Code + "-" + consultaResponse.Message); _pedidoServico.AtribuiStatus(pedido.Id, (int)StatusPedido.AguardandoAvaliacao, pedido.Usuario, "Sua avaliação é muito importante para nós"); } else if (consultaResponse.payment.status.Equals("CA")) { _pedidoServico.AtribuiStatus(pedido.Id, (int)StatusPedido.PagamentoNaoAprovado, pedido.Usuario, "Pagamento não aprovado", consultaResponse.Code + "-" + consultaResponse.Message); } } return(Ok()); }
public Resposta <PedidoModelView> Finalizar([FromBody] Pedido entity) { if (entity.ListaCompra != null) { entity.ListaCompra = _listaCompraServico.BuscarPorId(entity.ListaCompra.Id); } var pessoa = entity.Usuario.Pessoa; var senhaCartao = entity.Cartao.Senha; var pedido = _pedidoServico.ValidarESalvar(entity); pedido.Cartao = pedido.Cartao == null ? pedido.Cartao : _cartaoServico.DescriptografarCartao(pedido.Cartao); string retornoApi; var retorno = new RespostaTransacaoCartaoModelView(); if (ConfigurationManager.AppSettings["API_REALIZA_TRANSACAO"] == "0") { retornoApi = "sucesso"; } else { pedido.Cartao.Decrypted = false; pedido.Cartao = _cartaoServico.DescriptografarCartao(pedido.Cartao); switch (ConfigurationManager.AppSettings["API_REALIZA_TRANSACAO_FORMA_PAGAMENTO"]) { case "0": { //MobSeg var cpf = pessoa.Documentos.FirstOrDefault(x => x.Tipo == (int)TipoDocumento.Cpf)?.Numero; retornoApi = _apiTransacaoCartao.RealizaTransacaoCartao(Convert.ToInt64(cpf?.Replace(".", "").Replace("-", "")), 0, pedido.Cartao?.NumeroSemMascara, pedido.Cartao?.Validade.Replace("/", ""), pedido.Cartao?.Cvv, pedido.ListaCompra.Total.ToString("######.00").Replace(",", "").Replace(".", "")); retorno = new JavaScriptSerializer().Deserialize <RespostaTransacaoCartaoModelView>(retornoApi); } break; case "1": { //PayZen var retornoKeyValue = Aplicacao.apipayzen.ApiPayzenBase.CreatePayment(pedido); retornoApi = retornoKeyValue.Value; retorno = new RespostaTransacaoCartaoModelView { CodigoResposta = retornoKeyValue.Key, Mensagem = retornoKeyValue.Value }; } break; case "2": { //MeuVale var cpf = pessoa.Documentos.FirstOrDefault(x => x.Tipo == (int)TipoDocumento.Cpf)?.Numero; pedido.CodEstabelecimentoInfox = pedido.Loja.CodigoInfox; var pedidoModel = new Aplicacao.ApiInfox.Models.PedidoCompraModelView { Cliente = new Aplicacao.ApiInfox.Models.ClienteModelView { Id = pessoa.CodClienteInfox, CodCliente = pessoa.CodClienteInfox, Pessoa = new Aplicacao.ApiInfox.Models.PessoaModelView { Cpf = cpf?.Replace(".", "").Replace("-", ""), DataNascimento = pessoa.DataNascimento }, Cartao = new Aplicacao.ApiInfox.Models.CartaoModelView { NomeImpresso = pedido.Cartao?.NomeImpresso, Numero = pedido.Cartao?.NumeroSemMascara.ExtractLettersAndNumbers(), Cvv = pedido.Cartao?.Cvv, Senha = senhaCartao } }, ValorPedido = pedido.Valor.ToString("F2").Replace(",", "").Replace(".", ""), CodEstabelecimento = pedido.CodEstabelecimentoInfox }; retornoApi = _apiTransacaoCartaoInfox.CompraAVista(new JavaScriptSerializer().Serialize(pedidoModel)); var responseJson = new JavaScriptSerializer().Deserialize <Aplicacao.ApiInfox.Models.ResponseModelView>(retornoApi); pedido.NSURedeRXInfox = responseJson.NSU_RedeRX; pedido.Cartao = _cartaoServico.Criptografar(_cartaoServico.BuscarPorId(pedido.Cartao.Id)); _pedidoServico.Salvar(pedido); retorno = new RespostaTransacaoCartaoModelView { CodigoResposta = responseJson.CodResp, Mensagem = responseJson.StrResp }; if (responseJson.Return > 0) { _pedidoServico.AtribuiStatus(pedido.Id, (int)StatusPedido.PagamentoNaoAprovado, pedido.Usuario, responseJson.StrResp, responseJson.Return.ToString()); throw new BusinessRuleException($"Resultado: {responseJson.Return} - {responseJson.StrResp}"); } retorno = new RespostaTransacaoCartaoModelView { CodigoResposta = responseJson.CodResp, Mensagem = responseJson.StrResp }; _pedidoServico.AtribuiStatus(pedido.Id, (int)StatusPedido.PagamentoAprovado, pedido.Usuario, retorno.Mensagem, retorno.CodigoResposta); _pedidoServico.AtribuiStatus(pedido.Id, (int)StatusPedido.AguardandoAvaliacao, pedido.Usuario, "Sua avaliação é muito importante para nós"); return(new Resposta <PedidoModelView> { Mensagem = responseJson.Return == 0 ? "Pagamento realizado com sucesso! Loja: " + pedido.Loja.Descricao + " Valor: R$ " + pedido.Valor.ToString("N2") : "Falha ao processar o pagamento com a operadora do cartão!", ObjetoRetorno = new PedidoModelView(pedido), TipoMensagem = responseJson.Return == 0 ? TipoModal.Success : TipoModal.Danger }); } case "3": { //Ebanx var retornoEbanx = _apiTransacaoEbanx.CompraDireta(pedido); var retornoJson = Newtonsoft.Json.JsonConvert.SerializeObject(retornoEbanx); retornoApi = retornoJson; pedido.Cartao = _cartaoServico.Criptografar(_cartaoServico.BuscarPorId(pedido.Cartao.Id)); _pedidoServico.Salvar(pedido); retorno = new RespostaTransacaoCartaoModelView { CodigoResposta = retornoEbanx.Code, Mensagem = retornoEbanx.Message }; if (retorno.CodigoResposta != "OK") { _pedidoServico.AtribuiStatus(pedido.Id, (int)StatusPedido.PagamentoNaoAprovado, pedido.Usuario, retorno.Mensagem, retorno.CodigoResposta); throw new BusinessRuleException($"Resultado: {retorno.CodigoResposta} - {retorno.Mensagem}"); } _pedidoServico.ModificaStatus(pedido.Id, StatusPedido.AguardandoPagamento, pedido.Usuario, codigoRetornoTransacao: retornoEbanx.payment?.hash); return(new Resposta <PedidoModelView> { Mensagem = retorno.CodigoResposta == "OK" ? "Pagamento solicitado com sucesso!" : "Falha ao processar o pagamento com a operadora do cartão!", ObjetoRetorno = new PedidoModelView(pedido), TipoMensagem = retorno.CodigoResposta == "OK" ? TipoModal.Success : TipoModal.Danger }); } default: retornoApi = "sucesso"; break; } pedido.Cartao = _cartaoServico.Criptografar(_cartaoServico.BuscarPorId(pedido.Cartao.Id)); } if (retornoApi.Contains("sucesso")) { _pedidoServico.AtribuiStatus(pedido.Id, (int)StatusPedido.PagamentoAprovado, pedido.Usuario, retorno.Mensagem, retorno.CodigoResposta); _pedidoServico.AtribuiStatus(pedido.Id, (int)StatusPedido.AguardandoConfirmacao, pedido.Usuario, retorno.Mensagem, retorno.CodigoResposta); } else { _pedidoServico.AtribuiStatus(pedido.Id, (int)StatusPedido.PagamentoNaoAprovado, pedido.Usuario, retorno.Mensagem, retorno.CodigoResposta); } var pedidoRetorno = _pedidoServico.BuscarPorId(pedido.Id); pedidoRetorno.ListaCompra = _listaCompraServico.AtribuiDescontoAListaCompra(pedidoRetorno.ListaCompra); pedidoRetorno.Cartao.Decrypted = false; pedidoRetorno.Cartao = _cartaoServico.DescriptografarCartao(pedidoRetorno.Cartao); pedidoRetorno.AvaliacaoPedido = new AvaliacaoPedido { ItensDeAcordoComAnuncio = false, NotaAplicativo = 0, NotaPedido = 0 }; return(new Resposta <PedidoModelView> { Mensagem = retornoApi.Contains("sucesso") ? "Compra realizada com sucesso!" : "Falha ao processar o pagamento com a operadora do cartão!", ObjetoRetorno = new PedidoModelView(pedidoRetorno), TipoMensagem = retornoApi.Contains("sucesso") ? TipoModal.Success : TipoModal.Danger }); }
public Resposta <Pedido> Finalizar([FromBody] Pedido entity) { entity.ListaCompra = _listaCompraServico.BuscarPorId(entity.ListaCompra.Id); var pedido = _pedidoServico.ValidarESalvar(entity); pedido.Cartao = pedido.Cartao == null ? pedido.Cartao : _cartaoServico.DescriptografarCartao(pedido.Cartao); var cpf = pedido.Usuario.Pessoa.Documentos.FirstOrDefault(x => x.Tipo == (int)TipoDocumento.Cpf)?.Numero; string retornoApi; var retorno = new RespostaTransacaoCartaoModelView(); if (ConfigurationManager.AppSettings["API_REALIZA_TRANSACAO"] == "0") { retornoApi = "sucesso"; } else { pedido.Cartao.Decrypted = false; pedido.Cartao = _cartaoServico.DescriptografarCartao(pedido.Cartao); switch (ConfigurationManager.AppSettings["API_REALIZA_TRANSACAO_FORMA_PAGAMENTO"]) { case "0": //MobSeg retornoApi = _apiTransacaoCartao.RealizaTransacaoCartao(Convert.ToInt64(cpf?.Replace(".", "").Replace("-", "")), 0, pedido.Cartao?.NumeroSemMascara, pedido.Cartao?.Validade.Replace("/", ""), pedido.Cartao?.Cvv, pedido.ListaCompra.Total.ToString("######.00").Replace(",", "").Replace(".", "")); retorno = new JavaScriptSerializer().Deserialize <RespostaTransacaoCartaoModelView>(retornoApi); break; case "1": //PayZen var retornoKeyValue = Aplicacao.apipayzen.ApiPayzenBase.CreatePayment(pedido); retornoApi = retornoKeyValue.Value; retorno = new RespostaTransacaoCartaoModelView { CodigoResposta = retornoKeyValue.Key, Mensagem = retornoKeyValue.Value }; break; default: retornoApi = "sucesso"; break; } pedido.Cartao = _cartaoServico.Criptografar(_cartaoServico.BuscarPorId(pedido.Cartao.Id)); } if (retornoApiInfox.Contains("sucesso")) { _pedidoServico.AtribuiStatus(pedido.Id, (int)StatusPedido.PagamentoAprovado, pedido.Usuario, retorno.Mensagem, retorno.CodigoResposta); _pedidoServico.AtribuiStatus(pedido.Id, (int)StatusPedido.AguardandoConfirmacao, pedido.Usuario, retorno.Mensagem, retorno.CodigoResposta); } else { _pedidoServico.AtribuiStatus(pedido.Id, (int)StatusPedido.PagamentoNaoAprovado, pedido.Usuario, retorno.Mensagem, retorno.CodigoResposta); } var pedidoRetorno = _pedidoServico.BuscarPorId(pedido.Id); pedidoRetorno.ListaCompra = _listaCompraServico.AtribuiDescontoAListaCompra(pedidoRetorno.ListaCompra); pedidoRetorno.Cartao.Decrypted = false; pedidoRetorno.Cartao = _cartaoServico.DescriptografarCartao(pedidoRetorno.Cartao); return(new Resposta <Pedido> { Mensagem = retornoApiInfox.Contains("sucesso") ? "Compra realizada com sucesso!" : "Falha ao processar o pagamento com a operadora do cartão!", ObjetoRetorno = pedidoRetorno, TipoMensagem = retornoApiInfox.Contains("sucesso") ? TipoModal.Success : TipoModal.Danger }); }