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);
            }
        }
Example #2
0
        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;
        }
Example #3
0
        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);
            }
        }
Example #5
0
        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();
                }
            }
        }