Example #1
0
        // Methods
        public static void InitialCharge()
        {
            //http://code.google.com/apis/checkout/developer/Google_Checkout_Beta_Subscriptions.html
            //using an initial charge with a recurring charge using a different item.

            CheckoutShoppingCartRequest cartRequest
                = new CheckoutShoppingCartRequest("123456", "merchantkey", EnvironmentType.Sandbox, "USD", 120);

            //if you are using a web page and it has the Google Checkout button, you would use this syntax.
            //= GCheckoutButton1.CreateRequest()

            ShoppingCartItem initialItem   = new ShoppingCartItem();
            ShoppingCartItem recurrentItem = new ShoppingCartItem();

            initialItem.Price       = decimal.Zero;
            initialItem.Quantity    = 1;
            initialItem.Name        = "Item that shows in cart";
            initialItem.Description = "This is the item that shows in the cart";

            recurrentItem.Price       = 2M;
            recurrentItem.Quantity    = 1;
            recurrentItem.Name        = "Item that is charged every month";
            recurrentItem.Description = "Description for item that is charged every month";

            Subscription subscription = new Subscription();

            subscription.Period = GCheckout.AutoGen.DatePeriod.MONTHLY;
            subscription.Type   = SubscriptionType.merchant;

            SubscriptionPayment payment = new SubscriptionPayment();

            payment.MaximumCharge = 120M;
            payment.Times         = 12;

            subscription.AddSubscriptionPayment(payment);

            //You must set the item that will be charged for every month.
            subscription.RecurrentItem = recurrentItem;

            //you must set the subscription for the item
            initialItem.Subscription = subscription;

            cartRequest.AddItem(initialItem);

            Debug.WriteLine(EncodeHelper.Utf8BytesToString(cartRequest.GetXml()));

            //Send the request to Google
            //GCheckout.Util.GCheckoutResponse resp = cartRequest.Send();

            //Uncommment this line or perform additional actions
            //if (resp.IsGood) {
            //Response.Redirect(resp.RedirectUrl, True)
            //}
            //else{
            //Response.Write("Resp.ResponseXml = " & Resp.ResponseXml & "<br>");
            //Response.Write("Resp.RedirectUrl = " & Resp.RedirectUrl & "<br>");
            //Response.Write("Resp.IsGood = " & Resp.IsGood & "<br>");
            //Response.Write("Resp.ErrorMessage = " & Resp.ErrorMessage & "<br>");
            //}
        }
        public void HandleEvent(TenantEditionChangedEventData eventData)
        {
            if (!eventData.OldEditionId.HasValue)
            {
                return;
            }

            var subscriptionPayment = GetLastCompletedSubscriptionPayment(eventData.TenantId);

            if (subscriptionPayment == null || subscriptionPayment.ExternalPaymentId.IsNullOrEmpty())
            {
                // no subscription on stripe !
                return;
            }

            if (!eventData.NewEditionId.HasValue)
            {
                AsyncHelper.RunSync(() => CancelSubscription(subscriptionPayment.ExternalPaymentId));
                return;
            }

            string  newPlanId;
            decimal?newPlanAmount;

            using (CurrentUnitOfWork.SetTenantId(null))
            {
                var edition = (SubscribableEdition)AsyncHelper.RunSync(() => _editionManager.GetByIdAsync(eventData.NewEditionId.Value));
                newPlanId     = GetPlanId(edition.Name, subscriptionPayment.GetPaymentPeriodType());
                newPlanAmount = edition.GetPaymentAmountOrNull(subscriptionPayment.PaymentPeriodType);
            }

            if (!newPlanAmount.HasValue || newPlanAmount.Value == 0)
            {
                AsyncHelper.RunSync(() => CancelSubscription(subscriptionPayment.ExternalPaymentId));
                return;
            }

            var payment = new SubscriptionPayment
            {
                TenantId          = eventData.TenantId,
                Amount            = 0,
                PaymentPeriodType = subscriptionPayment.GetPaymentPeriodType(),
                Description       = $"Edition change by admin from {eventData.OldEditionId} to {eventData.NewEditionId}",
                EditionId         = eventData.NewEditionId.Value,
                Gateway           = SubscriptionPaymentGatewayType.Stripe,
                DayCount          = subscriptionPayment.DayCount,
                IsRecurring       = true
            };

            _subscriptionPaymentRepository.InsertAndGetId(payment);

            CurrentUnitOfWork.SaveChanges();

            if (!AsyncHelper.RunSync(() => DoesPlanExistAsync(newPlanId)))
            {
                AsyncHelper.RunSync(() => CreatePlanAsync(newPlanId, newPlanAmount.Value, GetPlanInterval(subscriptionPayment.PaymentPeriodType), ProductName));
            }

            AsyncHelper.RunSync(() => UpdateSubscription(subscriptionPayment.ExternalPaymentId, newPlanId));
        }
