示例#1
0
        public static IBillingSystem CreateBillingSystem()
        {
            var chargifyConnect = new ChargifyConnect();
            // configure chargify here

            return new ChargifyBillingSystem(chargifyConnect);
        }
示例#2
0
        // GET: Subscription

        public ActionResult ReactivationInstructions()
        {
            tenant tenant = (tenant)TempData["tenant"];

            ViewBag.Message = (string)TempData["Message"];
            bool hasPaymentInfo = false;

            if (tenant == null)
            {
                //TempData["Message"] = "Your user is not a customer";
                return(RedirectToAction("Login", "Home", new { area = "" }));
            }
            ChargifyConnect chargify     = ChargifyTools.Chargify;
            ISubscription   subscription = ChargifyTools.getSubscription(tenant.billingRefNumber);

            if (subscription == null)
            {
                TempData["Message"] = "Your user is not a customer";
                return(RedirectToAction("Login", "Home", new { area = "" }));
            }


            if (subscription.PaymentProfile != null)
            {
                hasPaymentInfo = true;
            }
            ViewBag.hasPaymentInfo = hasPaymentInfo;
            ViewBag.tenantId       = tenant.tenantId;
            ViewBag.paymentUrl     = chargify.GetPrettySubscriptionUpdateURL("", "", subscription.SubscriptionID);
            return(View());
        }
示例#3
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"];

            var family  = chargify.GetProductFamilyList().Values.FirstOrDefault();
            var newprod = chargify.CreateProduct(family.ID, "22 Bananas", "22-bananas", 5000, 1, IntervalUnit.Month, "toys2u-dfw-acct-22-5", "5 Pickups Per Month Test Product HS");

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

            //Console.WriteLine("\nProduct List:");
            //foreach (IProduct p in products.Values)
            //{
            //    Console.WriteLine(string.Format("{0}: {1}", p.ProductFamily.Name, p.Name));
            //}
            //Console.WriteLine("");

            //// Find a single product by its handle
            //IProduct product = chargify.LoadProduct(products.First().Value.Handle);
            //Console.WriteLine(string.Format("Found product '{0}'.", product.ToString()));
        }
示例#4
0
        public static bool DeleteCustomerSubscription(ChargifyConnect chargify, Guid OrganizationId, Guid InstanceId)
        {
            ISubscription subscr = GetCustomerSubscription(chargify, OrganizationId, InstanceId);

            if (subscr == null)
            {
                return(false);
            }
            return(chargify.DeleteSubscription(subscr.SubscriptionID, "Cancel Account Registration"));
        }
示例#5
0
        public static ISubscription GetCustomerSubscription(ChargifyConnect chargify, Guid OrganizationId, Guid InstanceId)
        {
            ICustomer _cust = chargify.LoadCustomer(OrganizationId.ToString() + "," + InstanceId.ToString());

            if (_cust == null)
            {
                return(null);
            }

            return(GetCustomerSubscription(chargify, _cust.ChargifyID));
        }
示例#6
0
        public ActionResult Reactivation(int tenantId)
        {
            if (tenantId <= 0)
            {
                return(RedirectToAction("Login", "Home", new { area = "" }));
            }
            tenant tenant = db.tenant.Find(tenantId);

            if (tenant == null)
            {
                return(RedirectToAction("Login", "Home", new { area = "" }));
            }
            ChargifyConnect chargify            = ChargifyTools.Chargify;
            ISubscription   currentSubscription = ChargifyTools.getSubscription(tenant.billingRefNumber);

            if (currentSubscription == null)
            {
                return(RedirectToAction("Login", "Home", new { area = "" }));
            }
            if (currentSubscription.PaymentProfile != null)
            {
                try
                {
                    ISubscription reactivatedSubscription = chargify.ReactivateSubscription(currentSubscription.SubscriptionID);
                    if (reactivatedSubscription.State == SubscriptionState.Active)
                    {
                        TempData["Message"] = "Your subscription has been successfully reactivated.\n please login again";
                        return(RedirectToAction("Login", "Home", new { area = "" }));
                    }
                    else
                    {
                        TempData["Message"] = "Your subscription couldn't be activated.\n Follow the instructions and try again";
                        TempData["tenant"]  = tenant;
                        //return RedirectToAction("Login", "Home", new { area = "" });
                        return(RedirectToAction("ReactivationInstructions"));
                    }
                }
                catch (Exception)
                {
                    TempData["Message"] = "Your subscription couldn't be activated.\n Follow the instructions and try again";
                    TempData["tenant"]  = tenant;
                    //return RedirectToAction("Login", "Home", new { area = "" });
                    return(RedirectToAction("ReactivationInstructions"));
                }
            }
            else
            {
                TempData["Message"] = "You haven't set your payment information.\n Follow the instructions and try again";
                TempData["tenant"]  = tenant;
                return(RedirectToAction("ReactivationInstructions", tenant));
            }

            return(View());
        }
 static void Main(string[] args)
 {
     try
     {
         // Don't forget to see the v1 API key and subdomain
         ChargifyConnect chargify = new ChargifyConnect("https://subdomain.chargify.com/", "", "X");
         var             products = chargify.GetProductList().Values;
         Console.WriteLine("Products:\n\n{0}", string.Join(System.Environment.NewLine, products.Select(x => x.Name)));
         Console.Write(System.Environment.NewLine);
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex);
     }
 }
