예제 #1
0
        void HandleRequestCode(int requestCode, Result resultCode, JudoReceipt receipt)
        {
            if (resultCode == Result.Ok && receipt.Result != "Declined")
            {
                PaymentReceiptModel paymentReceipt;
                if ((paymentReceipt = receipt.FullReceipt as PaymentReceiptModel) != null)
                {
                    _judoSuccessCallback.Value(paymentReceipt);
                    Finish();
                }
            }
            else if (_judoFailureCallback.Value != null)
            {
                var judoError      = new JudoError();
                var paymentreceipt = receipt != null ? receipt.FullReceipt as PaymentReceiptModel : null;

                if (paymentreceipt != null)
                {
                    _judoFailureCallback.Value(judoError, paymentreceipt);
                    Finish();
                }
                else
                {
                    _judoFailureCallback.Value(judoError);
                    Finish();
                }
            }
        }
예제 #2
0
        private void RegisterCard()
        {
            try {
                LoadingScreen.ShowLoading(this.View);
                registerCardModel.Card = GatherCardDetails();

                RegisterButton.Disable();

                _paymentService.RegisterCard(registerCardModel, new ClientService()).ContinueWith(HandleResponse);
            } 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);
                    });
                }
            }
        }
        public void ApplePayment(ApplePayViewModel viewModel, JudoSuccessCallback success, JudoFailureCallback failure, ApplePaymentType type)
        {
            if (!_clientService.ApplePayAvailable)
            {
                failure(new JudoError {
                    ApiError = new JudoPayDotNet.Errors.JudoApiErrorModel {
                        ErrorMessage = "Apple Pay is not enabled on device, application entitlement or setup by user.",
                        ErrorType    = JudoApiError.General_Error,
                        ModelErrors  = null
                    }
                });
            }
            try {
                var vc = GetCurrentViewController();

                if (JudoSDKManager.UIMode && vc == null)
                {
                    var error = new JudoError {
                        Exception = new Exception("Navigation controller cannot be null with UIMode enabled.")
                    };
                    failure(error);
                }
                else
                {
                    _paymentService.MakeApplePayment(viewModel, success, failure, vc as UINavigationController, type);
                }
            } catch (Exception ex) {
                HandleFailure(failure, ex);
            }
        }
예제 #4
0
        private void HandleResponse(JudoSuccessCallback success, JudoFailureCallback failure, Task <IResult <ITransactionResult> > reponse)
        {
            var result = reponse.Result;

            if (result != null && !result.HasError && result.Response.Result != "Declined")
            {
                var secureReceipt = result.Response as PaymentRequiresThreeDSecureModel;
                if (secureReceipt != null)
                {
                    var judoError = new JudoError {
                        ApiError = result != null ? result.Error : null
                    };
                    failure(new JudoError {
                        ApiError = new JudoPayDotNet.Errors.JudoApiErrorModel {
                            ErrorMessage = "Account requires 3D Secure but non UI Mode does not support this",
                            ErrorType    = JudoApiError.General_Error,
                            ModelErrors  = null
                        }
                    });
                }

                var paymentReceipt = result.Response as PaymentReceiptModel;

                if (success != null)
                {
                    success(paymentReceipt);
                }
                else
                {
                    throw new Exception("SuccessCallback is not set.");
                }
            }
            else
            {
                // Failure
                if (failure != 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
                        failure(judoError, paymentreceipt);
                    }
                    else
                    {
                        failure(judoError);
                    }
                }
                else
                {
                    throw new Exception("FailureCallback is not set.");
                }
            }
        }
