예제 #1
0
        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);
        }
예제 #2
0
        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);
                    });
                }
            }
        }