internal async void RegisterCardHandler(object sender, IResult <ITransactionResult> result)
        {
            await Navigation.PopAsync();

            if (result.HasError)
            {
                await DisplayAlert("Error adding card", "Code: " + result.Error.Code, "OK");
            }
            else if ("Success".Equals(result.Response.Result))
            {
                var receipt  = result.Response as PaymentReceiptModel;
                var cardType = (CardNetwork)Enum.Parse(typeof(CardNetwork), receipt.CardDetails.CardType.ToString());

                var token = new TokenPaymentViewModel
                {
                    LastFour          = receipt.CardDetails.CardLastfour,
                    ExpiryDate        = receipt.CardDetails.EndDate,
                    CardType          = cardType,
                    Token             = receipt.CardDetails.CardToken,
                    ConsumerToken     = receipt.Consumer.ConsumerToken,
                    ConsumerReference = receipt.Consumer.YourConsumerReference
                };

                Settings.CardToken = JsonConvert.SerializeObject(token);

                if (await DisplayAlert("Card added", "Perform token payment?", "Yes", "No"))
                {
                    var page = new TokenPaymentPage(BuildJudo(), new TokenPaymentDefaultsViewModel(token.LastFour, token.ExpiryDate, token.Token, token.ConsumerToken, token.CardType));
                    page.resultHandler += Handler;
                    await Navigation.PushAsync(page);
                }
            }
        }
 async void ShowTokenPaymentForm(object sender, EventArgs e)
 {
     if (!string.IsNullOrWhiteSpace(Settings.CardToken))
     {
         var page = new TokenPaymentPage(BuildJudo(), GetTokenViewModel());
         page.ResultHandler += PaymentResultHandler;
         await Navigation.PushAsync(page);
     }
     else
     {
         await DisplayAlert("No card saved", "Add card before attempting token payment", "OK");
     }
 }