Example #3
0
        public static void RecurringChargeRightAway()
        {
            CheckoutShoppingCartRequest cartRequest
                = new CheckoutShoppingCartRequest("123456", "merchantkey", EnvironmentType.Sandbox, "USD", 120);
            //if you are using a web page and it has the Google Checkout button, you would use this syntax.
            //= GCheckoutButton1.CreateRequest()

            Subscription        gSubscription = new Subscription();
            SubscriptionPayment maxCharge     = new SubscriptionPayment();

            DigitalItem urlDigitalItem = new DigitalItem(new Uri("http://www.url.com/login.aspx"),
                                                         "Congratulations, your account has been created!");

            DigitalItem urlDigitalItemSubscription = new DigitalItem(new Uri("http://www.url.com/login.aspx"),
                                                                     "You may now continue to login to your account.");

            ShoppingCartItem gRecurrentItem = new ShoppingCartItem();

            maxCharge.MaximumCharge = 29.99M;

            gRecurrentItem.Name                       = "Entry Level Plan";
            gRecurrentItem.Description                = "Allows for basic stuff. Monthly Subscription:";
            gRecurrentItem.Quantity                   = 1;
            gRecurrentItem.Price                      = 29.99M;
            gRecurrentItem.DigitalContent             = urlDigitalItemSubscription;
            gRecurrentItem.DigitalContent.Disposition = DisplayDisposition.Pessimistic;

            urlDigitalItem.Disposition = DisplayDisposition.Pessimistic;

            gSubscription.Type   = SubscriptionType.google;
            gSubscription.Period = GCheckout.AutoGen.DatePeriod.MONTHLY;
            gSubscription.AddSubscriptionPayment(maxCharge);
            gSubscription.RecurrentItem = gRecurrentItem;

            cartRequest.AddItem("Entry Level Plan", "Allows for basic stuff.", 1, gSubscription);
            cartRequest.AddItem("Entry Level Plan", "First Month:", 29.99M, 1, urlDigitalItem);

            cartRequest.MerchantPrivateData = "UserName:Joe87";

            Debug.WriteLine(EncodeHelper.Utf8BytesToString(cartRequest.GetXml()));

            //Send the request to Google
            //GCheckout.Util.GCheckoutResponse resp = cartRequest.Send();

            //Uncommment this line or perform additional actions
            //if (resp.IsGood) {
            //Response.Redirect(resp.RedirectUrl, True)
            //}
            //else{
            //Response.Write("Resp.ResponseXml = " & Resp.ResponseXml & "<br>");
            //Response.Write("Resp.RedirectUrl = " & Resp.RedirectUrl & "<br>");
            //Response.Write("Resp.IsGood = " & Resp.IsGood & "<br>");
            //Response.Write("Resp.ErrorMessage = " & Resp.ErrorMessage & "<br>");
            //}
        }
        public async Task <Guid> Handle(BuySubscriptionCommand command, CancellationToken cancellationToken)
        {
            var priceList = await PriceListProvider.GetPriceList(_sqlConnectionFactory.GetOpenConnection());

            var subscription = SubscriptionPayment.Buy(
                _payerContext.PayerId,
                SubscriptionPeriod.Of(command.SubscriptionTypeCode),
                command.CountryCode,
                MoneyValue.Of(command.Value, command.Currency),
                priceList);

            _aggregateStore.AppendChanges(subscription);

            return(subscription.Id);
        }
        public async Task HandleInvoicePaymentSucceededAsync(Invoice invoice)
        {
            var customerService = new CustomerService();
            var customer        = await customerService.GetAsync(invoice.CustomerId);

            int tenantId;
            int editionId;

            PaymentPeriodType?paymentPeriodType;

            using (CurrentUnitOfWork.SetTenantId(null))
            {
                var tenant = await _tenantManager.FindByTenancyNameAsync(customer.Description);

                tenantId  = tenant.Id;
                editionId = tenant.EditionId.Value;

                using (CurrentUnitOfWork.SetTenantId(tenantId))
                {
                    var lastPayment = GetLastCompletedSubscriptionPayment(tenantId);
                    paymentPeriodType = lastPayment.GetPaymentPeriodType();
                }

                await _tenantManager.UpdateTenantAsync(
                    tenant.Id,
                    isActive : true,
                    isInTrialPeriod : false,
                    paymentPeriodType,
                    tenant.EditionId.Value,
                    EditionPaymentType.Extend);
            }

            var payment = new SubscriptionPayment
            {
                TenantId          = tenantId,
                Amount            = ConvertFromStripePrice(invoice.AmountPaid),
                DayCount          = (int)paymentPeriodType,
                PaymentPeriodType = paymentPeriodType,
                EditionId         = editionId,
                ExternalPaymentId = invoice.ChargeId,
                Gateway           = SubscriptionPaymentGatewayType.Stripe,
                IsRecurring       = true
            };

            payment.SetAsPaid();

            await _subscriptionPaymentRepository.InsertAsync(payment);
        }
        public void BuySubscription_IsSuccessful()
        {
            // Arrange
            var subscriptionPaymentTestData = CreateSubscriptionPaymentTestData();

            // Act
            var subscriptionPayment = SubscriptionPayment.Buy(
                subscriptionPaymentTestData.PayerId,
                SubscriptionPeriod.Month,
                "PL",
                MoneyValue.Of(60, "PLN"),
                subscriptionPaymentTestData.PriceList);

            // Assert
            AssertPublishedDomainEvent <SubscriptionPaymentCreatedDomainEvent>(subscriptionPayment);
        }
        public void BuySubscriptionRenewal_WhenPriceDoesNotExist_IsNotPossible()
        {
            // Arrange
            var subscriptionPaymentTestData = CreateSubscriptionPaymentTestData();

            // Act & Assert
            AssertBrokenRule <PriceOfferMustMatchPriceInPriceListRule>(() =>
            {
                SubscriptionPayment.Buy(
                    subscriptionPaymentTestData.PayerId,
                    SubscriptionPeriod.Month,
                    "PL",
                    MoneyValue.Of(50, "PLN"),
                    subscriptionPaymentTestData.PriceList);
            });
        }
        public async Task <ActionResult> MamarPay(SubscriptionPayment payment)
        {
            try
            {
                payment.DefaultUrl = Convert.ToString(System.Configuration.ConfigurationManager.AppSettings["DefaultURL"]);
                var MamarBaseUrl = Convert.ToString(System.Configuration.ConfigurationManager.AppSettings["MamarBaseUrl"]);
                payment.PaymentReturnUrl = MamarBaseUrl + "/Subscription/PaymentResponse";
                payment.UserName         = User.Identity.Name;

                //Begin Subscription
                BeginSubscriptionRequestDTO dto = new BeginSubscriptionRequestDTO(payment);
                var status = await Post(new ADP.MG.Mamar.Web.Models.ApiModel()
                {
                    Data = JsonConvert.SerializeObject(dto), ApiUrl = "subscription/beginsubscriptionrequest"
                });

                SubscriptionResponseRoot subscriptionResponse = JsonConvert.DeserializeObject <SubscriptionResponseRoot>
                                                                    (((ApiHelper.Response.ApiResponse)status.Data).ResponseResult.ToString());

                SubscriptionPay subscriptionPay  = new SubscriptionPay();
                string          serviceRequestId = string.Empty;
                if (subscriptionResponse.SubscriptionResponse != null && subscriptionResponse.SubscriptionResponse.SubscriptionNo != null && subscriptionResponse.SubscriptionResponse.PaymentStatus != "inprogress")
                {
                    PaymentProcessBusinessLogic business = new PaymentProcessBusinessLogic();
                    string[] revenueCodes = new string[1];
                    revenueCodes[0] = payment.RevenueCode;
                    var vatResponse = business.GetVatDetails(payment.UCID, revenueCodes);
                    SubcriptionEntityResponse entity = subscriptionPay.SubscriptionPayment(payment, subscriptionResponse, vatResponse);
                    entity.PaymentProcessModel = business.InitiateBusinessPayment(entity.PaymentProcessModel);
                    return(Json(entity.PaymentProcessModel.PaymentForm + "<input type='hidden' id='SrId' value='" + serviceRequestId + "'/>", JsonRequestBehavior.AllowGet));
                }
                else
                {
                    return(Json(new { failed = true, message = subscriptionResponse.msg, paymentStatus = subscriptionResponse.SubscriptionResponse.PaymentStatus }, JsonRequestBehavior.AllowGet));
                }
            }

            catch (Exception ex)
            {
                LogErrorInMgApp("Subscription/MamarPay", ex.ToString(), null);
                return(Json(new { status = false, message = ex.Message }, JsonRequestBehavior.AllowGet));
            }
        }
