public static IBillingSystem CreateBillingSystem() { var chargifyConnect = new ChargifyConnect(); // configure chargify here return new ChargifyBillingSystem(chargifyConnect); }
// 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()); }
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())); }
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")); }
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)); }
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); } }
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); }
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()); }
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()); }
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); }
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 }); }
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 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); }
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); } } }
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); }
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 }); }
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); } }
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)); // } //} }
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 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); }
public static void Main(string[] args) { var chargify = new ChargifyConnect("https://subdomain.chargify.com/", "", "X"); chargify.Test(); }
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 }); }