示例#8
0
        public static ISubscription GetCustomerSubscription(ChargifyConnect chargify, int chargifyCustomerId)
        {
            IDictionary <int, ISubscription> _subscrList = chargify.GetSubscriptionListForCustomer(chargifyCustomerId);

            if (_subscrList.Count <= 0)
            {
                return(null);
            }

            foreach (KeyValuePair <int, ISubscription> kvp in _subscrList)
            {
                return(kvp.Value);
            }

            return(null);
        }
        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"];
            chargify.UseJSON = true;

            // This could perhaps be read from the gateway?
            ICustomerAttributes charlie = new CustomerAttributes("Charlie", "Guy", "*****@*****.**", "YourCompany", Guid.NewGuid().ToString());

            // This as well, I'm assuming ...
            IPaymentProfileAttributes existingProfile = new PaymentProfileAttributes("12345", "67890", VaultType.AuthorizeNET, 2020, 12, CardType.Visa, "1111");

            // Now create the subscription importing from the vault
            ISubscription charlieSubscription = chargify.CreateSubscription("basic", charlie, DateTime.Now, existingProfile);
        }
示例#10
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"];
            chargify.UseJSON  = true;

            // This could perhaps be read from the gateway?
            ICustomerAttributes charlie = new CustomerAttributes("Charlie", "Guy", "*****@*****.**", "YourCompany", Guid.NewGuid().ToString());

            // This as well, I'm assuming ...
            IPaymentProfileAttributes existingProfile = new PaymentProfileAttributes("12345", "67890", VaultType.AuthorizeNET, 2020, 12, CardType.Visa, "1111");

            // Now create the subscription importing from the vault
            ISubscription charlieSubscription = chargify.CreateSubscription("basic", charlie, DateTime.Now, existingProfile);
        }
示例#11
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"];
            chargify.UseJSON  = true;

            // Retrieve a dictionary of all your customers
            IDictionary <string, ICustomer> customerList = chargify.GetCustomerList();

            if (customerList.Count > 0)
            {
                ICustomer customer = customerList.First().Value as ICustomer;

                Console.WriteLine(string.Format("First Name: {0}", customer.FirstName));
                Console.WriteLine(string.Format("Last Name: {0}", customer.LastName));

                customer.FirstName = "Miguel";

                customer = chargify.UpdateCustomer(customer);

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

                Console.WriteLine(string.Format("First Name: {0}", customer.FirstName));
            }

            // You can create a new customer in two steps
            //ICustomer newCustomer = new Customer("Charlie", "Bull", "*****@*****.**", "Chargify", Guid.NewGuid());
            //chargify.CreateCustomer(newCustomer);

            // Or just one ..
            ICustomer newCustomer = chargify.CreateCustomer("Charlie", "Bull", "*****@*****.**", string.Empty, "Chargify", Guid.NewGuid().ToString());
        }
示例#12
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"];
            chargify.UseJSON = true;

            // Retrieve a dictionary of all your customers
            IDictionary<string, ICustomer> customerList = chargify.GetCustomerList();

            if (customerList.Count > 0) 
            {
                ICustomer customer = customerList.First().Value as ICustomer;

                Console.WriteLine(string.Format("First Name: {0}", customer.FirstName));
                Console.WriteLine(string.Format("Last Name: {0}", customer.LastName));

                customer.FirstName = "Miguel";

                customer = chargify.UpdateCustomer(customer);

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

                Console.WriteLine(string.Format("First Name: {0}", customer.FirstName));
            }

            // You can create a new customer in two steps
            //ICustomer newCustomer = new Customer("Charlie", "Bull", "*****@*****.**", "Chargify", Guid.NewGuid());
            //chargify.CreateCustomer(newCustomer);

            // Or just one .. 
            ICustomer newCustomer = chargify.CreateCustomer("Charlie", "Bull", "*****@*****.**", string.Empty, "Chargify", Guid.NewGuid().ToString());
        }
