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(); } } }
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); } }
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."); } } }
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); } }
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); } }
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(); }
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); } }
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); } }
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()); }); }
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); } } } }
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); } } }
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); } }
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(); }); }
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); } }
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); }; }
private void FailurePayment (JudoError error, PaymentReceiptModel receipt) { }
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); }); } } }
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 ()); }); }
private void FailurePayment(JudoError error, PaymentReceiptModel receipt) { }
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."); } } }
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); }); } } }