public void Subscription_Does_PartialUpdate_Fail()
        {
            // Arrange
            var client       = Chargify;
            var subscription = client.GetSubscriptionList().FirstOrDefault(s => s.Value.State == SubscriptionState.Active).Value;

            // Check that the card isn't expired
            var expDate = new DateTime(subscription.PaymentProfile.ExpirationYear, subscription.PaymentProfile.ExpirationMonth, 1);

            if (expDate < DateTime.Now)
            {
                subscription = client.UpdateSubscriptionCreditCard(subscription.SubscriptionID, "1", DateTime.Now.AddMonths(1).Month, DateTime.Now.AddYears(1).Year, "123", subscription.PaymentProfile.BillingAddress, subscription.PaymentProfile.BillingCity, subscription.PaymentProfile.BillingState, subscription.PaymentProfile.BillingZip, subscription.PaymentProfile.BillingCountry);
            }

            string oldAddress = subscription.PaymentProfile.BillingAddress, oldAddress2 = subscription.PaymentProfile.BillingAddress2,
                   oldCity = subscription.PaymentProfile.BillingCity,
                   oldState = subscription.PaymentProfile.BillingState, oldZip = subscription.PaymentProfile.BillingZip;

            var newAttributes = new CreditCardAttributes()
            {
                BillingAddress  = GetNewRandomValue(oldAddress, Faker.Address.StreetAddress),
                BillingAddress2 = GetNewRandomValue(oldAddress2, Faker.Address.SecondaryAddress),
                BillingCity     = GetNewRandomValue(oldCity, Faker.Address.City),
                BillingState    = GetNewRandomValue(oldState, Faker.Address.UsState),
                BillingZip      = GetNewRandomValue(oldZip, Faker.Address.ZipCode),
                BillingCountry  = "US"
            };

            // Act
            var result = client.UpdateSubscriptionCreditCard(subscription.SubscriptionID, newAttributes);
        }
Beispiel #2
0
        private CreditCardAttributes GetTestPaymentMethod(CustomerAttributes customer)
        {
            var retVal = new CreditCardAttributes()
            {
                FirstName       = customer.FirstName,
                LastName        = customer.LastName,
                ExpirationMonth = 1,
                ExpirationYear  = 2020,
                FullNumber      = "1",
                CVV             = "123",
                BillingAddress  = Faker.Address.StreetAddress(false),
                BillingCity     = Faker.Address.City(),
                BillingCountry  = "US",
                BillingState    = Faker.Address.StateAbbr(),
                BillingZip      = Faker.Address.ZipCode()
            };

            return(retVal);
        }
        private CreditCardAttributes GetTestPaymentMethod(CustomerAttributes customer)
        {
            var retVal = new CreditCardAttributes()
            {
                FirstName       = customer.FirstName,
                LastName        = customer.LastName,
                ExpirationMonth = 1,
                ExpirationYear  = 2020,
                FullNumber      = "1",
                CVV             = "123",
                BillingAddress  = "123 Main St.",
                BillingCity     = "New York",
                BillingCountry  = "US",
                BillingState    = "New York",
                BillingZip      = "10001"
            };

            return(retVal);
        }
        public void Subscription_Can_Update_Payment_FirstLast()
        {
            // Arrange
            var client        = Chargify;
            var subscription  = client.GetSubscriptionList().FirstOrDefault(s => s.Value.State == SubscriptionState.Active).Value;
            var oldFirst      = subscription.PaymentProfile.FirstName;
            var oldLast       = subscription.PaymentProfile.LastName;
            var newFirst      = Guid.NewGuid().ToString();
            var newLast       = Guid.NewGuid().ToString();
            var oldAttributes = new CreditCardAttributes(oldFirst, oldLast, "1",
                                                         subscription.PaymentProfile.ExpirationYear, subscription.PaymentProfile.ExpirationMonth, "123", subscription.PaymentProfile.BillingAddress, subscription.PaymentProfile.BillingCity,
                                                         subscription.PaymentProfile.BillingState, subscription.PaymentProfile.BillingZip, subscription.PaymentProfile.BillingCountry);
            var newAttributes = new CreditCardAttributes(newFirst, newLast, "1",
                                                         subscription.PaymentProfile.ExpirationYear, subscription.PaymentProfile.ExpirationMonth, "123", subscription.PaymentProfile.BillingAddress, subscription.PaymentProfile.BillingCity,
                                                         subscription.PaymentProfile.BillingState, subscription.PaymentProfile.BillingZip, subscription.PaymentProfile.BillingCountry);

            // Act
            var updatedSubscription = client.UpdateSubscriptionCreditCard(subscription.SubscriptionID, newAttributes);

            // Assert
            Assert.IsNotNull(updatedSubscription);
            //Assert.IsInstanceOfType(updatedSubscription, typeof(Subscription));
            Assert.AreEqual(newFirst, updatedSubscription.PaymentProfile.FirstName);
            Assert.AreEqual(newLast, updatedSubscription.PaymentProfile.LastName);
            Assert.AreEqual(subscription.PaymentProfile.ExpirationYear, updatedSubscription.PaymentProfile.ExpirationYear);
            Assert.AreEqual(subscription.PaymentProfile.ExpirationMonth, updatedSubscription.PaymentProfile.ExpirationMonth);
            Assert.AreEqual(subscription.PaymentProfile.BillingAddress, updatedSubscription.PaymentProfile.BillingAddress);
            Assert.AreEqual(subscription.PaymentProfile.BillingCity, updatedSubscription.PaymentProfile.BillingCity);
            Assert.AreEqual(subscription.PaymentProfile.BillingState, updatedSubscription.PaymentProfile.BillingState);
            Assert.AreEqual(subscription.PaymentProfile.BillingZip, updatedSubscription.PaymentProfile.BillingZip);
            Assert.AreEqual(subscription.PaymentProfile.BillingCountry, updatedSubscription.PaymentProfile.BillingCountry);

            // Cleanup
            var replacedSubscription = client.UpdateSubscriptionCreditCard(subscription.SubscriptionID, oldAttributes);

            Assert.IsNotNull(replacedSubscription);
            Assert.AreEqual(oldFirst, replacedSubscription.PaymentProfile.FirstName);
            Assert.AreEqual(oldLast, replacedSubscription.PaymentProfile.LastName);
        }
