public static Charge GetPayment(string chargeId)
        {
            var charge = new Charge();

            #region (Plan A) Check Redis Cache First

            #endregion

            #region (Plan B) Call Stripe API, Transform Data & Store in Redis Cache

            var stripeManager = new StripeManager();

            //string stripeCustomerId = null;


            var stripeCharge = stripeManager.GetCharge(chargeId);

            if (stripeCharge != null)
            {
                return(Transformations.TransformStripeChargeToCharge(stripeCharge, false));
            }


            #endregion

            return(charge);
        }
        public static DataAccessResponseType ProcessSuccessfulStripeChargeEvent(string stripeCustomerId, string stripeChargeId, string stripeCardId, string StripeInvoiceId, string StripeEventId)
        {
            var response = new DataAccessResponseType();

            //Get all owners for the account:
            var accountOwnerEmails = AccountManager.GetAccountOwnerEmails(stripeCustomerId);
            //Get the account
            //var account = AccountManager.GetAccountByStripeCustomerID(stripeCustomerID, false);
            var account = AccountManager.GetAccount(stripeCustomerId);

            //Get the associated Stripe Invoice:
            var stripeManager = new StripeManager();


            var stripeCharge = stripeManager.GetCharge(stripeChargeId);
            var stripeCard   = stripeManager.GetCard(stripeCustomerId, account.StripeCardID); //<-- in case card is updated we use the latest stripe card ID

            //Generate dollar amount
            var chargeTotalAmount = Sahara.Core.Common.Methods.Billing.ConvertStripeAmountToDollars(stripeCharge.Amount.ToString());

            //For HTML invoice or charge details string
            var htmlPaymentDetailsString = string.Empty;

            if (!String.IsNullOrEmpty(StripeInvoiceId))
            {
                //Charge has in invoice associated
                var stripeInvoice = stripeManager.GetInvoice(StripeInvoiceId);

                //Generate HTML invoice
                htmlPaymentDetailsString = Sahara.Core.Common.Methods.Billing.GenerateStripeHTMLInvoice(stripeInvoice);
            }
            else
            {
                //Generate HTML charge details (No associated invoice exists)
                htmlPaymentDetailsString = Sahara.Core.Common.Methods.Billing.GenerateStripeHTMLChargeDetails(stripeCharge);
            }

            //email all account owners a copy of the associated charge/invoice details
            EmailManager.Send(
                accountOwnerEmails,
                Settings.Endpoints.Emails.FromBilling,
                Settings.Copy.EmailMessages.AccountCharged.FromName,
                String.Format(Settings.Copy.EmailMessages.AccountCharged.Subject),
                String.Format(Settings.Copy.EmailMessages.AccountCharged.Body, account.AccountName, stripeCard.CardBrand, stripeCard.Last4, chargeTotalAmount, htmlPaymentDetailsString),
                true);

            //Clear Billing Issues Marker From Account
            //????/

            response.isSuccess = true;

            return(response);
        }