private async Task GetCreditCards() { try { var creditCardsDetails = await _accountService.GetCreditCards(); CreditCards = creditCardsDetails .Select(cc => { var creditCardInfos = new CreditCardInfos { CreditCardId = cc.CreditCardId, CreditCardCompany = cc.CreditCardCompany, Label = cc.Label }; var cardNumber = $"**** {cc.Last4Digits}"; if (cc.CreditCardId == _accountService.CurrentAccount.DefaultCreditCard.CreditCardId) { cardNumber += this.Services().Localize["DefaultCreditCard_Label"]; creditCardInfos.IsDefault = true; } creditCardInfos.CardNumber = cardNumber; return(creditCardInfos); }).OrderByDescending(cc => cc.CreditCardId == _accountService.CurrentAccount.DefaultCreditCard.CreditCardId).ToList(); } catch (Exception e) { Logger.LogError(e); } }
private async Task TokenizeCard(CreditCardInfos creditCard, string kountSessionId) { var usRegex = new Regex("^\\d{5}([ \\-]\\d{4})?$", RegexOptions.IgnoreCase); var zipCode = usRegex.Matches(creditCard.ZipCode).Count > 0 && _appSettings.Data.SendZipCodeWhenTokenizingCard ? creditCard.ZipCode : null; Logger.LogMessage("Tokenizing card ending with: {0}", creditCard.CardNumber.Substring(creditCard.CardNumber.Length - 4)); var response = await UseServiceClientAsync <IPaymentService, TokenizedCreditCardResponse>(service => service.Tokenize( creditCard.CardNumber, creditCard.NameOnCard, new DateTime(creditCard.ExpirationYear.ToInt(), creditCard.ExpirationMonth.ToInt(), 1), creditCard.CCV, kountSessionId, zipCode, CurrentAccount, creditCard.StreetNumber, creditCard.StreetName, creditCard.Email, creditCard.Phone)); Logger.LogMessage("Response from tokenization: Success: {0} Message: {1}", response.IsSuccessful, response.Message); if (!response.IsSuccessful) { throw new Exception(response.Message); } creditCard.Token = response.CardOnFileToken; }
public async Task <bool> AddOrUpdateCreditCard(CreditCardInfos creditCard, string kountSessionId, bool isUpdate = false) { try { await TokenizeCard(creditCard, kountSessionId); } catch { return(false); } var request = new CreditCardRequest { CreditCardCompany = creditCard.CreditCardCompany, CreditCardId = creditCard.CreditCardId, NameOnCard = creditCard.NameOnCard, Last4Digits = creditCard.Last4Digits, Token = creditCard.Token, ExpirationMonth = creditCard.ExpirationMonth, ExpirationYear = creditCard.ExpirationYear, Label = creditCard.Label, ZipCode = creditCard.ZipCode, StreetNumber = creditCard.StreetNumber, StreetName = creditCard.StreetName, Email = creditCard.Email, Phone = creditCard.Phone, Country = creditCard.Country }; await UseServiceClientAsync <IAccountServiceClient> (client => !isUpdate ?client.AddCreditCard (request) : client.UpdateCreditCard(request)); if (isUpdate || CurrentAccount.DefaultCreditCard == null) { var creditCardDetails = new CreditCardDetails { AccountId = CurrentAccount.Id, CreditCardId = request.CreditCardId, CreditCardCompany = request.CreditCardCompany, NameOnCard = request.NameOnCard, Token = request.Token, Last4Digits = request.Last4Digits, ExpirationMonth = request.ExpirationMonth, ExpirationYear = request.ExpirationYear, IsDeactivated = false, StreetNumber = request.StreetNumber, StreetName = request.StreetName, Email = request.Email, Phone = request.Phone, Country = request.Country }; UpdateCachedAccount(creditCardDetails, ChargeTypes.CardOnFile.Id, false, true); } return(true); }
private async Task GetCreditCards() { try { var creditCardsDetails = await _accountService.GetCreditCards(); _creditCardsData = creditCardsDetails.Select(cc => { var creditCardInfos = new CreditCardInfos() { CreditCardId = cc.CreditCardId, CreditCardCompany = cc.CreditCardCompany }; var cardNumber = string.Format("{0} **** {1} ", cc.Label, cc.Last4Digits); if (cc.CreditCardId == _accountService.CurrentAccount.DefaultCreditCard.CreditCardId) { cardNumber += this.Services().Localize["DefaultCreditCard_Label"]; creditCardInfos.IsDefault = true; } creditCardInfos.CardNumber = cardNumber; return(creditCardInfos); }).OrderByDescending(cc => cc.CreditCardId == _accountService.CurrentAccount.DefaultCreditCard.CreditCardId).ToList(); CreditCards = _creditCardsData.Select(cc => { return(new ListItem() { Id = _creditCardsData.FindIndex(c => c == cc), Display = cc.CardNumber, IsDefault = cc.IsDefault, Image = _creditCardCompanies.FirstOrDefault(c => c.Display == cc.CreditCardCompany).Image }); }).ToArray(); } catch (Exception e) { Logger.LogError(e); } }
public override async void BaseStart() { using (this.Services().Message.ShowProgress()) { IsPayPalAccountLinked = _accountService.CurrentAccount.IsPayPalAccountLinked; CreditCardCompanies = new List <ListItem> { new ListItem { Display = Visa, Id = 0 }, new ListItem { Display = MasterCard, Id = 1 }, new ListItem { Display = Amex, Id = 2 }, new ListItem { Display = VisaElectron, Id = 3 }, new ListItem { Display = Discover, Id = 4 }, new ListItem { Display = CreditCardGeneric, Id = 5 } }; ExpirationYears = new List <ListItem>(); for (var i = 0; i <= 15; i++) { ExpirationYears.Add(new ListItem { Id = DateTime.Today.AddYears(i).Year, Display = DateTime.Today.AddYears(i).Year.ToString(CultureInfo.InvariantCulture) }); } ExpirationMonths = new List <ListItem> { new ListItem { Display = this.Services().Localize["January"], Id = 1 }, new ListItem { Display = this.Services().Localize["February"], Id = 2 }, new ListItem { Display = this.Services().Localize["March"], Id = 3 }, new ListItem { Display = this.Services().Localize["April"], Id = 4 }, new ListItem { Display = this.Services().Localize["May"], Id = 5 }, new ListItem { Display = this.Services().Localize["June"], Id = 6 }, new ListItem { Display = this.Services().Localize["July"], Id = 7 }, new ListItem { Display = this.Services().Localize["August"], Id = 8 }, new ListItem { Display = this.Services().Localize["September"], Id = 9 }, new ListItem { Display = this.Services().Localize["October"], Id = 10 }, new ListItem { Display = this.Services().Localize["November"], Id = 11 }, new ListItem { Display = this.Services().Localize["December"], Id = 12 } }; Data = new CreditCardInfos(); CreditCardDetails creditCard = null; try { var creditCards = (await _accountService.GetCreditCards()).ToList(); _numberOfCreditCards = creditCards.Count; if (!_isAddingNew) { creditCard = _creditCardId == default(Guid) ? await _accountService.GetDefaultCreditCard() : creditCards.First(c => c.CreditCardId == _creditCardId); } } catch (Exception ex) { Logger.LogMessage(ex.Message, ex.ToString()); this.Services().Message.ShowMessage(this.Services().Localize["Error"], this.Services().Localize["PaymentLoadError"]); } if (creditCard == null) { IsAddingNewCard = true; Data.NameOnCard = _accountService.CurrentAccount.Name; Data.Label = string.Empty; var id = CreditCardCompanies.Find(x => x.Display == CreditCardGeneric).Id; CreditCardType = (int)id; #if DEBUG if (PaymentSettings.PaymentMode == PaymentMethod.Braintree) { CreditCardNumber = DummyVisa.BraintreeNumber; } else { CreditCardNumber = DummyVisa.CmtNumber; } Data.CCV = DummyVisa.AvcCvvCvv2 + ""; Data.ZipCode = DummyVisa.ZipCode; ExpirationMonth = DummyVisa.ExpirationDate.Month; ExpirationYear = DummyVisa.ExpirationDate.Year; Data.StreetName = DummyVisa.StreetName; Data.StreetNumber = DummyVisa.StreetNumber; #endif Data.Email = _accountService.CurrentAccount.Email; Data.Phone = _accountService.CurrentAccount.Settings.Phone; Data.Country = _accountService.CurrentAccount.Settings.Country; } else { IsAddingNewCard = false; Data.CreditCardId = creditCard.CreditCardId; Data.CardNumber = "************" + creditCard.Last4Digits; Data.NameOnCard = creditCard.NameOnCard; Data.CreditCardCompany = creditCard.CreditCardCompany; Data.Label = creditCard.Label; Data.ZipCode = creditCard.ZipCode; Data.Email = creditCard.Email; Data.Phone = creditCard.Phone; Data.Country = creditCard.Country; Data.StreetName = creditCard.StreetName; Data.StreetNumber = creditCard.StreetNumber; ExpirationMonth = creditCard.ExpirationMonth.HasValue() ? int.Parse(creditCard.ExpirationMonth) : (int?)null; ExpirationYear = creditCard.ExpirationYear.HasValue() ? int.Parse(creditCard.ExpirationYear) : (int?)null; var id = CreditCardCompanies.Find(x => x.Display == creditCard.CreditCardCompany).Id; if (id != null) { CreditCardType = (int)id; } _originalLabel = creditCard.Label; } RaisePropertyChanged(() => Data); RaisePropertyChanged(() => CreditCardNumber); RaisePropertyChanged(() => CanDeleteCreditCard); RaisePropertyChanged(() => IsPayPalOnly); RaisePropertyChanged(() => CanSetCreditCardAsDefault); RaisePropertyChanged(() => SelectedCountryCode); RaisePropertyChanged(() => Phone); if (_hasPaymentToSettle) { return; } if (!_isFromCreditCardListView) { await GoToOverduePayment(); } } }