示例#13
0
        public static ChargifyConnect CreateChargify()
        {
            ChargifyAccountRetrieverSection config = ConfigurationManager.GetSection("chargify") as ChargifyAccountRetrieverSection;

            if (config == null)
            {
                return(null);
            }

            // new instance
            ChargifyConnect _chargify = new ChargifyConnect();

            ChargifyAccountElement accountInfo = config.GetDefaultOrFirst();

            _chargify.apiKey    = accountInfo.ApiKey;
            _chargify.Password  = accountInfo.ApiPassword;
            _chargify.URL       = accountInfo.Site;
            _chargify.SharedKey = accountInfo.SharedKey;
            _chargify.UseJSON   = config.UseJSON;

            return(_chargify);
        }
示例#14
0
        public CreateInvoiceResponse Invoke(CreateInvoiceRequest request)
        {
            Trace("Starting...");

            var connection  = new ChargifyConnect(_configuration.ChargifyUrl, _configuration.ChargifyApiKey, _configuration.ChargifyPassword);
            var transaction = connection.LoadTransaction(request.SubscriptionId);

            if (transaction == null)
            {
                return(new CreateInvoiceResponse
                {
                    Status = CreateInvoiceStatus.StatementNotFound
                });
            }

            //transaction.

            return(new CreateInvoiceResponse
            {
                Status = CreateInvoiceStatus.Ok
            });
        }
示例#15
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"];

            var family = chargify.GetProductFamilyList().Values.FirstOrDefault();
            var newprod = chargify.CreateProduct(family.ID, "22 Bananas", "22-bananas", 5000, 1, IntervalUnit.Month, "toys2u-dfw-acct-22-5", "5 Pickups Per Month Test Product HS");

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

            //Console.WriteLine("\nProduct List:");
            //foreach (IProduct p in products.Values)
            //{
            //    Console.WriteLine(string.Format("{0}: {1}", p.ProductFamily.Name, p.Name));
            //}
            //Console.WriteLine("");

            //// Find a single product by its handle
            //IProduct product = chargify.LoadProduct(products.First().Value.Handle);
            //Console.WriteLine(string.Format("Found product '{0}'.", product.ToString()));
        }
示例#16
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));
            //    }
            //}
        }
示例#17
0
        public static int UpdateChargifyAllocations()
        {
            if (!Micajah.Common.Configuration.FrameworkConfiguration.Current.WebApplication.Integration.Chargify.Enabled)
            {
                throw new InvalidOperationException("Chargify integration is not enabled in the application configuration file.");
            }

            ChargifyConnect _chargify = ChargifyProvider.CreateChargify();

            if (_chargify == null)
            {
                throw new InvalidOperationException("No Chargify configuration settings found.");
            }

            DateTime?lastUpdatedAt = CounterSettingProvider.GetDateTimeMark(1);

            int updatedCount             = 0;
            OrganizationCollection _orgs = OrganizationProvider.GetOrganizations(false, false);

            foreach (Organization _org in _orgs)
            {
                InstanceCollection _insts = InstanceProvider.GetInstances(_org.OrganizationId, false);

                foreach (Instance _inst in _insts)
                {
                    if (_inst.BillingPlan == BillingPlan.Custom)
                    {
                        continue;
                    }

                    SettingCollection modifiedSettings = CounterSettingProvider.GetLastModifiedPaidSettings(_org.OrganizationId, _inst.InstanceId, lastUpdatedAt);
                    if (modifiedSettings.Count == 0)
                    {
                        continue;
                    }

                    SettingCollection paidSettings = lastUpdatedAt.HasValue ? CounterSettingProvider.GetCalculatedPaidSettings(_org.OrganizationId, _inst.InstanceId) : modifiedSettings;

                    ISubscription _custSubscr = ChargifyProvider.GetCustomerSubscription(_chargify, _org.OrganizationId, _inst.InstanceId);
                    ChargifyProvider.UpdateSubscriptionAllocations(_chargify, _custSubscr != null ? _custSubscr.SubscriptionID : 0, _inst, modifiedSettings, paidSettings);

                    if (_custSubscr != null)
                    {
                        updatedCount++;
                    }
                    if (_custSubscr == null && _inst.CreditCardStatus != CreditCardStatus.NotRegistered)
                    {
                        InstanceProvider.UpdateInstance(_inst, CreditCardStatus.NotRegistered);
                    }
                    else if (_custSubscr != null && _custSubscr.State == SubscriptionState.Expired && _inst.CreditCardStatus != CreditCardStatus.Expired)
                    {
                        InstanceProvider.UpdateInstance(_inst, CreditCardStatus.Expired);
                    }
                    else if (_custSubscr != null && _custSubscr.State == SubscriptionState.Active && _inst.CreditCardStatus != CreditCardStatus.Registered)
                    {
                        InstanceProvider.UpdateInstance(_inst, CreditCardStatus.Registered);
                    }
                    else if (_custSubscr != null && _custSubscr.State != SubscriptionState.Active && _custSubscr.State != SubscriptionState.Expired && _inst.CreditCardStatus != CreditCardStatus.Declined)
                    {
                        InstanceProvider.UpdateInstance(_inst, CreditCardStatus.Declined);
                    }
                }
            }

            CounterSettingProvider.SetDateTimeMark(1);

            return(updatedCount);
        }
