/// <summary> /// no need to do anything here just yet. /// I think when leagues start changing their subscriptions, we will need to update this code to change the plan /// /// </summary> /// <param name="se"></param> /// <returns></returns> public static bool SubscriptionUpdated(StripeEvent se, string json) { try { //{ "id": "evt_1Myn3gX10D21o6", "created": 1361989292, "livemode": true, "type": "customer.subscription.updated", "data": { "object": { "plan": { "interval": "month", "name": "Monthly_Plan", "amount": 1599, "currency": "usd", "id": "Monthly_Plan", "object": "plan", "livemode": true, "interval_count": 1, "trial_period_days": null }, "object": "subscription", "start": 1359310832, "status": "active", "customer": "cus_1BMmWWvjng8Mug", "cancel_at_period_end": false, "current_period_start": 1361989232, "current_period_end": 1364408432, "ended_at": null, "trial_start": null, "trial_end": null, "canceled_at": null, "quantity": 1 }, "previous_attributes": { "current_period_start": 1359310832, "current_period_end": 1361989232 } }, "object": "event", "pending_webhooks": 1 } PaymentGateway pg = new PaymentGateway(); var f = pg.StartInvoiceWizard().Initalize(ServerConfig.RDNATION_STORE_ID, "USD", PaymentProvider.Stripe, PaymentMode.Live, ChargeTypeEnum.SubscriptionUpdated) .SetInvoiceId(Guid.NewGuid()) .SetInvoiceStatus(InvoiceStatus.Subscription_Should_Be_Updated_On_Charge); var dc = new ManagementContext(); RDN.Library.DataModels.PaymentGateway.Stripe.StripeEventDb even = new RDN.Library.DataModels.PaymentGateway.Stripe.StripeEventDb(); even.CreatedStripeDate = se.Created.GetValueOrDefault(); even.StripeId = se.Id; even.LiveMode = se.LiveMode.GetValueOrDefault(); if (se.Data != null) { StripeSubscription cust = Stripe.Mapper<StripeSubscription>.MapFromJson(se.Data.Object.ToString()); //StripeSubscription cust = (StripeSubscription)se.Data.Object; StripeSubscriptionDb custDb = new StripeSubscriptionDb(); even.StripeEventTypeEnum = (byte)StripeEventTypeEnum.customer_subscription_created; custDb.CanceledAt = cust.CanceledAt; custDb.EndedAt = cust.EndedAt; custDb.Customer = dc.StripeCustomers.Where(x => x.Id == cust.CustomerId).FirstOrDefault(); custDb.PeriodEnd = cust.PeriodEnd; custDb.PeriodStart = cust.PeriodStart; custDb.Quantity = cust.Quantity; custDb.Start = cust.Start; custDb.Status = cust.Status; if (cust.StripePlan != null) { custDb.StripePlan = dc.StripePlans.Where(x => x.Id == cust.StripePlan.Id).FirstOrDefault(); if (custDb.StripePlan == null) { StripePlanDb pl = new StripePlanDb(); pl.AmountInCents = cust.StripePlan.AmountInCents; pl.Currency = cust.StripePlan.Currency; pl.Id = cust.StripePlan.Id; pl.Interval = cust.StripePlan.Interval; pl.IntervalCount = cust.StripePlan.IntervalCount; pl.LiveMode = cust.StripePlan.LiveMode; pl.Name = cust.StripePlan.Name; pl.TrialPeriodDays = cust.StripePlan.TrialPeriodDays; custDb.StripePlan = pl; dc.StripePlans.Add(pl); } } DateTime now = DateTime.UtcNow; TimeSpan ts = new TimeSpan(); int lengthOfDays = 31; SubscriptionPeriodStripe period = SubscriptionPeriodStripe.Monthly; if (cust.StripePlan.Id == StripePlanNames.Monthly_Plan.ToString()) { period = SubscriptionPeriodStripe.Monthly; ts = now.AddMonths(1) - DateTime.UtcNow; lengthOfDays = ts.Days; } else if (cust.StripePlan.Id == StripePlanNames.Six_Month_League_Subscription.ToString()) { period = SubscriptionPeriodStripe.Six_Months; ts = now.AddMonths(6) - DateTime.UtcNow; lengthOfDays = ts.Days; } else if (cust.StripePlan.Id == StripePlanNames.Three_Month_League_Subscription.ToString()) { period = SubscriptionPeriodStripe.Three_Months; ts = now.AddMonths(3) - DateTime.UtcNow; lengthOfDays = ts.Days; } else if (cust.StripePlan.Id == StripePlanNames.Yearly_League_Subscription.ToString()) { period = SubscriptionPeriodStripe.Yearly; ts = now.AddMonths(12) - DateTime.UtcNow; lengthOfDays = ts.Days; } //getting league Id here and subscriptionDate var invoiceFromPast = pg.GetDisplayInvoiceWithStripeCustomerId(cust.CustomerId); Guid leagueId = new Guid(); if (invoiceFromPast.Subscription != null) { leagueId = invoiceFromPast.Subscription.InternalObject; } f.SetPaymentProviderId(cust.CustomerId); f.SetSubscription(new InvoiceSubscription { Description = "RDN League portal subscription", DescriptionRecurring = "Fee for RDN League portal subscription", Name = "RDN Member portal", NameRecurring = "RDN Member portal recurring", DigitalPurchaseText = "You have now access to RDN League portal", Price = Convert.ToDecimal(cust.StripePlan.AmountInCents) / Convert.ToDecimal(100), SubscriptionPeriodStripe = period, SubscriptionPeriodLengthInDays = lengthOfDays, //league id is the ownerId InternalObject = leagueId }); custDb.TrialEnd = cust.TrialEnd; custDb.TrialStart = cust.TrialStart; dc.StripeSubscriptions.Add(custDb); even.Subscription = custDb; } dc.StripeEvents.Add(even); dc.SaveChanges(); f.FinalizeInvoice(); EmailServer.EmailServer.SendEmail(ServerConfig.DEFAULT_EMAIL, ServerConfig.DEFAULT_EMAIL_FROM_NAME, ServerConfig.DEFAULT_ADMIN_EMAIL_ADMIN, "STRIPE: New Subscription About to be charged!!", json); return true; } catch (Exception exception) { ErrorDatabaseManager.AddException(exception, exception.GetType(), additionalInformation: json); } return false; }
public static bool SubscriptionCreated(StripeEvent se, string json) { try { var dc = new ManagementContext(); RDN.Library.DataModels.PaymentGateway.Stripe.StripeEventDb even = new RDN.Library.DataModels.PaymentGateway.Stripe.StripeEventDb(); even.CreatedStripeDate = se.Created.GetValueOrDefault(); even.StripeId = se.Id; even.LiveMode = se.LiveMode.GetValueOrDefault(); if (se.Data != null) { StripeSubscription cust = Stripe.Mapper<StripeSubscription>.MapFromJson(se.Data.Object.ToString()); //StripeSubscription cust = (StripeSubscription)se.Data.Object; StripeSubscriptionDb custDb = new StripeSubscriptionDb(); even.StripeEventTypeEnum = (byte)StripeEventTypeEnum.customer_subscription_created; custDb.CanceledAt = cust.CanceledAt; custDb.EndedAt = cust.EndedAt; custDb.Customer = dc.StripeCustomers.Where(x => x.Id == cust.CustomerId).FirstOrDefault(); custDb.PeriodEnd = cust.PeriodEnd; custDb.PeriodStart = cust.PeriodStart; custDb.Quantity = cust.Quantity; custDb.Start = cust.Start; custDb.Status = cust.Status; if (cust.StripePlan != null) { custDb.StripePlan = dc.StripePlans.Where(x => x.Id == cust.StripePlan.Id).FirstOrDefault(); if (custDb.StripePlan == null) { StripePlanDb pl = new StripePlanDb(); pl.AmountInCents = cust.StripePlan.AmountInCents; pl.Currency = cust.StripePlan.Currency; pl.Id = cust.StripePlan.Id; pl.Interval = cust.StripePlan.Interval; pl.IntervalCount = cust.StripePlan.IntervalCount; pl.LiveMode = cust.StripePlan.LiveMode; pl.Name = cust.StripePlan.Name; pl.TrialPeriodDays = cust.StripePlan.TrialPeriodDays; custDb.StripePlan = pl; dc.StripePlans.Add(pl); } } custDb.TrialEnd = cust.TrialEnd; custDb.TrialStart = cust.TrialStart; dc.StripeSubscriptions.Add(custDb); even.Subscription = custDb; } dc.StripeEvents.Add(even); dc.SaveChanges(); return true; } catch (Exception exception) { ErrorDatabaseManager.AddException(exception, exception.GetType(), additionalInformation: json); } return false; }