public override void GetNoncenBrainTree(BrainTreeCard brainTreeCard, Action <object> action)
        {
            BTAPIClient  BTAPIClient  = new BTAPIClient(brainTreeCard.Token);
            BTCardClient BTCardClient = new BTCardClient(BTAPIClient);
            BTCard       BTCard       = new BTCard();

            BTCard.Number          = brainTreeCard.CardNumber;
            BTCard.Cvv             = brainTreeCard.Cvv;
            BTCard.PostalCode      = brainTreeCard.PostalCode;
            BTCard.ExpirationYear  = brainTreeCard.ExpirationDate.ToString("yyyy");
            BTCard.ExpirationMonth = brainTreeCard.ExpirationDate.ToString("MM");
            BTCard.ShouldValidate  = false;

            BTCardClient.TokenizeCard(BTCard, (arg1, arg2) =>
            {
                if (arg1 != null && !string.IsNullOrEmpty(arg1.Nonce))
                {
                    if (action != null)
                    {
                        action(arg1.Nonce);
                    }
                }
                else
                {
                    if (action != null)
                    {
                        action(new Exception(arg2.LocalizedFailureReason + "\n" + arg2.LocalizedDescription));
                    }
                }
            });
        }
        async Task <CreditCardData> SetupCreditCard()
        {
            try
            {
                var           token         = Shared.APIs.IAccounts.GetPaymentGatewayToken();
                BrainTreeCard brainTreeCard = new BrainTreeCard();
                brainTreeCard.Token          = token;
                brainTreeCard.CardNumber     = creditCardNumberEntry.Text.Replace(" ", "");
                brainTreeCard.ExpirationDate = DateTime.ParseExact(EntryMMYY.Text, FormatDate, null);
                brainTreeCard.PostalCode     = EntryPostalCode.Text;
                brainTreeCard.Cvv            = EntryCvv.Text;

                var tcs = new TaskCompletionSource <CreditCardData>();

                mAppServices.GetNoncenBrainTree(brainTreeCard, async(obj) =>
                {
                    if (obj is string && !string.IsNullOrEmpty(obj as string))
                    {
                        try
                        {
                            var paymentNonce = obj as string;
                            CreditCardData paymentAccountData = new CreditCardData();
                            paymentAccountData.PaymentNonce   = paymentNonce;
                            tcs.SetResult(paymentAccountData);
                        }
                        catch (Exception ex)
                        {
                            var notificator = DependencyService.Get <IToastNotificator>();
                            await notificator.Notify(ToastNotificationType.Error, AppResources.PaymentMethodTitle, ex.Message, TimeSpan.FromSeconds(5));
                            System.Diagnostics.Debug.WriteLine("Exception occured When Add Payment Method : " + ex.Message);
                            tcs.SetCanceled();
                        }
                    }
                    else
                    {
                        tcs.SetCanceled();
                    }
                });

                return(await tcs.Task);
            }
            catch (Exception ex)
            {
                var notificator = DependencyService.Get <IToastNotificator>();
                await notificator.Notify(ToastNotificationType.Error, AppResources.PaymentMethodTitle, ex.Message, TimeSpan.FromSeconds(5));

                System.Diagnostics.Debug.WriteLine("Exception occured When Add Payment Method : " + ex.Message);
            }



            return(null);
        }
        public override void GetNoncenBrainTree(BrainTreeCard brainTreeCard, Action <object> action)
        {
            try
            {
                BraintreeFragment          mBraintreeFragment         = BraintreeFragment.NewInstance(MainActivity, brainTreeCard.Token);
                PaymentMethodNonceListener paymentMethodNonceListener = new PaymentMethodNonceListener();
                paymentMethodNonceListener.Callback += (sender, e) =>
                {
                    if (e is PaymentMethodNonce)
                    {
                        string nouce = (e as PaymentMethodNonce).Nonce;
                        action(nouce);
                    }
                    else
                    {
                        if (action != null)
                        {
                            action(e);
                        }
                    }
                };

                mBraintreeFragment.AddListener(paymentMethodNonceListener);
                var cardBuilder = new CardBuilder()
                                  .CardNumber(brainTreeCard.CardNumber)
                                  .Cvv(brainTreeCard.Cvv)
                                  .PostalCode(brainTreeCard.PostalCode)
                                  .ExpirationDate(brainTreeCard.ExpirationDate.ToString("MM/yyyy"));
                cardBuilder.Validate(false);
                Card.Tokenize(mBraintreeFragment, cardBuilder);
            }
            catch (Exception e)
            {
                ExceptionHandler.Catch(e);
            }
        }