예제 #1
0
        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);
        }
예제 #2
0
        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));
        }