/// <summary> /// Função responsável por abrir uma requisição /// com a operadora de pagamentos PagSeguro, /// onde é passado para a mesma, as informações /// referente a os itens que estão sendo comprados /// </summary> /// <author>Claudinei Nascimento</author> /// <business>Vip-Systems Tecnologia & Inovação LTDA></business> /// <returns>Redireciona para a pagina do PagSeguro</returns> public ActionResult FinalizarPagSeguro() { //Recupera o id do usuário que esta gravado nos cookies HttpCookie cookie = (HttpCookie)Request.Cookies["usuario"]; //se não ouver id, a pagina é redirecionada para a tela de login if (cookie.Values.AllKeys[0] == null) { //linkModel model = new linkModel(); //model.link = "/Carrinho/IndexCarrinho"; //return RedirectToAction("LogOn", "Account", model); return(RedirectToAction("LogOn", "Account")); } ecomm_clientes usuario = cliente.getUsuarioById(cookie.Values.AllKeys[0]); String produtosCarrinho = this.RecuperarIDProdutos(); Uri paymentRedirectUri = null; if (usuario != null) { if (Settings.Default.FiltraEstoque > 0) { if (getEstoque().Count > 0) { return(RedirectToAction("IndexCarrinho")); } } decimal peso = Settings.Default.PesoMinimoCorreios; if (controleCarrinho.getTotalPeso(produtosCarrinho) >= (int)Settings.Default.PesoMinimoCorreios) { peso = 0; } try { decimal vlrTotalCompra = 0; PaymentRequest payment = new PaymentRequest(); payment.Currency = Currency.Brl; payment.Reference = cookie.Values.AllKeys[0]; payment.Sender = new Sender(usuario.nome, usuario.EMAIL1); payment.Shipping = new Shipping(); //Forma de envio não especificada, o usuário podera escolher entra PAC e SEDEX dos Correios payment.Shipping.ShippingType = ShippingType.NotSpecified; Address address = new Address("BRASIL", usuario.UF_RESIDENCIAL, usuario.CIDADE_RESIDENCIAL, usuario.BAIRRO_RESIDENCIAL, usuario.CEP_RESIDENCIAL.Replace("-", ""), usuario.ENDERECO_RESIDENCIAL, usuario.NRO_RESIDENCIAL, usuario.COMPLEMENTO_RESIDENCIAL); payment.Shipping.Address = address; //payment.RedirectUri = new Uri("http://" + Settings.Default.LinkSite + "/e-commerce/Carrinho/Retorno"); AccountCredentials credentials = new AccountCredentials( Settings.Default.EmailCredential, Settings.Default.TokenCredential ); String[] ids = produtosCarrinho.Split(','); foreach (var itemId in ids) { String[] ids2 = itemId.Split('-'); ObjectResult <buscaprodutos_result> result = produtos.getProdutosById(ids2[0]); if (result != null) { ObjectResult <SP_GetPeso_Result> resultPeso = null; foreach (var item in result) { resultPeso = produtos.getPeso(item.codigo.ToString()); foreach (var itemPesso in resultPeso) { if (peso == 0) { string pesoTotalFormatado = String.Format("{0:N3}", itemPesso.peso); peso = Convert.ToDecimal(pesoTotalFormatado.Replace(",", ".")); payment.Items.Add(new Item(item.codigo.ToString(), item.nomeresumido, Convert.ToInt32(ids2[1]), item.preco, (int)peso, 0)); peso = 0; } else { decimal totalItens = Convert.ToDecimal(controleCarrinho.ContarCarrinho(produtosCarrinho)); decimal pesoT = Convert.ToDecimal(peso); int lPeso = 1; if (pesoT / totalItens > 0.54m) { lPeso = Convert.ToInt32(pesoT / totalItens); } payment.Items.Add(new Item(item.codigo.ToString(), item.nomeresumido, Convert.ToInt32(ids2[1]), item.preco, lPeso, 0)); } vlrTotalCompra += Convert.ToInt32(ids2[1]) * item.preco; } } } } ServicePointManager.ServerCertificateValidationCallback = delegate { return(true); }; if (Settings.Default.ReservaPedidoBotaoComprar) { SetPedidoFinalizar setFinalizar = new SetPedidoFinalizar(); setFinalizar.usuario = usuario; setFinalizar.lstItem = payment.Items; setFinalizar.vlrTotalCompra = vlrTotalCompra; payment.Reference = setFinalizar.gerarPedido(); } paymentRedirectUri = PaymentService.Register(credentials, payment); if (!string.IsNullOrEmpty(produtosCarrinho)) { LimparCarrinho(produtosCarrinho); } return(Redirect(paymentRedirectUri.AbsoluteUri.ToString())); } catch (PagSeguroServiceException ex) { StackTrace exe = new StackTrace(ex, true); CustomException ep = new CustomException(ex, exe, ""); ep.Save(AppDomain.CurrentDomain.BaseDirectory + "/Logs/LogRedirect.log"); foreach (PagSeguroServiceError error in ex.Errors) { GravarLog.gravarLogError(error.ToString(), "Erro PagSeguro"); } } ViewBag.Tema = Settings.Default.Tema; } return(View("Shared/Error")); }