Beispiel #5
0
        public ActionResult Subscribe(TestProject.Models.Subscribe subscribe, string confirmKey)
        {
            ChargifyConnect chargify = ChargifyTools.Chargify;
            string          plan     = subscribe.plan;
            bool            isCredit = subscribe.hasCreditCard || subscribe.creditcard.requireCredit;//ChargifyTools.RequireCreditCard(subscribe.plan);

            try
            {
                if (ChargifyTools.IsChargifyProduct(subscribe.plan))
                {
                    ViewBag.confirmKey = confirmKey;
                    ViewBag.plan       = subscribe.plan;
                    if (ValidatePassword(subscribe.password) == false)
                    {
                        //ViewBag.contactGenderId = new SelectList(db.contactGender.ToList(), "contactGenderId", "name");
                        ViewBag.Message = "Error password, you need a format that contains capital letters and numbers, example: Michael7.";
                        ViewBag.plan    = subscribe.plan;

                        return(View(subscribe));
                    }

                    userLogin user = new userLogin();
                    contact   cont = new contact();
                    tenant    tnt  = new tenant();
                    //----------------------------------------------------------------------------------------------------------------
                    //----------------------------------------------------------------------------------------------------------------
                    //----------------------------------------------------------------------------------------------------------------

                    tnt.tenantSubscriptionPlanId = (from pl in db.tenantSubscriptionPlan
                                                    where pl.code.ToLower().Equals(plan.ToLower())
                                                    select pl.tenantSubscriptionPlanId).FirstOrDefault();
                    tnt.active           = true;
                    tnt.allocatedUsers   = 1; //cantidad de usuarios asignados
                    tnt.billingRefNumber = Guid.NewGuid().ToString();
                    tnt.companyName      = subscribe.company;
                    tnt.companyURL       = "N/A";
                    tnt.database         = "TestProject";
                    tnt.tenantStatusId   = 2;
                    tnt.tenantSourceId   = 2;
                    if (isCredit)
                    {
                        tnt.tenentBillingTypeId = 1;
                    }
                    else
                    {
                        tnt.tenentBillingTypeId = 2;
                    }

                    /****** Valores quemados de campos auditoria*****/
                    tnt.updatedById    = 0;
                    tnt.createdById    = TntIdTestProject; // Id tenant TestProject
                    tnt.modifyDateTime = new DateTime(1900, 1, 1, 0, 0, 0);
                    tnt.insertDateTime = DateTime.Now;
                    /****** Valores quemados de campos auditoria*****/

                    db.tenant.Add(tnt);
                    db.SaveChanges();



                    var city = db.genCity
                               .Include(x => x.genState.genContry)
                               .SingleOrDefault(x => x.genCityId == Convert.ToInt32(subscribe.genCityId));
                    if (isCredit)
                    {
                        contactPhone phone = new contactPhone
                        {
                            active             = true,
                            number             = subscribe.phoneNumber,
                            contactId          = cont.contactId,
                            contactPhoneTypeId = 1,
                            tenantId           = tnt.tenantId,
                            updatedById        = 0,
                            createdById        = TntIdTestProject, // Id tenant TestProject
                            modifyDateTime     = new DateTime(1900, 1, 1, 0, 0, 0),
                            insertDateTime     = DateTime.Now
                        };

                        db.contactPhone.Add(phone);
                        db.SaveChanges();

                        cont.preferredBillAddressId = address.contactAddressId;
                        cont.preferredPhoneId       = phone.contactPhoneId;
                        db.Entry(cont).State        = EntityState.Modified;
                        db.SaveChanges();
                    }



                    /*** cosas de chargify!!!*/
                    CustomerAttributes customerInformation = new CustomerAttributes();
                    customerInformation.FirstName    = subscribe.firstName;
                    customerInformation.LastName     = subscribe.lastName;
                    customerInformation.Organization = subscribe.company;
                    customerInformation.Email        = subscribe.email;
                    // Create a new guid, this would be the Membership UserID if we were creating a new user simultaneously
                    customerInformation.SystemID = tnt.billingRefNumber;


                    ISubscription newSubscription = null;
                    string        productHandle   = plan;

                    if (isCredit)
                    {
                        CreditCardAttributes creditCardInfo = new CreditCardAttributes();

                        creditCardInfo.FullNumber      = subscribe.creditcard.creditCardNumber;
                        creditCardInfo.CVV             = subscribe.creditcard.cvv;
                        creditCardInfo.ExpirationMonth = subscribe.creditcard.ExpireMonth;
                        creditCardInfo.ExpirationYear  = subscribe.creditcard.ExpireYear;

                        creditCardInfo.BillingAddress = subscribe.street;
                        creditCardInfo.BillingCity    = city.City;//subscribe.city;
                        creditCardInfo.BillingState   = city.genState.State;
                        creditCardInfo.BillingZip     = subscribe.postalCode;
                        creditCardInfo.BillingCountry = city.genState.genContry.contry;

                        newSubscription = chargify.CreateSubscription(productHandle, customerInformation, creditCardInfo);
                    }
                    else
                    {
                        newSubscription = chargify.CreateSubscription(productHandle, customerInformation);
                    }
                }
            }
            catch (DbEntityValidationException e)
            {
                foreach (var eve in e.EntityValidationErrors)
                {
                    System.Diagnostics.Debug.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                                                       eve.Entry.Entity.GetType().Name, eve.Entry.State);
                    foreach (var ve in eve.ValidationErrors)
                    {
                        System.Diagnostics.Debug.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
                                                           ve.PropertyName, ve.ErrorMessage);
                    }
                }
                throw;
            }
            catch (Exception e)
            {
                return(View(subscribe));
            }


            return(View(subscribe));
        }