示例#18
0
        public void AddusersBilling(int count)
        {
            Sqrely_Identity identity = clsCommon.getIdentity();

            if (count > 0)
            {
                try
                {
                    ChargifyConnect Chargify = clsCommon.Chargify;
                    // Load the customer information for the current user
                    //ICustomer customer = Chargify.Find<Customer>(clsCommon.getCurrentUserBillingRefNumber());
                    // Alternate syntax
                    // Dim customer As ICustomer = Chargify.LoadCustomer(clsCommon.getCurrentUserBillingRefNumber())
                    tenant        currentenant        = db.tenant.Find(identity.tenatId);
                    ISubscription currentSubscription = ChargifyTools.getSubscription(currentenant.billingRefNumber);
                    if (currentSubscription != null)
                    {
                        int componentID = clsCommon.getComponentId(currentSubscription.Product.Handle);
                        if (componentID > 0)
                        {
                            //Update the amount allocated
                            //Dim info As IComponentAttributes = Chargify.UpdateComponentAllocationForSubscription(currentSubscription.SubscriptionID, componentID, (CInt(noUsersTb.Text) - 1))
                            //Dim info As IComponentAttributes = Chargify.UpdateComponentAllocationForSubscription(currentSubscription.SubscriptionID, componentID, newQuantity)
                            //Chargify.CreateComponentAllocation(currentSubscription.SubscriptionID, componentID, count, "New Users", ComponentUpgradeProrationScheme.No_Prorate, ComponentDowngradeProrationScheme.No_Prorate);
                            if (currentSubscription.State == SubscriptionState.Trialing)
                            {
                                Chargify.CreateComponentAllocation(currentSubscription.SubscriptionID, componentID, count, "New Users", ComponentUpgradeProrationScheme.No_Prorate, ComponentDowngradeProrationScheme.No_Prorate);
                            }
                            else
                            {
                                Chargify.CreateComponentAllocation(currentSubscription.SubscriptionID, componentID, count, "New Users", ComponentUpgradeProrationScheme.Prorate_Attempt_Capture, ComponentDowngradeProrationScheme.Prorate);
                            }
                        }
                        //Dim sqltext As String = "UPDATE tenant SET modifyDateTime=getdate(), " &
                        //" allocatedUsers = @allocatedUsers " &
                        //" WHERE billingRefNumber = @billingRefNumber"
                        //ApplicationBlocks.SqlHelper.ExecuteNonQuery(clsCommon.connString,
                        //                                        System.Data.CommandType.Text, sqltext,
                        //                                    New System.Data.SqlClient.SqlParameter("@allocatedUsers", noUsersTb.Text),
                        //                                    New System.Data.SqlClient.SqlParameter("@billingRefNumber", currentSubscription.Customer.SystemID))
                        //tenant tenant = default(tenant);
                        //tenant = (from t in db.tenantwhere t.billingRefNumber.Equals(currentSubscription.Customer.SystemID)).FirstOrDefault();

                        currentenant.allocatedUsers = count + 1;
                        //Dim identity As SQRely_Admin.SqrelySecurity.Sqrely_Identity
                        //identity = HttpContext.Current.User.Identity
                        currentenant.updatedById     = identity.Id;
                        currentenant.modifyDateTime  = DateTime.Now;
                        db.Entry(currentenant).State = EntityState.Modified;
                        db.SaveChanges();
                        //LoadSubscriptionInfo();
                        //usageResultLtr.Text = string.Format("Current Allocated users ({0}).", noUsersTb.Text);
                        //If newAddedUsers > 0 Then
                        //    ' Charge Existing Users on new account
                        //    Dim amount As Decimal = newAddedUsers * currentSubscription.ProductPrice
                        //    Chargify.CreateCharge(currentSubscription.SubscriptionID, amount, String.Format("New Users Added: {0}", newAddedUsers.ToString()), True)
                        //End If

                        //' Get the amount allocated
                        //Dim newInfo As IComponentAttributes = Chargify.GetComponentInfoForSubscription(currentSubscription.SubscriptionID, componentID)

                        //If newInfo IsNot Nothing Then
                        //    ' Charged OK
                        //    Me.usageResultLtr.Text = String.Format("Current additional users ({0}).", noUsersTb.Text)
                        //    ScriptManager.RegisterStartupScript(Me.Page, GetType(Page), "highlight", "HighlightResult();", True)
                        //Else
                        //    ' Not OK
                        //    Me.usageResultLtr.Text = String.Format("Error. ({0})", DateTime.Now.ToString())
                        //    ScriptManager.RegisterStartupScript(Me.Page, GetType(Page), "highlight", "HighlightResult();", True)
                        //End If
                    }
                }
                catch (Exception ex)
                {
                    //ScriptManager.RegisterStartupScript(this.Page, typeof(Page), "error", "alert('" + ex.Message + "');", true);
                }
            }
        }
