private PayViewModel GetDefaultPayViewModel() { var m = new PayViewModel(); m.CurrencyCode = "SEK"; m.InvoiceFee = 0; m.LocaleCode = "EN"; m.Memo = "Various items from the demo shop"; m.OrderItems = new List<OrderItem>(); var orderItem = new OrderItem { Description = "Item X", Quantity = 2, Sku = "test X", TaxPercentage = 0, UnitPrice = 23 }; m.OrderItems.Add(orderItem); m.Receiver = new Receiver { Email = ConfigurationManager.AppSettings["Receiver.Email"] ?? "*****@*****.**", FirstName = "Sven", LastName = "Svensson" }; m.Sender = new Sender { Email = "*****@*****.**", FirstName = "Anders", LastName = "Andersson" }; m.UserId = ConfigurationManager.AppSettings["PAYSON-SECURITY-USERID"] ?? "2"; m.UserKey = ConfigurationManager.AppSettings["PAYSON-SECURITY-PASSWORD"] ?? "2acab30d-fe50-426f-90d7-8c60a7eb31d4"; m.GuaranteeOffered = GuaranteeOffered.NO; m.ForwardUrl = null; return m; }
public ActionResult Pay(PayViewModel payViewModel) { var orderGuid = Guid.NewGuid().ToString(); // We remove port info to help when the site is behind a load balancer/firewall that does port rewrites. var scheme = Request.Url.Scheme; var host = Request.Url.Host; var oldPort = Request.Url.Port.ToString(); var returnUrl = Url.Action("Returned", "Checkout", new RouteValueDictionary(), scheme, host).Replace(oldPort, "") + "?orderGuid=" + orderGuid; var cancelUrl = Url.Action("Cancelled", "Checkout", new RouteValueDictionary(), scheme, host).Replace(oldPort, ""); // When the shop is hosted by Payson the IPN scheme must be http and not https var ipnNotificationUrl = Url.Action("IPN", "Checkout", new RouteValueDictionary(), "http", host).Replace(oldPort, "") + "?orderGuid=" + orderGuid; var sender = new PaysonIntegration.Utils.Sender(payViewModel.Sender.Email); sender.SetFirstName(payViewModel.Sender.FirstName); sender.SetLastName(payViewModel.Sender.LastName); var totalAmount = payViewModel.OrderItems.Sum(o => o.UnitPrice * o.Quantity * (1 + o.TaxPercentage)); var receiver = new PaysonIntegration.Utils.Receiver(payViewModel.Receiver.Email, totalAmount); receiver.SetFirstName(payViewModel.Receiver.FirstName); receiver.SetLastName(payViewModel.Receiver.LastName); receiver.SetPrimaryReceiver(true); var payData = new PayData(returnUrl, cancelUrl, payViewModel.Memo, sender, new List<PaysonIntegration.Utils.Receiver> { receiver }); switch (payViewModel.GuaranteeOffered) { case GuaranteeOffered.NO: payData.GuaranteeOffered = PaysonIntegration.Utils.GuaranteeOffered.No; break; case GuaranteeOffered.OPTIONAL: payData.GuaranteeOffered = PaysonIntegration.Utils.GuaranteeOffered.Optional; break; case GuaranteeOffered.REQUIRED: payData.GuaranteeOffered = PaysonIntegration.Utils.GuaranteeOffered.Required; break; default: payData.GuaranteeOffered = null; break; } payData.SetCurrencyCode(payViewModel.CurrencyCode); var fundingConstraints = new List<FundingConstraint>(); if (payViewModel.PaymentMethod == PaymentMethod.PaysonInvoice) { fundingConstraints.Add(FundingConstraint.Invoice); } else { fundingConstraints.Add(FundingConstraint.Bank); fundingConstraints.Add(FundingConstraint.CreditCard); } payData.SetFundingConstraints(fundingConstraints); payData.SetInvoiceFee(payViewModel.InvoiceFee); payData.SetIpnNotificationUrl(ipnNotificationUrl); payData.SetLocaleCode(payViewModel.LocaleCode); var orderItems = new List<PaysonIntegration.Utils.OrderItem>(); foreach (var orderModel in payViewModel.OrderItems) { var oi = new PaysonIntegration.Utils.OrderItem(orderModel.Description); oi.SetOptionalParameters(orderModel.Sku, orderModel.Quantity, orderModel.UnitPrice, orderModel.TaxPercentage); orderItems.Add(oi); } payData.SetOrderItems(orderItems); payData.SetTrackingId(orderGuid); var api = new PaysonApi(payViewModel.UserId, payViewModel.UserKey, ApplicationId, true); var response = api.MakePayRequest(payData); if (response.Success) { var state = new PurchaseState { UserId = payViewModel.UserId, UserKey = payViewModel.UserKey, Token = response.Token, Updates = new Dictionary<DateTime, string> {{DateTime.Now, "Created"}}, OrderGuid = orderGuid, LatestStatus = PaymentStatus.Created.ToString(), ReceiverEmail = receiver.Email, }; repository.SavePurchaseState(state); string forwardUrl = string.IsNullOrWhiteSpace(payViewModel.ForwardUrl) ? api.GetForwardPayUrl(response.Token) : payViewModel.ForwardUrl + response.Token; return Redirect(forwardUrl); } ViewBag.Errors = response.ErrorMessages; return View("Index", GetDefaultPayViewModel()); }
private PayViewModel GetDefaultPayViewModel() { var m = new PayViewModel(); m.CurrencyCode = "SEK"; m.InvoiceFee = 0; m.LocaleCode = "SV"; m.Memo = "Various items from the demo shop"; m.OrderItems = new List<OrderItem>(); var orderItem = new OrderItem { Description = "Order item 1. Blue jeans", Quantity = 1, Sku = "N123456", TaxPercentage = 0.25m, UnitPrice = 899 }; m.OrderItems.Add(orderItem); orderItem = new OrderItem { Description = "Order item 2. Can of soda", Quantity = 3, Sku = "789012D", TaxPercentage = 0.12m, UnitPrice =15 }; m.OrderItems.Add(orderItem); orderItem = new OrderItem { Description = "Order item 3. Travelguide book", Quantity = 2, Sku = "34568SE", TaxPercentage = 0.06m, UnitPrice =190 }; m.OrderItems.Add(orderItem); m.Receiver = new Receiver { Email = ConfigurationManager.AppSettings["Receiver.Email"] ?? "*****@*****.**", FirstName = "Sven", LastName = "Svensson" }; m.Sender = new Sender { Email = "*****@*****.**", FirstName = "Anders", LastName = "Andersson" }; m.UserId = ConfigurationManager.AppSettings["PAYSON-SECURITY-USERID"] ?? "4"; m.UserKey = ConfigurationManager.AppSettings["PAYSON-SECURITY-PASSWORD"] ?? "2acab30d-fe50-426f-90d7-8c60a7eb31d4"; m.GuaranteeOffered = GuaranteeOffered.NO; m.IncludeOrderDetails = true; m.ForwardUrl = null; return m; }