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