Ejemplo n.º 1
0
        private void ProcessPaymentThroughPaymentGateway(IPaymentGateway gateway)
        {
            // Update billing details
            if (User.BillingDetails == null)
                User.BillingDetails = new BillingDetails();
            User.BillingDetails.FirstName = txtFirstName.Text.Trim();
            User.BillingDetails.LastName = txtLastName.Text.Trim();
            User.BillingDetails.Address = txtAddress.Text.Trim();
            User.BillingDetails.City = txtCity.Text.Trim();
            User.BillingDetails.State = txtState.Text.Trim();
            User.BillingDetails.Zip = txtZip.Text.Trim();
            User.BillingDetails.Country = txtCountry.Text.Trim();
            User.BillingDetails.Phone = txtPhone.Text.Trim();
            if (txtCardNumber.Text.IndexOf("XXXX") < 0)
                User.BillingDetails.CardNumber = txtCardNumber.Text.Trim();
            try
            {
                User.BillingDetails.CardExpirationMonth = Convert.ToInt32(ddMonth.SelectedItem.Text);
                User.BillingDetails.CardExpirationYear = Convert.ToInt32(ddYear.SelectedItem.Text);
            }
            catch (FormatException)
            {
                Page.ClientScript.RegisterClientScriptBlock(typeof(Page), "errorAlert",
                                                            String.Format("<script>var alert_string = {0}';</script>",
                                                                          "Invalid expiration date!"));
                return;
            }

            User.Update();

            if (radioCredits.Checked)
            {
                int planID = Convert.ToInt32(rlCreditPackages.SelectedItem.Value);
                CreditsPackage package = CreditsPackage.Fetch(planID);
                if (package == null)
                {
                    Page.ClientScript.RegisterClientScriptBlock(typeof(Page), "errorAlert",
                                                                String.Format("<script>var alert_string = '{0}';</script>",
                                                                              "Selected credits package is not in the database"));
                    return;
                }

                TransactionDetails transactionDetails = TransactionDetails.FromBillingDetails(
                    User.BillingDetails);
                transactionDetails.Amount = Convert.ToDecimal(package.Price);
                eGatewayResponse gatewayResponse = gateway.SubmitTransaction(User.Username, transactionDetails,
                                                                             "Purchased credits (" +
                                                                             package.Price.ToString("c") + ", " +
                                                                             DateTime.Now.ToShortDateString() + ")");
                switch (gatewayResponse)
                {
                    case eGatewayResponse.Approved:
                        User.Credits += package.Quantity;
                        User.Update(true);
                        Response.Redirect("ThankYou.aspx");
                        return;
                    case eGatewayResponse.Declined:
                        Page.ClientScript.RegisterClientScriptBlock(typeof(Page), "errorAlert",
                                                                    String.Format("<script>var alert_string = '{0}';</script>",
                                                                                  Lang.Trans(
                                                                                      "Your credit card has been declined!")));
                        return;
                    case eGatewayResponse.Error:
                        Page.ClientScript.RegisterClientScriptBlock(typeof(Page), "errorAlert",
                                                                    String.Format("<script>var alert_string = '{0}';</script>",
                                                                                  Lang.Trans(
                                                                                      "There has been an error while processing your transaction!")));
                        return;
                }
            }
            else
            {
                int planID = Convert.ToInt32(rlPlans.SelectedItem.Value);

                //if cancellation selected
                if (planID == Int32.MaxValue && activeSubscription != null)
                {
                    Subscription.RequestCancellation(activeSubscription.ID);
                    return;
                }

                if (ActiveSubscription != null)
                {
                    ActiveSubscription.PlanID = planID;
                    ActiveSubscription.PaymentProcessor = radiolistPaymentMethods.SelectedValue;
                    ActiveSubscription.Update();

                    ((PageBase)Page).CurrentUserSession.BillingPlanOptions = null;
                    ((PageBase)Page).StatusPageMessage = Lang.Trans("Your subscription has been changed successfully!");
                    Response.Redirect("ShowStatus.aspx");
                }

                //gets selected plan data
                BillingPlan plan = BillingPlan.Fetch(planID);
                if (plan == null)
                {
                    Page.ClientScript.RegisterClientScriptBlock(typeof(Page), "errorAlert",
                                                                String.Format("<script>var alert_string = '{0}';</script>",
                                                                              "Selected billing plan is not in the database"));
                    return;
                }

                int subscriptionID = Subscription.Create(User.Username, plan.ID, gateway.Name);
                Subscription newSubscription = Subscription.Fetch(subscriptionID);


                TransactionDetails transactionDetails = TransactionDetails.FromBillingDetails(
                    User.BillingDetails);
                transactionDetails.Amount = Convert.ToDecimal(plan.Amount);
                eGatewayResponse gatewayResponse = gateway.SubmitTransaction(User.Username, transactionDetails,
                                                                             "First subscription fee (" +
                                                                             plan.Amount.ToString("c") + ", " +
                                                                             DateTime.Now.ToShortDateString() + ")");
                switch (gatewayResponse)
                {
                    case eGatewayResponse.Approved:
                        newSubscription.Activate(DateTime.Now, plan);
                        var billingPlanOptions = ((PageBase)Page).CurrentUserSession.BillingPlanOptions;
                        if (billingPlanOptions.MaxEcardsPerDay.AllowCredits)
                        {
                            ((PageBase)Page).CurrentUserSession.Credits += billingPlanOptions.MaxEcardsPerDay.Credits;
                            ((PageBase)Page).CurrentUserSession.Update();
                        }
                        Response.Redirect("ThankYou.aspx");
                        return;
                    case eGatewayResponse.Declined:
                        Page.ClientScript.RegisterClientScriptBlock(typeof(Page), "errorAlert",
                                                                    String.Format("<script>var alert_string = '{0}';</script>",
                                                                                  Lang.Trans(
                                                                                      "Your credit card has been declined!")));
                        return;
                    case eGatewayResponse.Error:
                        Page.ClientScript.RegisterClientScriptBlock(typeof(Page), "errorAlert",
                                                                    String.Format("<script>var alert_string = '{0}';</script>",
                                                                                  Lang.Trans(
                                                                                      "There has been an error while processing your transaction!")));
                        return;
                }
            }
        }