Beispiel #6
0
        public ActionResult Subscribe(string id, LocalSubscriptionViewModel model)
        {
            //  if (ModelState.IsValid)
            //{
            // Attempt to register the user
            //MembershipCreateStatus createStatus;
            //MembershipUser user = MembershipService.CreateUser(model.Username, model.Password, model.Email, model.Question, model.Answer, out createStatus);

            //if (createStatus == MembershipCreateStatus.Success)
            if (true)
            {
                //if (!RoleService.RoleExists("user"))
                //{
                //    RoleService.CreateRole("user");
                //}
                //RoleService.AddUsersToRoles(new string[] { user.UserName }, new string[] { "User" });

                // Now that the user is created, attempt to create the corresponding subscription
                CustomerAttributes cInfo = new CustomerAttributes();
                cInfo.FirstName = model.FirstName;
                cInfo.LastName  = model.LastName;
                cInfo.Email     = model.Email;
                cInfo.SystemID  = Guid.NewGuid().ToString();   ///Convert.ToInt32(Session["userId"]).ToString();

                if (Convert.ToBoolean(Session["RequireCreditCard"]))
                {
                    CreditCardAttributes ccAttr = new CreditCardAttributes();
                    ccAttr.FullNumber      = model.CardNumber.Trim();
                    ccAttr.CVV             = model.CVV;
                    ccAttr.ExpirationMonth = model.ExpMonth;
                    ccAttr.ExpirationYear  = model.ExpYear;

                    ccAttr.BillingAddress = model.Address;
                    ccAttr.BillingCity    = model.City;
                    ccAttr.BillingZip     = model.PostalCode;
                    ccAttr.BillingState   = model.Province;
                    ccAttr.BillingCountry = "CA";

                    ISubscription newSubscription = Chargify.CreateSubscription(id, cInfo, ccAttr);
                }
                else
                {
                    ISubscription newSubscription = Chargify.CreateSubscription(id, cInfo);
                }

                try
                {
                    //FormsService.SignIn(model.Username, false /* createPersistentCookie */);
                    return(RedirectToAction("Index", "Chargify"));
                }
                catch (ChargifyException ex)
                {
                    if (ex.ErrorMessages.Count > 0)
                    {
                        ModelState.AddModelError("", ex.ErrorMessages.FirstOrDefault().Message);
                    }
                    else
                    {
                        ModelState.AddModelError("", ex.ToString());
                    }
                }
            }
            else
            {
                //ModelState.AddModelError("", AccountValidation.ErrorCodeToString(createStatus));
            }

            return(RedirectToAction("Subscribe"));
        }
