private Stripe.Subscription UpdateStripeSubscriptionPayment(StripeSubUpdatePaymentRequest request) { StripeConfiguration.ApiKey = _appKeys.StripeApiKey; var service = new SubscriptionService(); Stripe.Subscription subscription = service.Get(request.SubscriptionId); var items = new List <SubscriptionItemOptions> { new SubscriptionItemOptions { Id = subscription.Items.Data[0].Id, } }; var options = new SubscriptionUpdateOptions { DefaultPaymentMethod = request.PaymentMethodId, Items = items }; options.AddExpand("latest_invoice.payment_intent"); subscription = service.Update(request.SubscriptionId, options); return(subscription); }
public ActionResult <ItemResponse <Stripe.Subscription> > UpdateSubscriptionPayment(StripeSubUpdatePaymentRequest model) { int responseCode = 200; BaseResponse responseData = null; try { StripeConfiguration.ApiKey = _appKeys.StripeApiKey; //Update Customer Billing Options Customer customer = UpdateStripeCustomer(model.CustomerId, model.BillingDetails); if (customer == null) { responseCode = 404; responseData = new ErrorResponse("Customer information was not updated."); return(StatusCode(responseCode, responseData)); } // Attach payment method to customer PaymentMethod paymentMethod = AttachStripePaymentMethod(model.CustomerId, model.PaymentMethodId); if (paymentMethod == null) { responseCode = 404; responseData = new ErrorResponse("Payment method was not attached."); return(StatusCode(responseCode, responseData)); } ; // Update stripe subscription Newtonsoft.Json.Linq.JObject subscriptionRawJObject = UpdateStripeSubscriptionPayment(model).RawJObject; string subscriptionString = subscriptionRawJObject.ToString(); Stripe.Subscription stripeSubscription = JsonConvert.DeserializeObject <Stripe.Subscription>(subscriptionString); if (stripeSubscription == null) { responseCode = 404; responseData = new ErrorResponse("Subscription was not updated."); return(StatusCode(responseCode, responseData)); } else { responseData = new ItemResponse <Stripe.Subscription>() { Item = stripeSubscription } }; // Update database subscription SubscriptionAddRequest request = new SubscriptionAddRequest(); request.SubscriptionId = stripeSubscription.Id; request.UserId = _authService.GetCurrentUserId(); request.CustomerId = stripeSubscription.CustomerId; request.IsSubscriptionActive = stripeSubscription.Status == "active"; request.DateEnded = stripeSubscription.EndedAt; _service.UpdateSubscription(request); } catch (Exception exception) { responseCode = 500; responseData = new ErrorResponse($"Generic Error: {exception.Message}"); base.Logger.LogError(exception.ToString()); } return(StatusCode(responseCode, responseData)); }