예제 #5
0
        public async Task <IResult <ITransactionResult> > HandlePKPayment(PKPayment payment, string customerRef, NSDecimalNumber amount, ApplePaymentType type, JudoFailureCallback failure)
        {
            try {
                CardPaymentModel paymentmodel = new CardPaymentModel {
                    JudoId        = JudoConfiguration.Instance.JudoId,
                    ClientDetails = _clientService.GetClientDetails(),
                    UserAgent     = _clientService.GetSDKVersion()
                };


                var            test    = payment.Token.PaymentData.ToString(NSStringEncoding.UTF8);
                JObject        jo      = JObject.Parse(test.ToString());
                PKPaymentModel pkModel = new PKPaymentModel()
                {
                    JudoId = JudoConfiguration.Instance.JudoId,
                    YourPaymentReference  = "paymentRef12343",
                    YourConsumerReference = customerRef,
                    Amount        = amount.ToDecimal(),
                    ClientDetails = _clientService.GetClientDetails(),
                    UserAgent     = _clientService.GetSDKVersion(),
                    PkPayment     = new PKPaymentInnerModel()
                    {
                        Token = new PKPaymentTokenModel()
                        {
                            PaymentData           = jo,
                            PaymentInstrumentName = payment.Token.PaymentInstrumentName,
                            PaymentNetwork        = payment.Token.PaymentNetwork
                        }
                    }
                };
                Task <IResult <ITransactionResult> > task = null;
                if (type == ApplePaymentType.Payment)
                {
                    task = _judoAPI.Payments.Create(pkModel);
                }
                else if (type == ApplePaymentType.PreAuth)
                {
                    task = _judoAPI.PreAuths.Create(pkModel);
                }
                if (task == null)
                {
                    var judoError = new JudoError()
                    {
                        Exception = new Exception("Judo server did not return response. Please contact customer support")
                    };
                    failure(judoError);
                }
                return(await task);
            } catch (Exception e) {
                Console.WriteLine(e.InnerException.ToString());
                var judoError = new JudoError()
                {
                    Exception = e
                };
                failure(judoError);
                return(null);
            }
        }
예제 #6
0
		private void HandleFailure (FailureCallback failure,Exception ex)
		{
			if (failure != null) {
				var judoError = new JudoError {
					Exception = ex
				};
				failure (judoError);
			}
		}
 private void HandleFailure(JudoFailureCallback failure, Exception ex)
 {
     if (failure != null)
     {
         var judoError = new JudoError {
             Exception = ex
         };
         failure(judoError);
     }
 }
예제 #8
0
        protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
        {
            JudoReceipt receipt    = null;
            string      msg_prefix = "";

            if (data != null)
            {
                var resultString = data.GetStringExtra(JudoSDKManager.JUDO_RECEIPT);
                if (resultString != null)
                {
                    var jsonResult = JsonConvert.DeserializeObject <PaymentReceiptModel> (resultString);
                    receipt = new JudoReceipt(jsonResult);
                }
                if (resultCode == Result.Canceled)
                {
                    Finish();
                }
                else if (resultCode == JudoSDKManager.JUDO_ERROR)
                {
                    var jsonError = data.GetStringExtra(JudoSDKManager.JUDO_ERROR_EXCEPTION);
                    var error     = (jsonError != null ? JsonConvert.DeserializeObject <JudoError> (data.GetStringExtra(JudoSDKManager.JUDO_ERROR_EXCEPTION)) : null);
                    PaymentReceiptModel paymentReceipt = null;
                    if (receipt != null)
                    {
                        paymentReceipt = receipt.FullReceipt as PaymentReceiptModel;
                    }

                    var innerError = new JudoError()
                    {
                        Exception = new Exception("Unknown Error"),
                        ApiError  = null
                    };
                    if (error != null)
                    {
                        innerError = new JudoError()
                        {
                            Exception = error.Exception,
                            ApiError  = error.ApiError
                        };
                    }
                    _judoFailureCallback.Value(innerError, paymentReceipt);

                    Finish();
                }
                else
                {
                    HandleRequestCode(requestCode, resultCode, receipt);
                }
            }
            Finish();
        }
예제 #9
0
		void PerformApplePayAction(Judo judo, ApplePayModel model, JudoSuccessCallback success, JudoFailureCallback failure, IApplePayRequest applePayRequest)
		{
			try
			{
				PKPaymentRequest request = GetPKPaymentRequest(model);
				var rootView = GetCurrentViewController();
				var pkDelegate = new JudoPKPaymentAuthorizationViewControllerDelegate(judo, model, success, failure, applePayRequest);

				PKPaymentAuthorizationViewController pkController = new PKPaymentAuthorizationViewController(request) { Delegate = pkDelegate };
				rootView.PresentViewController(pkController, true, null);

			}
			catch (Exception e)
			{
				var judoError = new JudoError { Exception = e.InnerException };
				failure(judoError);
			}
		}
예제 #10
0
        public void TokenPreAuth(TokenPaymentViewModel payment, JudoSuccessCallback success, JudoFailureCallback failure)
        {
            var vc = GetCurrentViewController();

            if (JudoSDKManager.UIMode && vc == null)
            {
                var error = new JudoError {
                    Exception = new Exception("Navigation controller cannot be null with UIMode enabled.")
                };
                failure(error);
            }
            else
            {
                var view = _viewLocator.GetTokenPreAuthView();
                view.successCallback = success;
                view.failureCallback = failure;
                view.tokenPayment    = payment;
                PresentView(vc as UINavigationController, view);
            }
        }
