コード例 #1
0
        public ActionResult Signup(UserModel.User user, System.Web.Mvc.FormCollection collection)
        {
            if (ModelState.IsValid)
            {
                var PlanId = String.Empty;
                NewSubscription UserData = new NewSubscription();
                UserData.Email = user.BillingEmail;
                UserData.Username = user.BillingName;
                UserData.Password = user.BillingPassword;
                UserData.Plan = "Premium";
                PlanId = "d5jb";
                UserData.Company = user.Company;
                UserData.TOSCheck = Convert.ToInt32(user.TOSCheck);
                var regexItem = new Regex(@"\d");
                string email = user.BillingEmail;
                Regex regex = new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$");
                Match match = regex.Match(email);
                if (!match.Success)
                {
                    //Bad Email
                    ModelState.AddModelError("BillingEmail", "Invalid Email");
                }
                else if (user.IsEmailValid(email))
                {
                    //Email Taken
                    ModelState.AddModelError("BillingEmail", "Email already in use");
                }
                if (user.BillingName.Length < 5)
                {
                    //Bad Username
                    ModelState.AddModelError("BillingName", "Username must be a least 5 characters in length");
                }
                else if (user.DoesUsernameExist(user.BillingName))
                {
                    //Username already exists
                    ModelState.AddModelError("BillingName", "Username is already in use");
                }
                if (user.BillingPassword != user.BillingPasswordTwo)
                {
                    //Passwords Don't Match
                    ModelState.AddModelError("BillingPassword", "Passwords do not match");

                }
                else if (user.BillingPassword.Length < 6)
                {
                    //Passwords Too Short
                    ModelState.AddModelError("BillingPassword", "Password must be at least 6 characters in length");
                }
                else if (!regexItem.IsMatch(user.BillingPassword))
                {
                    //Passwords do not contain number
                    ModelState.AddModelError("BillingPassword", "Password must contain at least one number");
                }
                if (user.Company.Length < 1)
                {
                    //Invalid Company
                    ModelState.AddModelError("Company", "Invalid Company Name");
                }
                if (!user.TOSCheck)
                {
                    //Terms of Service not checked
                    ModelState.AddModelError("General", "You must agree to terms of service");
                }
                //Write to DB if all is good
                if (ModelState.IsValid)
                {
                    CustomerRequest request = new CustomerRequest
                    {
                        CreditCard = new CreditCardRequest
                        {
                            CardholderName = collection["name"],
                            Number = collection["number"],
                            ExpirationMonth = collection["month"],
                            ExpirationYear = collection["year"],
                            CVV = collection["cvv"]
                        }
                    };
                    Result<Customer> result = Gateway.BrainTreeGateway.Customer.Create(request);
                    if (result.IsSuccess())
                    {
                        //Successful add to Braintree
                        UserData.BillingID = result.Target.Id;
                        if (user.SaveNewUser(UserData))
                        {
                            //Successful write to DB
                            try
                            {
                                Customer customer = Gateway.BrainTreeGateway.Customer.Find(UserData.BillingID);
                                string paymentMethodToken = customer.CreditCards[0].Token;
                                SubscriptionRequest subscriptionRequest = new SubscriptionRequest
                                {
                                    PaymentMethodToken = paymentMethodToken,
                                    PlanId = PlanId
                                };
                                Result<Subscription> subscriptionResult = Gateway.BrainTreeGateway.Subscription.Create(subscriptionRequest);
                                user.UpdateSubscriptionId(user.BillingName, subscriptionResult.Target.Id);
                                return RedirectToAction("Index", "Home");
                            }
                            catch (Braintree.Exceptions.NotFoundException)
                            {
                                //No customer found
                                return RedirectToAction("Error", "User");
                            }
                        }
                        else
                        {
                            //failure writing customer to database
                            return RedirectToAction("Error", "User");
                        }
                    }
                    else
                    {
                        //failure adding customer to Braintree
                        ModelState.AddModelError("General", result.Message);
                    }
                }
            }
            return View(user);
        }