コード例 #1
0
        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;
        }
コード例 #2
0
        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());
        }
コード例 #3
0
        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;
        }