예제 #11
0
        private void FailurePayment(JudoError error, PaymentReceiptModel receipt)
        {
            DispatchQueue.MainQueue.DispatchAfter(DispatchTime.Now, () => {
                // move back to home screen
                // show receipt
                string title          = "Error";
                string message        = "";
                StringBuilder builder = new StringBuilder();

                if (error != null && error.ApiError != null)
                {
                    title = (error.ApiError != null ? error.ApiError.Message : "");
                }

                if (error != null && error.ApiError != null)
                {
                    if (error.ApiError.ModelErrors != null && error.ApiError.ModelErrors.Count > 0)
                    {
                        foreach (FieldError model in error.ApiError.ModelErrors)
                        {
                            builder.AppendLine(model.Message);
                        }
                    }
                    else
                    {
                        title = "Error";
                        builder.AppendLine(error.ApiError.Message);
                    }
                }

                if (receipt != null)
                {
                    builder.AppendLine("Transaction : ");
                    builder.AppendLine(receipt.Message);
                    builder.AppendLine("Receipt ID - " + receipt.ReceiptId);
                }

                ShowMessage(title, builder.ToString());
            });
        }
예제 #12
0
        async Task ClearPaymentWithJudo(PKPayment payment, string customerRef, Action <PKPaymentAuthorizationStatus> completion)
        {
            var result = await _applePayService.HandlePKPayment(payment, customerRef, _runningTotal, _paymentAction, _failureCallback);

            if (result != null && !result.HasError && result.Response.Result != "Declined")
            {
                var paymentreceipt = result.Response as PaymentReceiptModel;

                if (paymentreceipt != null)
                {
                    if (_successCallBack != null)
                    {
                        completion(PKPaymentAuthorizationStatus.Success);
                        _successCallBack(paymentreceipt);
                    }
                }
            }
            else
            {
                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
                        completion(PKPaymentAuthorizationStatus.Failure);
                        _failureCallback(judoError, paymentreceipt);
                    }
                    else
                    {
                        completion(PKPaymentAuthorizationStatus.Failure);
                        _failureCallback(judoError);
                    }
                }
            }
        }
예제 #13
0
        internal static void SummonThreeDSecure(PaymentRequiresThreeDSecureModel threedDSecureReceipt, SecureWebView secureWebView)
        {
            secureWebView.ReceiptID = threedDSecureReceipt.ReceiptId;

            NSCharacterSet allowedCharecterSet = NSCharacterSet.FromString(@":/=,!$&'()*+;[]@#?").InvertedSet;
            NSString       paReq        = new NSString(threedDSecureReceipt.PaReq);
            var            encodedPaReq = paReq.CreateStringByAddingPercentEncoding(allowedCharecterSet);

            NSString termUrl        = new NSString("judo1234567890://threedsecurecallback");
            var      encodedTermUrl = termUrl.CreateStringByAddingPercentEncoding(allowedCharecterSet);


            NSUrl url = new NSUrl(threedDSecureReceipt.AcsUrl);

            NSMutableUrlRequest req = new NSMutableUrlRequest(url);

            NSString postString = new NSString("MD=" + threedDSecureReceipt.Md + "&PaReq=" + encodedPaReq + "&TermUrl=" + encodedTermUrl + "");
            NSData   postData   = postString.Encode(NSStringEncoding.UTF8);

            req.HttpMethod = "POST";
            req.Body       = postData;

            try {
                DispatchQueue.MainQueue.DispatchAfter(DispatchTime.Now, () => {
                    secureWebView.LoadRequest(req);

                    LoadingScreen.HideLoading();
                    secureWebView.Hidden = false;
                });
            } catch (Exception e) {
                if (secureWebView._failureCallback != null)
                {
                    var judoError = new JudoError {
                        Exception = e
                    };
                    secureWebView.CloseView();
                    secureWebView._failureCallback(judoError);
                }
            }
        }