Beispiel #7
0
        public void DoSampleCode()
        {
            ChargifyConnect chargify = new ChargifyConnect();

            chargify.apiKey   = ConfigurationManager.AppSettings["CHARGIFY_API_KEY"];
            chargify.Password = ConfigurationManager.AppSettings["CHARGIFY_API_PASSWORD"];
            chargify.URL      = ConfigurationManager.AppSettings["CHARGIFY_URL"];

            // Create a new customer and a subscription for him
            ICustomerAttributes scottPilgrim = new CustomerAttributes("Scott", "Pilgrim", "*****@*****.**", "Chargify", Guid.NewGuid().ToString());

            ICreditCardAttributes scottsPaymentInfo = new CreditCardAttributes();

            scottsPaymentInfo.FirstName       = scottPilgrim.FirstName;
            scottsPaymentInfo.LastName        = scottPilgrim.LastName;
            scottsPaymentInfo.ExpirationMonth = 1;
            scottsPaymentInfo.ExpirationYear  = 2020;
            scottsPaymentInfo.FullNumber      = "1";
            scottsPaymentInfo.CVV             = "123";
            scottsPaymentInfo.BillingAddress  = "123 Main St.";
            scottsPaymentInfo.BillingCity     = "New York";
            scottsPaymentInfo.BillingCountry  = "US";
            scottsPaymentInfo.BillingState    = "New York";
            scottsPaymentInfo.BillingZip      = "10001";

            ISubscription newSubscription = chargify.CreateSubscription("basic", scottPilgrim, scottsPaymentInfo);

            if (newSubscription != null)
            {
                // subscription success.
                Console.WriteLine("Subscription succeeded.");
            }
            else
            {
                // subscription failure.
                Console.WriteLine("Update customer failed with response: ", chargify.LastResponse.ToString());
            }

            ICharge oneTimeChargeResults = chargify.CreateCharge(newSubscription.SubscriptionID, 123.45m, "Testing One-Time Charge");

            if (oneTimeChargeResults != null)
            {
                // one-time charge success.
                Console.WriteLine(string.Format("Charge succeeded: {0}", oneTimeChargeResults.Success.ToString()));
            }
            else
            {
                // one time charge failure.
                Console.WriteLine("One-time charge failed with response: ", chargify.LastResponse.ToString());
            }

            IDictionary <int, ITransaction> transactions = chargify.GetTransactionsForSubscription(newSubscription.SubscriptionID, new List <TransactionType>()
            {
                TransactionType.Payment
            });
            // Grab the last payment transaction, which we will refund (will be the one-time charge we just assessed)
            ITransaction firstTransaction = transactions.First().Value;
            IRefund      chargeRefund     = chargify.CreateRefund(newSubscription.SubscriptionID, firstTransaction.ID, firstTransaction.AmountInCents, "Test Refund");

            if (chargeRefund != null)
            {
                Console.WriteLine("Refund was: " + (chargeRefund.Success ? "successful" : "unsuccessful"));
            }

            bool result = chargify.DeleteSubscription(newSubscription.SubscriptionID, "Testing Reactivation");

            if (result)
            {
                ISubscription reactivatedSubscription = chargify.ReactivateSubscription(newSubscription.SubscriptionID);
                if (reactivatedSubscription != null)
                {
                    Console.WriteLine("Reactivation succeeded!");
                }
                else
                {
                    Console.WriteLine("Reactivation failed with response: ", chargify.LastResponse.ToString());
                }

                // Currently a bug if you say "true" for the last two parameters. Being worked on.
                reactivatedSubscription = chargify.MigrateSubscriptionProduct(reactivatedSubscription.SubscriptionID, "ultimate", true, true);
                if (reactivatedSubscription != null)
                {
                    Console.WriteLine("Migration succeeded!");
                }
                else
                {
                }
            }
            else
            {
                Console.WriteLine("Cancellation failed with response: ", chargify.LastResponse.ToString());
            }

            //IDictionary<int, ITransaction> transactions = chargify.GetTransactionsForSubscription(newSubscription.SubscriptionID);
            //if ((transactions != null) && (transactions.Count > 0))
            //{
            //    foreach (ITransaction transaction in transactions.Values)
            //    {
            //        Console.WriteLine(string.Format("Date: {0}, Who: {1}, Type: {2}, Memo: {3}, Amount: {4}", transaction.CreatedAt, transaction.SubscriptionID, transaction.ProductID, transaction.Memo, transaction.Amount));
            //    }
            //}
        }
        public bool PostOrder(int orderId)
        {
            bool  result    = false;
            Order orderItem = new OrderManager().GetBatchProcessOrder(orderId);


            orderItem.LoadAttributeValues();
            ChargifyConnect chargify = new ChargifyConnect();

            chargify.apiKey   = config.Attributes["APIKey"].Value;
            chargify.Password = config.Attributes["Password"].Value;
            chargify.URL      = config.Attributes["site"].Value;

            // Retrieve a list of all your products
            //IDictionary<int, IProduct> products = chargify.GetProductList();

            // Create a new customer
            ICustomer newCustomer = chargify.CreateCustomer(orderItem.CustomerInfo.ShippingAddress.FirstName, orderItem.CustomerInfo.ShippingAddress.LastName, orderItem.Email, "ConversionSystems", "CS_" + "DC_" + orderItem.OrderId.ToString());

            newCustomer.Email           = orderItem.Email;
            newCustomer.ShippingAddress = orderItem.CustomerInfo.ShippingAddress.Address1 + "," + orderItem.CustomerInfo.ShippingAddress.Address2;
            newCustomer.ShippingCity    = orderItem.CustomerInfo.ShippingAddress.City;
            newCustomer.ShippingCountry = orderItem.CustomerInfo.ShippingAddress.CountryCode;
            newCustomer.ShippingState   = orderItem.CustomerInfo.ShippingAddress.StateProvinceName;
            newCustomer.ShippingZip     = orderItem.CustomerInfo.ShippingAddress.ZipPostalCode;


            // Create a new customer and subscription
            //ICustomerAttributes charlie = new CustomerAttributes(orderItem.CustomerInfo.BillingAddress.FirstName, orderItem.CustomerInfo.BillingAddress.LastName, orderItem.Email, "", "CS_" + "DC_" + orderItem.OrderId.ToString());
            //charlie.ShippingAddress = orderItem.CustomerInfo.ShippingAddress.Address1 + "," + orderItem.CustomerInfo.ShippingAddress.Address2;
            //charlie.ShippingCity = orderItem.CustomerInfo.ShippingAddress.City;
            //charlie.ShippingCountry = orderItem.CustomerInfo.ShippingAddress.CountryCode;
            //charlie.ShippingState = orderItem.CustomerInfo.ShippingAddress.StateProvinceName;
            //charlie.ShippingZip = orderItem.CustomerInfo.ShippingAddress.ZipPostalCode;

            ICreditCardAttributes charliesPaymentInfo = new CreditCardAttributes();

            charliesPaymentInfo.FirstName       = orderItem.CustomerInfo.BillingAddress.FirstName;
            charliesPaymentInfo.LastName        = orderItem.CustomerInfo.BillingAddress.LastName;
            charliesPaymentInfo.ExpirationMonth = Convert.ToInt32(orderItem.CreditInfo.CreditCardExpired.ToString("MM"));
            charliesPaymentInfo.ExpirationYear  = Convert.ToInt32(orderItem.CreditInfo.CreditCardExpired.ToString("yyyy"));
            charliesPaymentInfo.FullNumber      = orderItem.CreditInfo.CreditCardNumber;
            charliesPaymentInfo.CVV             = orderItem.CreditInfo.CreditCardCSC;
            charliesPaymentInfo.BillingAddress  = orderItem.CustomerInfo.BillingAddress.Address1 + "," + orderItem.CustomerInfo.BillingAddress.Address2;
            charliesPaymentInfo.BillingCity     = orderItem.CustomerInfo.BillingAddress.City;
            charliesPaymentInfo.BillingCountry  = orderItem.CustomerInfo.BillingAddress.CountryCode;
            charliesPaymentInfo.BillingState    = orderItem.CustomerInfo.BillingAddress.StateProvinceName;
            charliesPaymentInfo.BillingZip      = orderItem.CustomerInfo.BillingAddress.ZipPostalCode;
            ISubscription newSubscription;
            Dictionary <string, AttributeValue> orderAttributes = new Dictionary <string, AttributeValue>();

            foreach (Sku Item in orderItem.SkuItems)
            {
                try
                {
                    newSubscription = chargify.CreateSubscription(Item.SkuCode.ToLower(), newCustomer.ChargifyID, charliesPaymentInfo);
                    if (newSubscription == null)
                    {
                        orderAttributes.Add("ChargifyCustomerId", new CSBusiness.Attributes.AttributeValue(newCustomer.ChargifyID.ToString()));
                        orderAttributes.Add("ChargifySubscriptionId", new CSBusiness.Attributes.AttributeValue(newSubscription.SubscriptionID.ToString()));
                        result = true;
                    }
                    else
                    {
                        result = false;
                    }
                }
                catch { }
            }

            if (result)
            {
                CSResolve.Resolve <IOrderService>().UpdateOrderAttributes(orderId, orderAttributes, 2);
            }
            else
            {
                CSResolve.Resolve <IOrderService>().UpdateOrderAttributes(orderId, orderAttributes, 7);
            }

            return(result);
        }
