private void UpdateUserRepaymentEmail(CustomerRePaymentViewModel payment, ApplicationUser user) { if (user.FullName != payment.Name || user.AddressLine1 != payment.AddressLine1 || user.AddressLine2 != payment.AddressLine2 || user.City != payment.City || user.State != payment.State || user.Country != payment.Country || user.Zip != payment.Zip) { var client = new RestClient("https://hooks.zapier.com/hooks/catch/2318707/z0jmup/"); var request = new RestRequest(Method.POST); request.AddParameter("email", user.Email); request.AddParameter("contact_name", payment.Name); request.AddParameter("language_preference", _currencyService.GetCurrentLanguage().TwoLetterISOLanguageName); request.AddParameter("salutation", payment.Name.Split(' ').Length == 1 ? payment.Name : payment.Name.Split(' ')[0]); request.AddParameter("last_name", payment.Name.Split(' ').Length == 1 ? "" : payment.Name.Split(' ')[(payment.Name.Split(' ').Length - 1)]); request.AddParameter("address_line_1", payment.AddressLine1); request.AddParameter("address_line_2", payment.AddressLine2); request.AddParameter("server_location", _currencySettings.Value.ServerLocation); request.AddParameter("ip_address", _httpContextAccessor.HttpContext.Connection.RemoteIpAddress.ToString()); request.AddParameter("time_zone", payment.TimeZone); request.AddParameter("city", payment.City); request.AddParameter("state", payment.State); request.AddParameter("zip", payment.Zip); request.AddParameter("country", payment.Country); // execute the request IRestResponse response = client.Execute(request); } }
public async Task <IActionResult> Payment(int id) { var user = await GetCurrentUserAsync(); try { var donation = _donationService.GetById(id); var detail = (DonationViewModel)donation; List <CountryViewModel> countryList = GetCountryList(); // Check for existing customer // edit = 1 means user wants to edit the credit card information if (!string.IsNullOrEmpty(user.StripeCustomerId)) { try { var CustomerService = new StripeCustomerService(_stripeSettings.Value.SecretKey); StripeCustomer objStripeCustomer = CustomerService.Get(user.StripeCustomerId); StripeCard objStripeCard = null; if (objStripeCustomer.Sources != null && objStripeCustomer.Sources.TotalCount > 0 && objStripeCustomer.Sources.Data.Any()) { objStripeCard = objStripeCustomer.Sources.Data.FirstOrDefault().Card; } if (objStripeCard != null && !string.IsNullOrEmpty(objStripeCard.Id)) { CustomerRePaymentViewModel customerRePaymentViewModel = CustomerRepaymentModelData(user, donation, detail, countryList, objStripeCustomer, objStripeCard); return(View("RePayment", customerRePaymentViewModel)); } } catch (StripeException ex) { log = new EventLog() { EventId = (int)LoggingEvents.GET_ITEM, LogLevel = LogLevel.Error.ToString(), Message = ex.Message, StackTrace = ex.StackTrace, Source = ex.Source, EmailId = user.Email }; _loggerService.SaveEventLogAsync(log); ModelState.AddModelError("CustomerNotFound", ex.Message); } } CustomerPaymentViewModel customerPaymentViewModel = GetCustomerPaymentModel(user, donation, detail, countryList); return(View("Payment", customerPaymentViewModel)); } catch (Exception ex) { log = new EventLog() { EventId = (int)LoggingEvents.GET_ITEM, LogLevel = LogLevel.Error.ToString(), Message = ex.Message, StackTrace = ex.StackTrace, Source = ex.Source, EmailId = user.Email }; _loggerService.SaveEventLogAsync(log); return(RedirectToAction("Error", "Error500", new ErrorViewModel() { Error = ex.Message })); } }
private async Task UpdateRepaymentUserDetail(CustomerRePaymentViewModel payment, ApplicationUser user) { user.FullName = payment.Name; user.AddressLine1 = payment.AddressLine1; user.AddressLine2 = payment.AddressLine2; user.City = payment.City; user.State = payment.State; user.Country = payment.Country; user.Zip = payment.Zip; await _userManager.UpdateAsync(user); }
public async Task <IActionResult> CampaignRePayment(CustomerRePaymentViewModel payment) { var user = await GetCurrentUserAsync(); try { List <CountryViewModel> countryList = GetCountryList(); payment.countries = countryList; if (!ModelState.IsValid) { return(View(payment)); } var customerService = new StripeCustomerService(_stripeSettings.Value.SecretKey); var donation = _campaignService.GetById(payment.DonationId); UpdateUserRepaymentEmail(payment, user); await UpdateRepaymentUserDetail(payment, user); // Add customer to Stripe if (EnumInfo <PaymentCycle> .GetValue(donation.CycleId) == PaymentCycle.OneTime) { var model = (DonationViewModel)donation; var charges = new StripeChargeService(_stripeSettings.Value.SecretKey); // Charge the customer var charge = charges.Create(new StripeChargeCreateOptions { Amount = Convert.ToInt32(donation.DonationAmount * 100), Description = DonationCaption, Currency = "usd", //payment.Currency.ToLower(), CustomerId = user.StripeCustomerId, StatementDescriptor = _stripeSettings.Value.StatementDescriptor, }); if (charge.Paid) { var completedMessage = new CompletedViewModel { Message = donation.DonationAmount.ToString(), HasSubscriptions = false }; return(RedirectToAction("Thanks", completedMessage)); } return(RedirectToAction("Error", "Error", new ErrorViewModel() { Error = "Error" })); } donation.Currency = "usd";//payment.Currency; // Add to existing subscriptions and charge var plan = _campaignService.GetOrCreatePlan(donation); var subscriptionService = new StripeSubscriptionService(_stripeSettings.Value.SecretKey); var result = subscriptionService.Create(user.StripeCustomerId, plan.Id); if (result != null) { CompletedViewModel completedMessage = new CompletedViewModel(); completedMessage = GetSubscriptionMessage(result, true); return(RedirectToAction("Thanks", completedMessage)); } } catch (StripeException ex) { log = new EventLog() { EventId = (int)LoggingEvents.INSERT_ITEM, LogLevel = LogLevel.Error.ToString(), Message = ex.Message, StackTrace = ex.StackTrace, Source = ex.Source, EmailId = user.Email }; _loggerService.SaveEventLogAsync(log); if (ex.Message.ToLower().Contains("customer")) { return(RedirectToAction("Error", "Error500", new ErrorViewModel() { Error = ex.Message })); } else { ModelState.AddModelError("error", ex.Message); return(View(payment)); } } catch (Exception ex) { log = new EventLog() { EventId = (int)LoggingEvents.INSERT_ITEM, LogLevel = LogLevel.Error.ToString(), Message = ex.Message, StackTrace = ex.StackTrace, Source = ex.Source, EmailId = user.Email }; _loggerService.SaveEventLogAsync(log); return(RedirectToAction("Error", "Error", new ErrorViewModel() { Error = ex.Message })); } return(RedirectToAction("Error", "Error", new ErrorViewModel() { Error = "Error" })); }