示例#19
0
        public JsonResult GetInfoClient()
        {
            var             result              = Json("", JsonRequestBehavior.AllowGet);
            int             currentuser         = clsCommon.getIdentity().Id;
            int             tenantid            = clsCommon.getIdentity().tenatId;
            tenant          ctenant             = (from t in db.tenant where t.tenantId == tenantid select t).FirstOrDefault();
            ChargifyConnect chargify            = clsCommon.Chargify;
            int             usercount           = 1;
            bool            validpaid           = false;
            ISubscription   currentSubscription = ChargifyTools.getSubscription(ctenant.billingRefNumber);

            if (currentSubscription != null)
            {
                int componentId = clsCommon.getComponentId(currentSubscription.Product.Handle);
                if (currentSubscription.State == SubscriptionState.Active)
                {
                    if (componentId > 0)
                    {
                        IComponentAttributes newInfo = chargify.GetComponentInfoForSubscription(currentSubscription.SubscriptionID, componentId);
                        usercount = Convert.ToInt32(newInfo.AllocatedQuantity + 1);
                    }
                }
                validpaid = true;
            }
            List <userLogin> users = (from u in db.userLogin where u.tenantId == tenantid && u.active == true select u).ToList();
            var tenantinfo         = (from obj in db.vw_Tenant
                                      where obj.tenantId == tenantid
                                      select new
            {
                paid = validpaid,
                Companyname = obj.companyName,
                AllocatedUsers = obj.allocatedUsers,
                address = obj.Address,
                owneremail = obj.email,
                codigoarea = obj.countryCode,
                phone = obj.number,
                ownerurl = obj.companyURL,
                //userscount = (from u in db.userLogin
                //              join ct in db.contact
                //              on u.contactId
                //              equals ct.contactId
                //              where u.tenantId == tenantid && u.active == true
                //              select new
                //              {
                //                  name = ct.name,
                //                  alias = u.userName,
                //                  email = ct.email
                //              }).ToList(),
                tenantconfigs = (from obj2 in db.genConfigName
                                 where obj2.genConfigNameGroupId == 1 && obj2.active == true
                                 orderby obj2.code ascending
                                 select new
                {
                    configNameid = obj2.genConfigNameId,
                    parameter = "",
                    active = obj2.active,
                    code = obj2.code
                }).ToList(),
                settconfigs = (from obj3 in db.genConfigName
                               where obj3.genConfigNameGroupId == 2 && obj3.active == true
                               orderby obj3.code ascending
                               select new
                {
                    configNameid = obj3.genConfigNameId,
                    parameter = "",
                    active = obj3.active,
                    code = obj3.code
                }).ToList(),
                languanges = (from obj4 in db.genLanguage select new { obj4.name }).ToList(),
                currencies = (from obj5 in db.genCurrency select new { obj5.name, code = obj5.code }).ToList(),
                regions = (from obj6 in db.genRegion select new { obj6.name }).ToList(),
                Timezones = (from obj7 in db.genTimezone select new { obj7.timeZone }).ToList(),
                defaultconfigs = (from dcn in db.genConfigName
                                  join dc in db.genConfig
                                  on dcn.genConfigNameId equals dc.genConfigNameId
                                  where dc.tenantId == tenantid && dcn.genConfigNameGroupId == 1 && dcn.active == true
                                  orderby dcn.code ascending
                                  select new
                {
                    dcn.code,
                    dc.parameter
                }).ToList(),
                settdefaultconfigs = (from dcn in db.genConfigName
                                      join dc in db.genConfig
                                      on dcn.genConfigNameId equals dc.genConfigNameId
                                      where dc.tenantId == tenantid && dcn.genConfigNameGroupId == 2 && dcn.active == true
                                      orderby dcn.code ascending
                                      select new
                {
                    dcn.code,
                    dc.parameter
                }).ToList(),
                userroles = (from urol in db.userLoginRole where (urol.userLoginRoleId != 1 && urol.userLoginRoleId != 2)select new { name = urol.name, id = urol.userLoginRoleId }).ToList()
            }).FirstOrDefault();

            if (tenantinfo != null)
            {
                result = Json(tenantinfo, JsonRequestBehavior.AllowGet);
            }

            return(result);
        }