Example #9
0
 private void CreatePaidPayment(FintrakERPIMSDemoDbContext context, SubscriptionPayment subscriptionPayment)
 {
     subscriptionPayment.SetAsPaid();
     context.SubscriptionPayments.Add(subscriptionPayment);
 }
Example #10
0
 private void CreatePaidPayment(CruisePMSDbContext context, SubscriptionPayment subscriptionPayment)
 {
     subscriptionPayment.SetAsPaid();
     context.SubscriptionPayments.Add(subscriptionPayment);
 }
 private void CreatePaidPayment(PodEZTemplateDbContext context, SubscriptionPayment subscriptionPayment)
 {
     subscriptionPayment.SetAsPaid();
     context.SubscriptionPayments.Add(subscriptionPayment);
 }
 private void CreatePaidPayment(ProductionDbContext context, SubscriptionPayment subscriptionPayment)
 {
     subscriptionPayment.SetAsPaid();
     context.SubscriptionPayments.Add(subscriptionPayment);
 }
 private void CreatePaidPayment(FrameworkDbContext context, SubscriptionPayment subscriptionPayment)
 {
     subscriptionPayment.SetAsPaid();
     context.SubscriptionPayments.Add(subscriptionPayment);
 }
 private void CreatePaidPayment(CoreAngularDemoDbContext context, SubscriptionPayment subscriptionPayment)
 {
     subscriptionPayment.SetAsPaid();
     context.SubscriptionPayments.Add(subscriptionPayment);
 }
 private void CreatePaidPayment(AttendanceDbContext context, SubscriptionPayment subscriptionPayment)
 {
     subscriptionPayment.SetAsPaid();
     context.SubscriptionPayments.Add(subscriptionPayment);
 }
        public void TestSubscriptions_All_Data()
        {
            CheckoutShoppingCartRequest request = new CheckoutShoppingCartRequest(MERCHANT_ID, MERCHANT_KEY, EnvironmentType.Sandbox, "USD", 120);
              //Make sure we can add an item to the cart.
              Subscription sub = new Subscription();
              sub.AddSubscriptionPayment(new SubscriptionPayment(2, 12));
              sub.NoChargeAfter = new DateTime(2010, 1, 1);
              sub.Period = GCheckout.AutoGen.DatePeriod.DAILY;
              sub.RecurrentItem = new ShoppingCartItem("Sub Item", "Sub Item Description", "Item 1", 0, 3);
              sub.StartDate = new DateTime(2009, 7, 1);
              sub.Type = SubscriptionType.merchant;
              ShoppingCartItem item = request.AddItem("Item 1", "Cool Candy 1", 1, sub);
              //Console.WriteLine(EncodeHelper.Utf8BytesToString(request.GetXml()));

              //now deserialize it
              AutoGen.CheckoutShoppingCart cart = EncodeHelper.Deserialize(request.GetXml()) as AutoGen.CheckoutShoppingCart;
              //Console.WriteLine(EncodeHelper.Utf8BytesToString(EncodeHelper.Serialize(cart)));

              foreach (AutoGen.Item ai in cart.shoppingcart.items) {
            ShoppingCartItem ci = new ShoppingCartItem(ai);
            Assert.AreEqual(ci.Subscription.NoChargeAfter, sub.NoChargeAfter);
            SubscriptionPayment sp = new SubscriptionPayment(ai.subscription.payments[0]);
            SubscriptionPayment dp = sub.Payments[0];

            Assert.AreEqual(sp.MaximumCharge, dp.MaximumCharge);
            Assert.AreEqual(sp.Times, dp.Times);

            Assert.AreEqual(ci.Subscription.Period, sub.Period);
            Assert.AreEqual(ci.Subscription.StartDate, sub.StartDate);
            Assert.AreEqual(ci.Subscription.Type, sub.Type);

              }

              sub.NoChargeAfter = null;
              sub.Period = GCheckout.AutoGen.DatePeriod.QUARTERLY;
              sub.StartDate = null;
              sub.Type = SubscriptionType.google;

              //reset
              cart = EncodeHelper.Deserialize(request.GetXml()) as AutoGen.CheckoutShoppingCart;
              //Console.WriteLine(EncodeHelper.Utf8BytesToString(EncodeHelper.Serialize(cart)));

              foreach (AutoGen.Item ai in cart.shoppingcart.items) {
            ShoppingCartItem ci = new ShoppingCartItem(ai);
            //Console.WriteLine(ci.Subscription.NoChargeAfter);
            Assert.IsFalse(ci.Subscription.NoChargeAfter.HasValue, "NoChargeAfter should be null");
            SubscriptionPayment sp = new SubscriptionPayment(ai.subscription.payments[0]);
            SubscriptionPayment dp = sub.Payments[0];

            Assert.AreEqual(sp.MaximumCharge, dp.MaximumCharge);
            Assert.AreEqual(sp.Times, dp.Times);

            Assert.AreEqual(ci.Subscription.Period, DatePeriod.QUARTERLY);
            //Console.WriteLine(ci.Subscription.StartDate);
            //bug in .net
            //Assert.IsFalse(ci.Subscription.StartDate.HasValue, "StartDate should be null");
            Assert.AreEqual(ci.Subscription.Type, SubscriptionType.google);

              }
        }