예제 #14
0
        public void PreAuth(PaymentViewModel preAuthorisation, JudoSuccessCallback success, JudoFailureCallback failure)
        {
            var vc = GetCurrentViewController();

            if (JudoSDKManager.UIMode && vc == null)
            {
                var error = new JudoError {
                    Exception = new Exception("Navigation controller cannot be null with UIMode enabled.")
                };
                failure(error);
            }
            else
            {
                var view = _viewLocator.GetPreAuthView();

                // register card and pre Auth sharing same view so we need to set this property to false
                view.successCallback    = success;
                view.failureCallback    = failure;
                view.authorisationModel = preAuthorisation;
                PresentView(vc as UINavigationController, view);
            }
        }
예제 #15
0
        private void FailurePayment(JudoError error, PaymentReceiptModel receipt)
        {
            //set alert for executing the task
            AlertDialog.Builder alert = new AlertDialog.Builder(this);

            string        title   = "Error";
            StringBuilder builder = new StringBuilder();

            if (error != null && error.ApiError != null)
            {
                title = (error.ApiError.Message);
                if (error.ApiError.ModelErrors != null && error.ApiError.ModelErrors.Count > 0)
                {
                    foreach (FieldError model in error.ApiError.ModelErrors)
                    {
                        builder.AppendLine(model.Message + (!String.IsNullOrWhiteSpace(model.FieldName) ? "(" + model.FieldName + ")" : ""));
                    }
                }
                else
                {
                    title = ("Error");
                    builder.AppendLine(error.ApiError.Message);
                }
            }
            if (receipt != null)
            {
                builder.AppendLine("Transaction : " + receipt.Result);
                builder.AppendLine(receipt.Message);
                builder.AppendLine("Receipt ID - " + receipt.ReceiptId);
            }
            alert.SetTitle(title);
            alert.SetMessage(builder.ToString());
            alert.SetPositiveButton("OK", (senderAlert, args) => {
            });

            RunOnUiThread(() => {
                alert.Show();
            });
        }
예제 #16
0
        public void MakeApplePayment(ApplePayViewModel payment, JudoSuccessCallback success, JudoFailureCallback failure, UINavigationController controller, ApplePaymentType type)
        {
            try {
                PKPaymentRequest request = new PKPaymentRequest();

                request.CurrencyCode = payment.CurrencyCode;

                request.CountryCode = payment.CountryCode;

                request.MerchantCapabilities = (PKMerchantCapability)payment.MerchantCapabilities;


                request.SupportedNetworks = payment.SupportedNetworks;


                request.PaymentSummaryItems = payment.Basket;

                request.MerchantIdentifier = payment.MerchantIdentifier;// @"merchant.com.judo.Xamarin"; // do it with configuration/overwrite

                var pkDelegate = new JudoPKPaymentAuthorizationViewControllerDelegate(this, request, payment.ConsumerRef.ToString(), type, success, failure);



                PKPaymentAuthorizationViewController pkController = new PKPaymentAuthorizationViewController(request)
                {
                    Delegate = pkDelegate
                };
                controller.PresentViewController(pkController, true, null);
            } catch (Exception e) {
                Console.WriteLine(e.InnerException.ToString());

                var judoError = new JudoError()
                {
                    Exception = e
                };
                failure(judoError);
            }
        }
예제 #17
0
        public SecureWebView(IntPtr p) : base(p)
        {
            this.LoadFinished += delegate {
                this.ScrollView.SetZoomScale(2.0f, true);
            };
            this.ShouldStartLoad = (UIWebView webView, NSUrlRequest request, UIWebViewNavigationType navigationType) => {
                if (request.Url.ToString().Contains("threedsecurecallback") && ReceiptID != null)
                {
                    Dictionary <string, string> queryStringDictionary = new Dictionary <string, string> ();

                    var TrackTraceDataArray = request.Body.ToString().Split(new char[] { '&' });

                    foreach (string keyValuePair in TrackTraceDataArray)
                    {
                        var    pairComponents = keyValuePair.Split(new char[] { '=' });
                        string key            = pairComponents.First();
                        string value          = pairComponents.Last();
                        queryStringDictionary.Add(key, value);
                    }

                    NSString paRes          = new NSString(queryStringDictionary ["PaRes"]);
                    var      paResUnEncoded = paRes.CreateStringByRemovingPercentEncoding().ToString();
                    paResUnEncoded = paResUnEncoded.Replace("\r\n", string.Empty);

                    NSString md          = new NSString(queryStringDictionary ["MD"]);
                    var      mdUnEncoded = md.CreateStringByRemovingPercentEncoding().ToString();
                    mdUnEncoded = mdUnEncoded.Replace("\r\n", string.Empty);
                    _paymentService.CompleteDSecure(ReceiptID, paResUnEncoded, mdUnEncoded).ContinueWith(reponse => {
                        var result = reponse.Result;
                        if (result != null && !result.HasError && result.Response.Result != "Declined")
                        {
                            var paymentreceipt = result.Response as PaymentReceiptModel;

                            if (paymentreceipt != null)
                            {
                                // call success callback
                                if (_successCallback != null)
                                {
                                    CloseView();
                                    _successCallback(paymentreceipt);
                                }
                            }
                            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
                                    CloseView();
                                    _failureCallback(judoError, paymentreceipt);
                                }
                                else
                                {
                                    CloseView();
                                    _failureCallback(judoError);
                                }
                            }
                        }
                    });
                }

                return(true);
            };
        }
