Пример #1
0
        public static DateTime GetExpiryDate(Enums.MembershipDuration duration)
        {
            DateTime today = DateTime.Now;

            switch (duration)
            {
            case Enums.MembershipDuration.OneDay:
                return(today.AddDays(1));

            case Enums.MembershipDuration.OneWeek:
                return(today.AddDays(8));

            case Enums.MembershipDuration.TwoWeeks:
                return(today.AddDays(15));

            case Enums.MembershipDuration.OneMonth:
                return(today.AddMonths(1));

            case Enums.MembershipDuration.TwoMonth:
                return(today.AddMonths(2));

            case Enums.MembershipDuration.ThreeMonths:
                return(today.AddMonths(3));

            case Enums.MembershipDuration.FourMonths:
                return(today.AddMonths(4));

            case Enums.MembershipDuration.SixMonths:
                return(today.AddMonths(6));

            case Enums.MembershipDuration.OneYear:
                return(today.AddYears(1));

            case Enums.MembershipDuration.TwoYears:
                return(today.AddYears(2));

            case Enums.MembershipDuration.Unlimited:
                return(DateTime.MaxValue);

            default:
                return(DateTime.MinValue);
            }
        }
        public bool IsDurationOffered(Enums.MembershipDuration duration)
        {
            int d = context.MembershipDeals.Where(m => m.Duration == duration).Select(m => m.Id).FirstOrDefault();

            return(d == 0 ? false : true);
        }
Пример #3
0
        public async Task <IActionResult> Processing(string stripeToken, string stripeEmail, int amount, Enums.MembershipDuration membershipDuration)
        {
            ApplicationUser user = await userManager.FindByEmailAsync(User.Identity.Name);

            // Checking if user has membership.
            Claim claim = (await userManager.GetClaimsAsync(user)).Where(c => c.Type == "MembershipExpiry")
                          .OrderByDescending(c => c.Value)
                          .FirstOrDefault();

            // If the user was previously granted membership, then do not issue a new one if the membership is still valid.
            if (claim != null && Convert.ToDateTime(claim.Value) > DateTime.Today)
            {
                return(RedirectToAction("AlreadyAMember", "Error", routeValues: new { expiry = Convert.ToDateTime(claim.Value) }));
            }

            // This object contains information about the charge we will create.
            ChargeCreateOptions options = new ChargeCreateOptions
            {
                Amount       = amount,
                Currency     = "GBP",
                Description  = Enums.GetDisplayName(membershipDuration) + " membership",
                Source       = stripeToken,
                ReceiptEmail = stripeEmail // This sends email receipt to the customer based on the entered email.

                                           //// Metadata can be used to store more non-sensitive information for our own reference.
                                           //// Stripe does not use this information.
                                           //Metadata = new Dictionary<String, String>{ { "OrderId", "..." } }
            };

            // This creates the charge in which we pass in the information. The status of the charge will be pending until
            // Stripe processes it and returns a status of either succeeded of failed.
            ChargeService service = new ChargeService();
            // The charge request is made here. It connects to Stripe servers and processes the transaction.
            Charge charge = service.Create(options);

            // Checking the status of the charge. Succeeded or failed or Pending.
            try
            {
                if (charge.Status == "succeeded")
                {
                    // Create new membership for the user.
                    DateTime       expiry = Expiry.GetExpiryDate(membershipDuration);
                    IdentityResult result = await userManager.AddClaimAsync(user, new Claim("MembershipExpiry", expiry.ToShortDateString()));

                    ViewBag.FirstName  = user.FirstName;
                    ViewBag.LastName   = user.LastName;
                    ViewBag.ExpiryDate = expiry.ToShortDateString();

                    return(View(nameof(Success)));
                }
                if (charge.Status == "failed")
                {
                    return(View(nameof(Fail)));
                }
            }
            catch (Exception)
            {
                return(RedirectToAction("PaymentError", "Error"));
            }

            return(View());
        }