示例#20
0
        public CancelSubscriptionResponse Invoke(CancelSubscriptionRequest request)
        {
            Trace("Starting...");

            var organisation = Session.MasterRaven.Load <Organisation>(request.CurrentUser.ActiveOrganisation.Id);

            if (organisation == null)
            {
                return(new CancelSubscriptionResponse(ignoreCache: true)
                {
                    Status = CancelSubscriptionStatus.OrganisationNotFound
                });
            }

            if (!organisation.Subscription.ChargifyId.HasValue)
            {
                return(new CancelSubscriptionResponse(ignoreCache: true)
                {
                    Status = CancelSubscriptionStatus.SubscriptionNotFound
                });
            }

            var connection   = new ChargifyConnect(_configuration.ChargifyUrl, _configuration.ChargifyApiKey, _configuration.ChargifyPassword);
            var subscription = connection.LoadSubscription(organisation.Subscription.ChargifyId.Value);

            if (subscription == null)
            {
                return(new CancelSubscriptionResponse(ignoreCache: true)
                {
                    Status = CancelSubscriptionStatus.SubscriptionNotFound
                });
            }

            var cancelled = connection.DeleteSubscription(organisation.Subscription.ChargifyId.Value, request.CancellationReason);

            if (!cancelled)
            {
                return(new CancelSubscriptionResponse(ignoreCache: true)
                {
                    Status = CancelSubscriptionStatus.CancellationFailed
                });
            }

            organisation.Subscription.ChargifyId         = subscription.SubscriptionID;
            organisation.Subscription.Status             = SubscriptionStatus.Cancelled;
            organisation.Subscription.CancellationDate   = DateTime.UtcNow.ToDateTimeOffset(organisation.TimezoneId);
            organisation.Subscription.CancellationReason = request.CancellationReason;
            organisation.Subscription.LastModified       = organisation.Subscription.CancellationDate.Value;

            Session.SynchroniseIndexes <Indexing.Organisations, Indexing.Users>();
            Session.AddCommitAction(new SendMessageCommitAction(
                                        new SubscriptionCancelledEmailInfo
            {
                OrganisationName  = organisation.Name,
                UserName          = request.CurrentUser.FirstName,
                AccountDisabledOn = organisation.Subscription.CurrentPeriodEndDate.ToLocalFormatted()
            },
                                        _configuration.GetNotificationsQueueAddress(organisation.RavenInstanceId)));

            return(new CancelSubscriptionResponse(organisation.Id, request.CurrentUser.Email)
            {
                Status = CancelSubscriptionStatus.Ok,
                AccountExpirationDate = organisation.Subscription.CurrentPeriodEndDate
            });
        }
