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); }; }