public override void ViewDidLoad() { base.ViewDidLoad(); SetUpTableView(); this.View.BackgroundColor = UIColor.FromRGB(245f, 245f, 245f); if (UIDevice.CurrentDevice.UserInterfaceIdiom != UIUserInterfaceIdiom.Pad) { NSNotificationCenter defaultCenter = NSNotificationCenter.DefaultCenter; defaultCenter.AddObserver(UIKeyboard.WillHideNotification, OnKeyboardNotification); defaultCenter.AddObserver(UIKeyboard.WillShowNotification, OnKeyboardNotification); defaultCenter.AddObserver(UIKeyboard.DidShowNotification, KeyBoardUpNotification); } UITapGestureRecognizer tapRecognizer = new UITapGestureRecognizer(); tapRecognizer.AddTarget(() => { if (_keyboardVisible) { DismissKeyboardAction(); } }); tapRecognizer.NumberOfTapsRequired = 1; tapRecognizer.NumberOfTouchesRequired = 1; EncapsulatingView.AddGestureRecognizer(tapRecognizer); SubmitButton.SetTitleColor(UIColor.Black, UIControlState.Application); SubmitButton.TouchUpInside += (sender, ev) => { MakePayment(); }; if (UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Pad) { FormClose.TouchUpInside += (sender, ev) => { this.DismissViewController(true, null); }; } SubmitButton.Disable(); detailCell.ccTextOutlet.BecomeFirstResponder(); SecureWebView.SetupWebView(_paymentService, successCallback, failureCallback); }
private void MakePayment() { try { LoadingScreen.ShowLoading(this.View); cardPayment.Card = GatherCardDetails(); SubmitButton.Disable(); _paymentService.MakePayment(cardPayment, new ClientService()).ContinueWith(reponse => { if (reponse.Exception != null) { LoadingScreen.HideLoading(); DispatchQueue.MainQueue.DispatchAfter(DispatchTime.Now, () => { NavigationController.CloseView(); reponse.Exception.FlattenToJudoFailure(failureCallback); }); } else { var result = reponse.Result; if (JudoSDKManager.Instance.ThreeDSecureEnabled && result.Response != null && result.Response.GetType() == typeof(PaymentRequiresThreeDSecureModel)) { var threedDSecureReceipt = result.Response as PaymentRequiresThreeDSecureModel; SecureManager.SummonThreeDSecure(threedDSecureReceipt, SecureWebView); } else { if (result != null && !result.HasError && result.Response.Result != "Declined") { var paymentreceipt = result.Response as PaymentReceiptModel; if (paymentreceipt != null) { // call success callback if (successCallback != null) { DispatchQueue.MainQueue.DispatchAfter(DispatchTime.Now, () => { NavigationController.CloseView(); successCallback(paymentreceipt); }); } } else { var threedDSecureReceipt = result.Response as PaymentRequiresThreeDSecureModel; if (threedDSecureReceipt != null) { DispatchQueue.MainQueue.DispatchAfter(DispatchTime.Now, () => { NavigationController.CloseView(); failureCallback(new JudoError { ApiError = new JudoPayDotNet.Errors.JudoApiErrorModel { ErrorMessage = "Account requires 3D Secure but application is not configured to accept it", ErrorType = JudoApiError.General_Error, ModelErrors = null } }); }); } else { throw new Exception("JudoXamarinSDK: unable to find the receipt in response."); } } } else { // Failure callback if (failureCallback != null) { var judoError = new JudoError { ApiError = result != null ? result.Error : null }; var paymentreceipt = result != null ? result.Response as PaymentReceiptModel : null; if (paymentreceipt != null) { // send receipt even we got card declined DispatchQueue.MainQueue.DispatchAfter(DispatchTime.Now, () => { NavigationController.CloseView(); failureCallback(judoError, paymentreceipt); }); } else { DispatchQueue.MainQueue.DispatchAfter(DispatchTime.Now, () => { NavigationController.CloseView(); failureCallback(judoError); }); } } } LoadingScreen.HideLoading(); } } }); } catch (Exception ex) { LoadingScreen.HideLoading(); // Failure callback if (failureCallback != null) { var judoError = new JudoError { Exception = ex }; DispatchQueue.MainQueue.DispatchAfter(DispatchTime.Now, () => { NavigationController.CloseView(); failureCallback(judoError); }); } } }