Beispiel #9
0
        public static bool RegisterCreditCard(ChargifyConnect chargify, Guid OrgId, Guid InstId, string OrgName, string InstName, string UserEmail, string UserFirstName, string UserLastName, string CardNumber, string CardExprMonth, string CardExprYear, int GraceDays, out string errorMessage)
        {
            errorMessage = string.Empty;
            string _CustSystemId = OrgId.ToString() + "," + InstId.ToString();

            ICustomer     _cust   = chargify.LoadCustomer(_CustSystemId);
            ISubscription _subscr = null;

            try
            {
                if (_cust == null)
                {
                    errorMessage       = "Can't create Chargify Customer!";
                    _cust              = new Customer();
                    _cust.SystemID     = _CustSystemId;
                    _cust.Organization = OrgName + " " + InstName;
                    _cust.Email        = UserEmail;
                    _cust.FirstName    = UserFirstName;
                    _cust.LastName     = UserLastName;
                    _cust              = chargify.CreateCustomer(_cust);
                }
                else if (_cust.Organization != OrgName + " " + InstName || _cust.Email != UserEmail || _cust.FirstName != UserFirstName || _cust.LastName != UserLastName)
                {
                    errorMessage       = "Can't update Chargify Customer!";
                    _cust.Organization = OrgName + " " + InstName;
                    _cust.Email        = UserEmail;
                    _cust.FirstName    = UserFirstName;
                    _cust.LastName     = UserLastName;
                    _cust        = chargify.UpdateCustomer(_cust);
                    errorMessage = "Can't get Chargify Customer Substriction!";
                    _subscr      = ChargifyProvider.GetCustomerSubscription(chargify, _cust.ChargifyID);
                }
                else
                {
                    errorMessage = "Can't get Chargify Customer Substriction!";
                    _subscr      = ChargifyProvider.GetCustomerSubscription(chargify, _cust.ChargifyID);
                }
            }
            catch (ChargifyException cex)
            {
                if ((int)cex.StatusCode != 422)
                {
                    errorMessage += " " + cex.Message;
                }
                return(false);
            }
            catch (Exception ex)
            {
                errorMessage += " " + ex.Message;
                return(false);
            }

            errorMessage = string.Empty;

            if (CardNumber.Contains("XXXX"))
            {
                if (_subscr != null && _subscr.CreditCard != null && _subscr.State != SubscriptionState.Active)
                {
                    try
                    {
                        chargify.ReactivateSubscription(_subscr.SubscriptionID);
                    }
                    catch (Exception ex)
                    {
                        errorMessage = "Can't reactivate Customer Subscription! " + ex.Message;
                        return(false);
                    }
                    return(true);
                }
                errorMessage = "Invalid Credit Card Information!";
                return(false);
            }

            CreditCardAttributes _ccattr = new CreditCardAttributes(_cust.FirstName, _cust.LastName, CardNumber, 2000 + int.Parse(CardExprYear), int.Parse(CardExprMonth), string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty);

            try
            {
                if (_subscr == null)
                {
                    errorMessage = "Can't create Chargify Subscription!";
                    _subscr      = chargify.CreateSubscription(ChargifyProvider.GetProductHandle(), _cust.ChargifyID, _ccattr);
                    chargify.UpdateBillingDateForSubscription(_subscr.SubscriptionID, DateTime.UtcNow.AddDays(GraceDays));
                }
                else
                {
                    errorMessage = "Can't update Chargify Subscription!";
                    chargify.UpdateSubscriptionCreditCard(_subscr, _ccattr);
                    if (_subscr.State != SubscriptionState.Active)
                    {
                        chargify.ReactivateSubscription(_subscr.SubscriptionID);
                    }
                }
            }
            catch (ChargifyException cex)
            {
                if ((int)cex.StatusCode == 422)
                {
                    errorMessage += " Invalid Credit Card Information!";
                }
                else
                {
                    errorMessage += " " + cex.Message;
                }
                return(false);
            }
            catch (Exception ex)
            {
                errorMessage += " " + ex.Message;
                return(false);
            }

            errorMessage = string.Empty;
            return(true);
        }
        public ActionResult Local(LocalSignup model, string id)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    // Attempt to register the user
                    Guid userId  = Guid.NewGuid();
                    var  newUser = WebSecurity.CreateUserAndAccount(model.User.UserName, model.User.Password, new { Email = model.UserContact.EmailAddress, UserId = userId });

                    if (newUser != null)
                    {
                        if (!Roles.RoleExists("user"))
                        {
                            Roles.CreateRole("user");
                        }
                        Roles.AddUsersToRoles(new string[] { model.User.UserName }, new string[] { "User" });

                        // Now that the user is created, attempt to create the corresponding subscription
                        var customerInfo = new CustomerAttributes()
                        {
                            FirstName = model.UserContact.FirstName,
                            LastName  = model.UserContact.LastName,
                            Email     = model.UserContact.EmailAddress,
                            SystemID  = userId.ToString()
                        };

                        var paymentAttributes = new CreditCardAttributes()
                        {
                            FullNumber      = model.UserPayment.CardNumber.Trim(),
                            CVV             = model.UserPayment.CVV,
                            ExpirationMonth = model.UserPayment.ExpirationMonth,
                            ExpirationYear  = model.UserPayment.ExpirationYear,
                            BillingAddress  = model.UserAddress.Address,
                            BillingCity     = model.UserAddress.City,
                            BillingZip      = model.UserAddress.Zip,
                            BillingState    = model.UserAddress.State,
                            BillingCountry  = model.UserAddress.Country
                        };


                        try
                        {
                            var newSubscription = Chargify.CreateSubscription(id, customerInfo, paymentAttributes);

                            WebSecurity.Login(model.User.UserName, model.User.Password, false);
                            return(RedirectToAction("Index", "Site"));
                        }
                        catch (ChargifyException ex)
                        {
                            if (ex.ErrorMessages.Count > 0)
                            {
                                ModelState.AddModelError("", ex.ErrorMessages.FirstOrDefault().Message);
                            }
                            else
                            {
                                ModelState.AddModelError("", ex.ToString());
                            }
                        }
                    }
                    else
                    {
                        //ModelState.AddModelError("", AccountValidation.ErrorCodeToString(createStatus));
                    }
                }

                return(RedirectToAction("Index"));
            }
            catch
            {
                return(View());
            }
        }