public IHttpActionResult Comprar(string cnpjLoja, string cpfUsuario, int cartaoId, decimal valor, bool auto_capture = true) { cpfUsuario = cpfUsuario.Trim().Replace(".", "").Replace("-", "").PadLeft(11, '0'); cnpjLoja = cnpjLoja.Trim().Replace(".", "").Replace("-", "").Replace("/", ""); var cartao = cartaoServico.BuscarPorId(cartaoId); var usuario = usuarioServico.PrimeiroPor(u => u.Pessoa.Documentos.Any(d => d.Numero.Trim().Replace(".", "").Replace("-", "").Equals(cpfUsuario))); var loja = lojaServico.PrimeiroPor(l => l.Cnpj.Trim().Replace(".", "").Replace("-", "").Replace("/", "").Equals(cnpjLoja)); if (cartao == null) { throw new BusinessRuleException("Cartão não encontrado."); } if (usuario == null) { throw new BusinessRuleException("Usuário não encontrado."); } if (loja == null) { throw new BusinessRuleException("Loja não encontrada."); } var pedido = new Entidade.Pedido { Cartao = cartao, Usuario = usuario, Valor = valor, Loja = loja, Endereco = usuario?.Pessoa?.EnderecoResidencial }; pedidoServico.ValidarESalvar(pedido); var response = _apiTransacaoEbanx.CompraDireta(pedido, auto_capture); pedidoServico.ModificaStatus(pedido.Id, StatusPedido.AguardandoPagamento, pedido.Usuario, codigoRetornoTransacao: response.payment?.hash); return(Ok(response)); }
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 }); }