Example #17
0
 private void CreatePaidPayment(QiProcureDemoDbContext context, SubscriptionPayment subscriptionPayment)
 {
     subscriptionPayment.SetAsPaid();
     context.SubscriptionPayments.Add(subscriptionPayment);
 }
Example #18
0
 private void CreatePaidPayment(PhoneBookDemoDbContext context, SubscriptionPayment subscriptionPayment)
 {
     subscriptionPayment.SetAsPaid();
     context.SubscriptionPayments.Add(subscriptionPayment);
 }
        public void TestSubscriptions_All_Data()
        {
            CheckoutShoppingCartRequest request = new CheckoutShoppingCartRequest(MERCHANT_ID, MERCHANT_KEY, EnvironmentType.Sandbox, "USD", 120);
            //Make sure we can add an item to the cart.
            Subscription sub = new Subscription();

            sub.AddSubscriptionPayment(new SubscriptionPayment(2, 12));
            sub.NoChargeAfter = new DateTime(2010, 1, 1);
            sub.Period        = GCheckout.AutoGen.DatePeriod.DAILY;
            sub.RecurrentItem = new ShoppingCartItem("Sub Item", "Sub Item Description", "Item 1", 0, 3);
            sub.StartDate     = new DateTime(2009, 7, 1);
            sub.Type          = SubscriptionType.merchant;
            ShoppingCartItem item = request.AddItem("Item 1", "Cool Candy 1", 1, sub);

            //Console.WriteLine(EncodeHelper.Utf8BytesToString(request.GetXml()));

            //now deserialize it
            AutoGen.CheckoutShoppingCart cart = EncodeHelper.Deserialize(request.GetXml()) as AutoGen.CheckoutShoppingCart;
            //Console.WriteLine(EncodeHelper.Utf8BytesToString(EncodeHelper.Serialize(cart)));

            foreach (AutoGen.Item ai in cart.shoppingcart.items)
            {
                ShoppingCartItem ci = new ShoppingCartItem(ai);
                Assert.AreEqual(ci.Subscription.NoChargeAfter, sub.NoChargeAfter);
                SubscriptionPayment sp = new SubscriptionPayment(ai.subscription.payments[0]);
                SubscriptionPayment dp = sub.Payments[0];

                Assert.AreEqual(sp.MaximumCharge, dp.MaximumCharge);
                Assert.AreEqual(sp.Times, dp.Times);

                Assert.AreEqual(ci.Subscription.Period, sub.Period);
                Assert.AreEqual(ci.Subscription.StartDate, sub.StartDate);
                Assert.AreEqual(ci.Subscription.Type, sub.Type);
            }

            sub.NoChargeAfter = null;
            sub.Period        = GCheckout.AutoGen.DatePeriod.QUARTERLY;
            sub.StartDate     = null;
            sub.Type          = SubscriptionType.google;

            //reset
            cart = EncodeHelper.Deserialize(request.GetXml()) as AutoGen.CheckoutShoppingCart;
            //Console.WriteLine(EncodeHelper.Utf8BytesToString(EncodeHelper.Serialize(cart)));

            foreach (AutoGen.Item ai in cart.shoppingcart.items)
            {
                ShoppingCartItem ci = new ShoppingCartItem(ai);
                //Console.WriteLine(ci.Subscription.NoChargeAfter);
                Assert.IsFalse(ci.Subscription.NoChargeAfter.HasValue, "NoChargeAfter should be null");
                SubscriptionPayment sp = new SubscriptionPayment(ai.subscription.payments[0]);
                SubscriptionPayment dp = sub.Payments[0];

                Assert.AreEqual(sp.MaximumCharge, dp.MaximumCharge);
                Assert.AreEqual(sp.Times, dp.Times);

                Assert.AreEqual(ci.Subscription.Period, DatePeriod.QUARTERLY);
                //Console.WriteLine(ci.Subscription.StartDate);
                //bug in .net
                //Assert.IsFalse(ci.Subscription.StartDate.HasValue, "StartDate should be null");
                Assert.AreEqual(ci.Subscription.Type, SubscriptionType.google);
            }
        }