示例#21
0
        public static void UpdateSubscriptionAllocations(ChargifyConnect chargify, int SubscriptionId, Instance inst, SettingCollection modifiedSettings, SettingCollection paidSettings)
        {
            decimal monthlySum = 0;

            foreach (Setting setting in paidSettings)
            {
                if (setting.ShortName == "PhoneSupport")
                {
                    continue;
                }
                if (setting.ShortName == "Training1Hour")
                {
                    continue;
                }
                if (setting.ShortName == "Training3Hours")
                {
                    continue;
                }
                if (setting.ShortName == "Training8Hours")
                {
                    continue;
                }

                if (setting.Paid)
                {
                    bool enabled = false;
                    if (!Boolean.TryParse(setting.Value, out enabled))
                    {
                        if (!Boolean.TryParse(setting.DefaultValue, out enabled))
                        {
                            enabled = false;
                        }
                    }
                    if (enabled)
                    {
                        monthlySum += setting.Price;
                    }
                }

                int usageCount = 0;
                int.TryParse(setting.Value, out usageCount);
                int     paidQty    = usageCount - setting.UsageCountLimit;
                decimal priceMonth = paidQty > 0 ? paidQty * setting.Price : 0;
                monthlySum += priceMonth;
            }

            if (monthlySum > 0 && inst.BillingPlan != BillingPlan.Paid)
            {
                InstanceProvider.UpdateInstance(inst, BillingPlan.Paid);
            }
            else if (monthlySum == 0 && inst.BillingPlan != BillingPlan.Free)
            {
                InstanceProvider.UpdateInstance(inst, BillingPlan.Free);
            }

            if (SubscriptionId == 0)
            {
                return;
            }

            foreach (Setting setting in modifiedSettings)
            {
                int extId = 0;
                if (setting.Paid)
                {
                    bool enabled = false;
                    if (!Boolean.TryParse(setting.Value, out enabled))
                    {
                        if (!Boolean.TryParse(setting.DefaultValue, out enabled))
                        {
                            enabled = false;
                        }
                    }
                    if (string.IsNullOrEmpty(setting.ExternalId) || !int.TryParse(setting.ExternalId, out extId))
                    {
                        continue;
                    }
                    if (extId == 0)
                    {
                        continue;
                    }
                    chargify.UpdateComponentAllocationForSubscription(SubscriptionId, extId, enabled ? 1 : 0);
                    continue;
                }

                int usageCount = 0;
                int.TryParse(setting.Value, out usageCount);

                if (string.IsNullOrEmpty(setting.ExternalId) || !int.TryParse(setting.ExternalId, out extId))
                {
                    continue;
                }
                if (extId == 0)
                {
                    continue;
                }
                chargify.UpdateComponentAllocationForSubscription(SubscriptionId, extId, usageCount < 0 ? 0 : usageCount);
            }
        }
示例#22
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));
        }
        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));
            //    }
            //}
        }
示例#24
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);
        }
示例#25
0
        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);
        }
示例#26
0
        public static void Main(string[] args)
        {
            var chargify = new ChargifyConnect("https://subdomain.chargify.com/", "", "X");

            chargify.Test();
        }
