public ActionResult CheckoutPaymentPage(ContentModel model) { var currentCart = CurrentCart.Create(SnuffoSettings.STORE_NAME); var order = currentCart.GetOrder(); if (order.HasOrderProductDetails() && !order.ShippingMethodId.HasValue) { return(Redirect(string.Concat("/", CurrentUser.LanguageCode, "/cart/checkout-shipping"))); } var cpm = new CheckoutPaymentModel(model.Content); cpm.PaymentMethods = UvendiaContext.PaymentMethods.All().Where(p => p.Enabled).ToList(); cpm.SelectedPaymentMethodId = order.PaymentMethodId; cpm.iDealIssuerId = order.MetaData; try { var ideal = cpm.PaymentMethods.Single(x => x.Name.Equals("ideal", StringComparison.InvariantCultureIgnoreCase)); ServicePointManager.Expect100Continue = true; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; Connector connector = new Connector(); connector.MerchantId = ideal["MerchantID"]; connector.SubId = ideal["SubID"]; connector.ExpirationPeriod = ideal["ExpirationPeriod"]; connector.MerchantReturnUrl = new Uri(string.Format(ideal["MerchantReturnURL"], CurrentUser.LanguageCode)); ING.iDealAdvanced.Data.Issuers issuers = connector.GetIssuerList(); foreach (var country in issuers.Countries) { foreach (var issuer in country.Issuers) { cpm.iDealIssuerList.Add(new SelectListItem() { Text = issuer.Name, Value = issuer.Id.ToString() }); } } } catch (ING.iDealAdvanced.Data.IDealException iex) { // request consumerMessage MailController.Instance(Request, model.Content, CurrentUser.LanguageCode).MailError(new HandleErrorInfo(iex, "CheckoutPaymentPage", "LoadIssueList")).SendAsync(); } catch (Exception ex) { MailController.Instance(Request, model.Content, CurrentUser.LanguageCode).MailError(new HandleErrorInfo(ex, "CheckoutPaymentPage", "LoadIssueList")).SendAsync(); //throw; } return(CurrentTemplate(cpm)); }
public ActionResult CheckoutCompletedPage(ContentModel model) { var currentCart = CurrentCart.Create(SnuffoSettings.STORE_NAME); if (currentCart.ItemsCount == 0) { return(Redirect($"/{CurrentUser.LanguageCode}/cart/")); } try { var order = currentCart.GetOrder(); var checkoutOrder = OrderMapper.Map <CheckoutOrder>(order); string baseUrl = WebUtils.GetApplicationUrlPath(HttpContext.ApplicationInstance.Context); checkoutOrder.CallBackUrlOnPaymentSucceed = $"{baseUrl}{CurrentUser.LanguageCode}/checkout-completed"; checkoutOrder.CallBackUrlOnPaymentFailed = $"{baseUrl}{CurrentUser.LanguageCode}/checkout-cancelled"; checkoutOrder.OrderDetails.AddRange(OrderMapper.Map <List <CheckoutOrderDetail> >(order.ProductOrderDetails)); checkoutOrder.OrderDetails.AddRange(OrderMapper.Map <List <CheckoutOrderDetail> >(order.TicketOrderDetails)); var payment = PaymentBase.CreatePayment(checkoutOrder); if (payment.PaymentMethod == CS.PaymentMethod.PayPal) { PayPalPayment paypal = payment as PayPalPayment; paypal.IsSandbox = string.Equals(order.PaymentMethod["Mode"], "sandbox"); paypal.ClientId = order.PaymentMethod["ClientId"]; paypal.ClientSecret = order.PaymentMethod["ClientSecret"]; } if (Request.QueryString.Count == 0) { var response = payment.DoPayment(); order.PaymentTransactionId = response.PaymentTransactionId; // Save the order currentCart.SaveOrder(order); return(Redirect(response.PaymentServiceUrl)); } order.PayerId = Request.QueryString["PayerID"]; if (payment.RequestPaymentStatus(order.PaymentTransactionId, order.PayerId, out string message) != PaymentStatus.Success) { order.PaymentError = message; // Save order order.OrderStatusId = OrderStatus.Cancelled.Id; currentCart.SaveOrder(order); return(Redirect($"/{CurrentUser.LanguageCode}/checkout-cancelled/")); } // Tickets are sent immediately order.OrderStatusId = (order.ProductOrderDetails.IsNullOrEmpty()) ? OrderStatus.Sent.Id : OrderStatus.Started.Id; order.Paid = true; order.PaidAmount = order.CalculateTotal(); currentCart.CompleteOrder(order); if (order.ProductOrderDetails.Any()) { // Send order confirmation mail. MailController.Instance(Request, model.Content, CurrentUser.LanguageCode).ConfirmOrderMail(order).Send(); } if (order.TicketOrderDetails.Any()) // tickets bought { MailController.Instance(Request, model.Content, CurrentUser.LanguageCode).SendTicketsPDF(order).Send(); } } catch (OrderAlreadyProcessedException) { // Clear cart. currentCart.ClearCart(); } return(CurrentTemplate(model)); }