public async Task <IActionResult> ManagePaymentInstrument() { var user = await _userManager.GetUserAsync(User); if (user == null) { throw new ApplicationException($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); } var paymentInstrument = new ManagePaymentInstrumentViewModel { CreditCard = new CreditCardViewModel { CardType = user.DefaultCardType, CardNumber = user.DefaultCardNumber, ExpirationMonth = user.DefaultExpirationMonth, ExpirationYear = user.DefaultExpirationYear, CardName = user.DefaultCardName, CVV = user.DefaultCVV, }, BillingAddress = new AddressViewModel { Address1 = user.BillingAddress1, Address2 = user.BillingAddress2, City = user.BillingCity, State = user.BillingState, ZipCode = user.BillingZipCode, CountryRegion = user.BillingCountryRegion, }, StatusMessage = StatusMessage, DeviceFingerPrinting = new DeviceFingerPrintingViewModel { SessionId = _contextAccessor.GetSessionId() } }; return(View(paymentInstrument)); }
public async Task <IActionResult> ManagePaymentInstrument(ManagePaymentInstrumentViewModel model) { var user = await _userManager.GetUserAsync(User); if (user == null) { throw new ApplicationException($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); } // Set card info user.DefaultCardType = model.CreditCard.CardType; user.DefaultCardNumber = model.CreditCard.CardNumber; user.DefaultCardName = model.CreditCard.CardName; user.DefaultCVV = model.CreditCard.CVV; user.DefaultExpirationMonth = model.CreditCard.ExpirationMonth; user.DefaultExpirationYear = model.CreditCard.ExpirationYear; // Set billing address info user.BillingAddress1 = model.BillingAddress.Address1; user.BillingAddress2 = model.BillingAddress.Address2; user.BillingCity = model.BillingAddress.City; user.BillingState = model.BillingAddress.State; user.BillingZipCode = model.BillingAddress.ZipCode; user.BillingCountryRegion = model.BillingAddress.CountryRegion; var updateResult = await _userManager.UpdateAsync(user); #region Fraud Protection Service // If storing the user's payment information succeeds, update Fraud Protection. if (updateResult.Succeeded) { var billingAddress = new AddressDetails { FirstName = user.FirstName, LastName = user.LastName, Street1 = user.BillingAddress1, Street2 = user.BillingAddress2, City = user.BillingCity, State = user.BillingState, ZipCode = user.BillingZipCode, Country = user.BillingCountryRegion }; var userId = user.Email; var fraudProtectionUser = new User { UserId = userId, PaymentInstrumentList = new List <PaymentInstrument> { new PaymentInstrument { MerchantPaymentInstrumentId = $"{userId}-CreditCard", Type = PaymentInstrumentType.CreditCard.ToString(), CardType = model.CreditCard.CardType, HolderName = model.CreditCard.CardName, BIN = model.CreditCard.BIN, ExpirationDate = model.CreditCard.ExpirationDate, LastFourDigits = model.CreditCard.LastFourDigits, BillingAddress = billingAddress, CreationDate = DateTimeOffset.Now, State = PaymentInstrumentState.Active.ToString(), } }, DeviceContext = new DeviceContext { DeviceContextId = _contextAccessor.GetSessionId(), IPAddress = _contextAccessor.HttpContext.Connection.RemoteIpAddress.ToString(), Provider = DeviceContextProvider.DFPFingerPrinting.ToString() } }; var correlationId = _fraudProtectionService.NewCorrelationId; var response = await _fraudProtectionService.PostUser(fraudProtectionUser, correlationId); var fraudProtectionIO = new FraudProtectionIOModel(correlationId, fraudProtectionUser, response, "UpdateAccount"); TempData.Put(FraudProtectionIOModel.TempDataKey, fraudProtectionIO); } #endregion StatusMessage = "Your payment information has been updated"; return(RedirectToAction(nameof(ManagePaymentInstrument))); }