示例#27
0
        public ChangeSubscriptionResponse Invoke(ChangeSubscriptionRequest request)
        {
            Trace("Starting...");

            var organisation = Session.MasterRaven.Load <Organisation>(request.CurrentUser.ActiveOrganisation.Id);

            if (organisation == null)
            {
                return(new ChangeSubscriptionResponse(ignoreCache: true)
                {
                    Status = ChangeSubscriptionStatus.OrganisationNotFound
                });
            }

            if (!organisation.Subscription.ChargifyId.HasValue)
            {
                return(new ChangeSubscriptionResponse(ignoreCache: true)
                {
                    Status = ChangeSubscriptionStatus.SubscriptionNotFound
                });
            }

            var plans = _getAvailablePaymentPlansQuery.Invoke(new GetAvailablePaymentPlansRequest()).Plans;
            var stats = _getOrganisationStatisticsQuery.Invoke(new GetOrganisationStatisticsRequest()).Statistics;

            //if we are downgrading check the organisations stats to make sure they can
            if (request.Downgrading)
            {
                var plan = plans.FirstOrDefault(p => p.Id == PaymentPlan.GetId(request.NewPlanId));

                if (plan != null)
                {
                    var quotas = PlanQuotas.FromStats(stats, plan);

                    if (quotas.IssuesExceededBy > 0)
                    {
                        return(new ChangeSubscriptionResponse(ignoreCache: true)
                        {
                            Status = ChangeSubscriptionStatus.QuotasExceeded,
                            Quotas = quotas
                        });
                    }
                }
            }

            var chargifyConnect = new ChargifyConnect(_configuration.ChargifyUrl, _configuration.ChargifyApiKey, _configuration.ChargifyPassword);
            var subscription    = chargifyConnect.LoadSubscription(organisation.Subscription.ChargifyId.Value);

            if (subscription == null)
            {
                return(new ChangeSubscriptionResponse(ignoreCache: true)
                {
                    Status = ChangeSubscriptionStatus.SubscriptionNotFound
                });
            }

            var newPlan = plans.First(p => p.Id == PaymentPlan.GetId(request.NewPlanId));

            if (newPlan.IsFreeTier)
            {
                chargifyConnect.DeleteSubscription(organisation.Subscription.ChargifyId.Value, "Downgrade");
                organisation.Subscription.ChargifyId = null;
                organisation.Subscription.Status     = SubscriptionStatus.Trial;
            }
            else
            {
                subscription = chargifyConnect.EditSubscriptionProduct(organisation.Subscription.ChargifyId.Value, request.NewPlanName.ToLowerInvariant());
                organisation.Subscription.ChargifyId = subscription.SubscriptionID;
                organisation.Subscription.Status     = SubscriptionStatus.Active;
            }

            organisation.PaymentPlanId             = PaymentPlan.GetId(request.NewPlanId);
            organisation.PaymentPlan               = newPlan;
            organisation.Subscription.LastModified = DateTime.UtcNow.ToDateTimeOffset(organisation.TimezoneId);

            //if status is quotas exceeded, check again and update if necessary
            if (organisation.Status == OrganisationStatus.PlanQuotaExceeded)
            {
                var quotas = PlanQuotas.FromStats(stats, newPlan);

                if (quotas.IssuesExceededBy <= 0)
                {
                    organisation.Status = OrganisationStatus.Active;
                }
            }

            Session.SynchroniseIndexes <Indexing.Organisations, Indexing.Users>();
            Session.AddCommitAction(new SendMessageCommitAction(
                                        new SubsciptionChangedEmailInfo
            {
                OrganisationName     = organisation.Name,
                SubscriptionId       = subscription.SubscriptionID.ToString(),
                UserName             = request.CurrentUser.FirstName,
                BillingAmount        = string.Format(CultureInfo.GetCultureInfo(1033), "{0:C}", newPlan.Price),
                BillingPeriodEndDate = organisation.Subscription.CurrentPeriodEndDate.ToLocalFormatted(),
                OldPlanName          = request.OldPlanName,
                NewPlanName          = newPlan.Name
            },
                                        _configuration.GetNotificationsQueueAddress(organisation.RavenInstanceId)));

            return(new ChangeSubscriptionResponse(organisation.Id, request.CurrentUser.Email)
            {
                Status = ChangeSubscriptionStatus.Ok
            });
        }
        public CompleteSignUpResponse Invoke(CompleteSignUpRequest request)
        {
            Trace("Starting...");

            //verify
            var connection   = new ChargifyConnect(_configuration.ChargifyUrl, _configuration.ChargifyApiKey, _configuration.ChargifyPassword);
            var subscription = connection.LoadSubscription(request.SubscriptionId);

            if (subscription == null)
            {
                return(new CompleteSignUpResponse(ignoreCache: true)
                {
                    Status = CompleteSignUpStatus.SubscriptionNotFound
                });
            }

            var token = _encryptor.Decrypt(HttpUtility.UrlDecode(request.Reference).Base64Decode()).Split('|');

            if (token[0] != request.CurrentUser.ActiveOrganisation.FriendlyId)
            {
                return(new CompleteSignUpResponse(ignoreCache: true)
                {
                    Status = CompleteSignUpStatus.InvalidOrganisation
                });
            }

            var organisation = Session.MasterRaven
                               .Include <Organisation>(o => o.PaymentPlanId)
                               .Load <Organisation>(request.CurrentUser.ActiveOrganisation.Id);

            if (organisation == null)
            {
                return(new CompleteSignUpResponse(ignoreCache: true)
                {
                    Status = CompleteSignUpStatus.OrganisationNotFound
                });
            }

            organisation.PaymentPlan   = MasterLoad <PaymentPlan>(organisation.PaymentPlanId);
            organisation.PaymentPlanId = "PaymentPlans/{0}".FormatWith(token[1]);

            organisation.Subscription.ChargifyId           = subscription.SubscriptionID;
            organisation.Subscription.Status               = SubscriptionStatus.Active;
            organisation.Subscription.StartDate            = DateTime.UtcNow.ToDateTimeOffset(organisation.TimezoneId);
            organisation.Subscription.CurrentPeriodEndDate = subscription.CurrentPeriodEndsAt.ToUniversalTime().ToDateTimeOffset(organisation.TimezoneId);
            organisation.Subscription.CancellationDate     = organisation.Subscription.StartDate;

            Session.SynchroniseIndexes <Indexing.Organisations, Indexing.Users>();
            Session.AddCommitAction(new SendMessageCommitAction(
                                        new SignUpCompleteEmailInfo
            {
                OrganisationName = organisation.Name,
                SubscriptionId   = request.SubscriptionId.ToString(),
                UserName         = request.CurrentUser.FirstName,
                BillingAmount    = string.Format(CultureInfo.GetCultureInfo(1033), "{0:C}", organisation.PaymentPlan.Price),
                PlanName         = organisation.PaymentPlan.Name
            },
                                        _configuration.GetNotificationsQueueAddress(organisation.RavenInstanceId)));

            return(new CompleteSignUpResponse(organisation.Id, request.CurrentUser.Email)
            {
                Status = CompleteSignUpStatus.Ok
            });
        }