Exemplo n.º 1
0
        public TransactionResult ProcessTransaction(TransactionRequest request)
        {
            var response = new TransactionResult()
            {
                Success = true
            };

            return(response.Redirect("http://www.google.com"));
        }
Exemplo n.º 2
0
        public static TransactionResult CreateSessionRedirect(TransactionRequest request, StripeSettings stripeSettings,
                                                              ILogger logger, bool isSubscription)
        {
            var order = request.Order;

            InitStripe(stripeSettings);

            var address = DependencyResolver.Resolve <IDataSerializer>()
                          .DeserializeAs <Address>(order.BillingAddressSerialized);

            InitStripe(stripeSettings, true);
            //do we have a saved stripe customer id?
            var customerId = GetCustomerId(order.User, null, address);

            var subscriptionItems = new List <SessionSubscriptionDataItemOptions>();
            var productService    = new ProductService();
            var planService       = new PlanService();

            foreach (var orderItem in order.OrderItems)
            {
                var product = productService.Create(new ProductCreateOptions
                {
                    Name = orderItem.Product.Name,
                    Type = "service"
                });
                var lineTotal = orderItem.Price * orderItem.Quantity + orderItem.Tax;
                GetFinalAmountDetails(lineTotal, order.CurrencyCode, address, out var currencyCode, out var finalAmount);
                var planOptions = new PlanCreateOptions()
                {
                    Nickname        = product.Name,
                    Product         = product.Id,
                    Amount          = (long)finalAmount,
                    Interval        = GetInterval(orderItem.Product.SubscriptionCycle),
                    IntervalCount   = orderItem.Product.CycleCount == 0 ? 1 : orderItem.Product.CycleCount,
                    Currency        = currencyCode,
                    UsageType       = "licensed",
                    TrialPeriodDays = orderItem.Product.TrialDays
                };
                var plan = planService.Create(planOptions);
                subscriptionItems.Add(new SessionSubscriptionDataItemOptions()
                {
                    Plan     = plan.Id,
                    Quantity = orderItem.Quantity
                });
            }
            var options = new SessionCreateOptions
            {
                Customer           = customerId,
                PaymentMethodTypes = new List <string> {
                    "card",
                },
                SubscriptionData = new SessionSubscriptionDataOptions
                {
                    Items    = subscriptionItems,
                    Metadata = new Dictionary <string, string>()
                    {
                        { "orderGuid", order.Guid },
                        { "internalId", order.Id.ToString() },
                        { "isSubscription", isSubscription.ToString() }
                    }
                },
                SuccessUrl = ApplicationEngine.RouteUrl(StripeConfig.StripeReturnUrlRouteName, new { orderGuid = order.Guid }, true),
                CancelUrl  = ApplicationEngine.RouteUrl(StripeConfig.StripeCancelUrlRouteName, new { orderGuid = order.Guid }, true),
                Mode       = isSubscription ? "subscription" : "payment",
            };
            var service = new SessionService();
            var session = service.Create(options);
            var processPaymentResult = new TransactionResult()
            {
                OrderGuid = order.Guid,
            };

            if (session != null && !session.Id.IsNullEmptyOrWhiteSpace())
            {
                processPaymentResult.NewStatus = PaymentStatus.Processing;
                processPaymentResult.TransactionCurrencyCode = order.CurrencyCode;
                processPaymentResult.IsSubscription          = true;
                processPaymentResult.TransactionAmount       = order.OrderTotal;
                processPaymentResult.ResponseParameters      = new Dictionary <string, object>()
                {
                    { "sessionId", session.Id },
                    { "paymentIntentId", session.PaymentIntentId }
                };
                processPaymentResult.Success = true;
                processPaymentResult.Redirect(ApplicationEngine.RouteUrl(StripeConfig.StripeRedirectToUrlRouteName,
                                                                         new { orderGuid = order.Guid, sessionId = session.Id }));
            }
            else
            {
                processPaymentResult.Success = false;
                logger.Log <TransactionResult>(LogLevel.Warning, $"The session for Order#{order.Id} by stripe redirect failed." + session?.StripeResponse.Content);
            }

            return(processPaymentResult);
        }
Exemplo n.º 3
0
        public static TransactionResult ProcessApproval(TransactionRequest request, PaypalWithRedirectSettings settings)
        {
            var order = request.Order;
            var payer = new Payer()
            {
                PaymentMethod = "paypal",
            };

            var payment = new Payment()
            {
                Intent       = "sale",
                Transactions = new List <Transaction>()
                {
                    new Transaction()
                    {
                        Amount = new Amount()
                        {
                            Total    = (request.Amount ?? order.OrderTotal).ToString("N"),
                            Currency = order.CurrencyCode
                        }
                    }
                },
                RedirectUrls = new RedirectUrls()
                {
                    ReturnUrl = ApplicationEngine.RouteUrl(PaypalConfig.PaypalWithRedirectReturnUrlRouteName, new { orderGuid = order.Guid }, absoluteUrl: true),
                    CancelUrl = ApplicationEngine.RouteUrl(PaypalConfig.PaypalWithRedirectCancelUrlRouteName, new { orderGuid = order.Guid }, absoluteUrl: true),
                },
                Payer = payer
            };
            var pcRequest = new PaymentCreateRequest();

            pcRequest.RequestBody(payment);

            var environment = GetEnvironment(settings);

            var client            = new PayPalHttpClient(environment);
            var transactionResult = new TransactionResult();

            try
            {
                var response = client.Execute(pcRequest).Result;
                var result   = response.Result <Payment>();

                string redirectUrl = null;
                foreach (var link in result.Links)
                {
                    if (link.Rel.Equals("approval_url"))
                    {
                        redirectUrl = link.Href;
                    }
                }

                if (redirectUrl == null)
                {
                    transactionResult.Success   = false;
                    transactionResult.Exception = new Exception("Failed to get approval url");
                }
                else
                {
                    transactionResult.Success   = true;
                    transactionResult.NewStatus = PaymentStatus.Authorized;
                    transactionResult.Redirect(redirectUrl);
                }
            }
            catch (BraintreeHttp.HttpException ex)
            {
                transactionResult.Exception = ex;
            }

            return(transactionResult);
        }