public Resposta <ListaCompra> ValidarCupom(string cupom, int listaCompraAtivaId)
        {
            var resposta = new Resposta <ListaCompra>
            {
                ObjetoRetorno = null
            };

            try
            {
                var listaCompra = _listaCompraServico.BuscarPorId(listaCompraAtivaId);
                listaCompra.ValorCupom = 0;

                var respostaCupom = string.IsNullOrEmpty(cupom) || cupom == "null"
                    ? new Resposta <Cupom> {
                    Mensagem = "Cupom não encontrado!", TipoMensagem = TipoModal.Warning
                }
                    : _cupomAplicacao.ValidarCupom(cupom);
                listaCompra.Cupom      = string.IsNullOrEmpty(cupom) || cupom == "null" ? "" : cupom;
                listaCompra.ValorCupom = _cupomAplicacao.CalcularValorCupom(listaCompra.Total, respostaCupom?.ObjetoRetorno);

                _listaCompraServico.Salvar(listaCompra);
                listaCompra = _listaCompraServico.AtribuiDescontoAListaCompra(listaCompra);

                resposta.TipoMensagem  = respostaCupom?.TipoMensagem ?? TipoModal.Success;
                resposta.Mensagem      = respostaCupom?.Mensagem ?? string.Empty;
                resposta.ObjetoRetorno = FitListaCompra(listaCompra);
                return(resposta);
            }
            catch (NotFoundException)
            {
                throw new HttpResponseException(HttpStatusCode.NotFound);
            }
            catch (Exception ex)
            {
                resposta.TipoMensagem = TipoModal.Danger;
                resposta.Mensagem     = ex.Message;
                return(resposta);
            }
        }
예제 #2
0
        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
            });
        }
예제 #3
0
        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
            });
        }