예제 #18
0
        private void FailurePayment (JudoError error, PaymentReceiptModel receipt)
        {
                
                            
        }
예제 #19
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);
                    });
                }
            }
        }
예제 #20
0
        private void FailurePayment (JudoError error, PaymentReceiptModel receipt)
        {
            DispatchQueue.MainQueue.DispatchAfter (DispatchTime.Now, () => {
                // move back to home screen
                // show receipt
                string title = "Error";
                string message = "";
                StringBuilder builder = new StringBuilder ();

                if (error != null && error.ApiError != null)
                    title = (error.ApiError != null ? error.ApiError.Message : "");

                if (error != null && error.ApiError != null) {
                    if (error.ApiError.ModelErrors != null && error.ApiError.ModelErrors.Count > 0) {
                        foreach (FieldError model in error.ApiError.ModelErrors) {
                            builder.AppendLine (model.Message);
                     
                        }
                    } else {
                        title = "Error";
                        builder.AppendLine (error.ApiError.Message);
                    }
                }

                if (receipt != null) {
                    builder.AppendLine ("Transaction : ");
                    builder.AppendLine (receipt.Message);
                    builder.AppendLine ("Receipt ID - " + receipt.ReceiptId);
                }

                ShowMessage (title, builder.ToString ());
            });
                
        }
예제 #21
0
         private void FailurePayment(JudoError error, PaymentReceiptModel receipt)
 {
        
                    
 }
예제 #22
0
        private static void HandResponse(SuccessCallback success, FailureCallback failure, Task<IResult<ITransactionResult>> reponse)
        {
            var result = reponse.Result;
            if (result != null && !result.HasError && result.Response.Result != "Declined")
            {
				var secureReceipt = result.Response as PaymentRequiresThreeDSecureModel;
				if (secureReceipt != null) {
					var judoError = new JudoError { ApiError = result != null ? result.Error : null };
					failure (new JudoError {ApiError = new JudoPayDotNet.Errors.JudoApiErrorModel{ErrorMessage ="Account requires 3D Secure but non UI Mode does not support this", ErrorType = JudoApiError.General_Error, ModelErrors = null }});
				}

				var paymentReceipt = result.Response as PaymentReceiptModel;

                if (success != null)
                {
                    success(paymentReceipt);
                }
                else
                {
                    throw new Exception("SuccessCallback is not set.");
                }
            }
            else
            {
                // Failure
                if (failure != 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
                        failure(judoError, paymentreceipt);
                    }
                    else
                    {
                        failure(judoError);
                    }
                }
                else
                {
                    throw new Exception("FailureCallback is not set.");
                }
            }
        }
예제 #23
0
        public async void ApplePayFailure(JudoError error, PaymentReceiptModel receipt = null)
        {
            await Navigation.PopAsync();

            await DisplayAlert("Payment error", "", "OK");
        }
        public void MakeTokenPayment()
        {
            try {
                LoadingScreen.ShowLoading(this.View);
                var instance = JudoConfiguration.Instance;
                tokenPayment.CV2 = tokenCell.CCV;

                PaymentButton.Disable();


                _paymentService.MakeTokenPreAuthorisation(tokenPayment, 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 (result != null && !result.HasError && result.Response.Result != "Declined")
                        {
                            PaymentReceiptModel paymentreceipt = result.Response as PaymentReceiptModel;
                            // call success callback
                            if (successCallback != null)
                            {
                                DispatchQueue.MainQueue.DispatchAfter(DispatchTime.Now, () => {
                                    NavigationController.CloseView();

                                    successCallback(paymentreceipt);
                                });
                            }
                        }
                        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);
                    });
                }
            }
        }