Beispiel #1
0
 private static void AddSubscriptionInputs(SubscriptionAddRequest request, SqlParameterCollection inputCollection)
 {
     inputCollection.AddWithValue("@UserId", request.UserId);
     inputCollection.AddWithValue("@SubscriptionId", request.SubscriptionId);
     inputCollection.AddWithValue("@CustomerId", request.CustomerId);
     inputCollection.AddWithValue("@IsSubscriptionActive", request.IsSubscriptionActive);
     if (request.DateEnded != null)
     {
         inputCollection.AddWithValue("@DateEnded", request.DateEnded);
     }
 }
Beispiel #2
0
        public void UpdateSubscription(SubscriptionAddRequest request)
        {
            string procname = "[dbo].[StripeSubscriptions_UpdateV2]";

            _data.ExecuteNonQuery(procname
                                  , delegate(SqlParameterCollection inputCollection)
            {
                AddSubscriptionInputs(request, inputCollection);
            }, null
                                  );
        }
Beispiel #3
0
        public ActionResult <ItemResponse <Stripe.Subscription> > UpdateSubscriptionPlan(StripeSubUpdatePlanRequest model)
        {
            int          responseCode = 200;
            BaseResponse responseData = null;

            try
            {
                StripeConfiguration.ApiKey = _appKeys.StripeApiKey;
                // Update stripe subscription
                Newtonsoft.Json.Linq.JObject subscriptionRawJObject = UpdateStripeSubscriptionPlan(model).RawJObject;
                string subscriptionString = subscriptionRawJObject.ToString();
                Stripe.Subscription stripeSubscription = JsonConvert.DeserializeObject <Stripe.Subscription>(subscriptionString);
                responseData = new ItemResponse <Stripe.Subscription>()
                {
                    Item = stripeSubscription
                };

                if (stripeSubscription == null)
                {
                    responseCode = 404;
                    responseData = new ErrorResponse("Subscription was not updated.");
                    return(StatusCode(responseCode, responseData));
                }
                ;

                // 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));
        }
        public SubscriptionAddResult SubscriptionAdd(SubscriptionAddRequest request)
        {
            int userId;

            this.TryGetUserId(out userId);
            _userSubscriptionRepository.CreateAsync(new UserSubscription
            {
                UserId       = userId,
                FriendUserId = request.UserId.Id
            }).Wait();

            var subscriptions = GetUserSubscriptions(new[] { new UserId(userId) });

            return(new SubscriptionAddResult
            {
                Result = new ServiceResult <List <UserSubscriptions> >
                {
                    Data = subscriptions.ToList()
                }
            });
        }
Beispiel #5
0
        public ActionResult <SuccessResponse> CancelSubscription(string id)
        {
            int          responseCode = 200;
            BaseResponse responseData = null;

            try
            {
                StripeConfiguration.ApiKey = _appKeys.StripeApiKey;
                Stripe.Subscription stripeSubscription = CancelStripeSubscription(id);

                if (stripeSubscription == null)
                {
                    responseCode = 404;
                    responseData = new ErrorResponse("Item was not found");
                    return(StatusCode(responseCode, responseData));
                }

                SubscriptionAddRequest request = new SubscriptionAddRequest();
                request.SubscriptionId       = id;
                request.UserId               = _authService.GetCurrentUserId();
                request.CustomerId           = stripeSubscription.CustomerId;
                request.IsSubscriptionActive = stripeSubscription.Status == "active";
                request.DateEnded            = stripeSubscription.EndedAt;

                _service.UpdateSubscription(request);

                responseData = new SuccessResponse();
            }
            catch (Exception exception)
            {
                responseCode = 500;
                responseData = new ErrorResponse($"Generic Error: {exception.Message}");
                base.Logger.LogError(exception.ToString());
            }

            return(StatusCode(responseCode, responseData));
        }
Beispiel #6
0
        public int AddSubscription(SubscriptionAddRequest request)
        {
            int    id       = 0;
            string procName = "[dbo].[StripeSubscriptions_InsertV2]";

            _data.ExecuteNonQuery(
                procName,
                delegate(SqlParameterCollection inputCollection)
            {
                AddSubscriptionInputs(request, inputCollection);

                SqlParameter outputId = new SqlParameter("@Id", SqlDbType.Int);
                outputId.Direction    = ParameterDirection.Output;
                inputCollection.Add(outputId);
            },
                delegate(SqlParameterCollection returnCollection)
            {
                object outputOfId = returnCollection["@Id"].Value;
                int.TryParse(outputOfId.ToString(), out id);
            }
                );

            return(id);
        }
Beispiel #7
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));
        }
Beispiel #8
0
        public ActionResult <ItemResponse <Stripe.Subscription> > CreateSubscription(StripeSubAddRequest model)
        {
            int          responseCode = 200;
            BaseResponse responseData = null;

            try
            {
                /* add step to check if user is subscribed? */
                int userId = _authService.GetCurrentUserId();
                StripeConfiguration.ApiKey = _appKeys.StripeApiKey;
                Sabio.Models.Domain.Stripe.Subscription existingSubscription = _service.GetSubscriptionByUserId(userId);

                if (existingSubscription != null)
                {
                    responseCode = 404;
                    responseData = new ErrorResponse("Subscription already exists.");
                    return(StatusCode(responseCode, responseData));
                }

                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));
                }
                ;

                // Create stripe subscription

                Newtonsoft.Json.Linq.JObject subscriptionRawJObject = CreateStripeSubscription(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 created.");
                    return(StatusCode(responseCode, responseData));
                }
                else
                {
                    responseData = new ItemResponse <Stripe.Subscription>()
                    {
                        Item = stripeSubscription
                    }
                };

                // Create database subscription
                SubscriptionAddRequest request = new SubscriptionAddRequest();
                request.SubscriptionId = stripeSubscription.Id;
                request.UserId         = _authService.GetCurrentUserId();
                request.CustomerId     = stripeSubscription.CustomerId;
                if (stripeSubscription.Status == "active")
                {
                    request.IsSubscriptionActive = true;
                }
                else
                {
                    request.IsSubscriptionActive = false;
                }
                request.DateEnded = stripeSubscription.EndedAt;

                int id = _service.AddSubscription(request);
                if (id == 0)
                {
                    responseCode = 404;
                    responseData = new ErrorResponse("Subscription was not saved.");
                    return(StatusCode(responseCode, responseData));
                }
                ;
            }
            catch (StripeException e)
            {
                switch (e.StripeError.Type)
                {
                case "card_error":
                    responseCode = (int)e.HttpStatusCode;
                    responseData = new ErrorResponse(e.StripeError.Message);
                    base.Logger.LogError(e.ToString());
                    break;

                case "api_connection_error":
                    break;

                case "api_error":
                    break;

                case "authentication_error":
                    break;

                case "invalid_request_error":
                    break;

                case "rate_limit_error":
                    break;

                case "validation_error":
                    break;

                default:
                    // Unknown Error Type
                    break;
                }
            }
            catch (Exception exception)
            {
                responseCode = 500;
                responseData = new ErrorResponse($"Generic Error: {exception.Message}");
                base.Logger.LogError(exception.ToString());
            }

            return(StatusCode(responseCode, responseData));
        }