public async Task <string> PostFormData(ThreeDsRequest request)
        {
            Guard.ArgumentNotNull(request, nameof(request));

            request.Md = this.GetMerchantId();
            var data       = Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(request));
            var webRequest = WebRequest.Create(request.PostUrl);

            webRequest.Method        = "POST";
            webRequest.ContentType   = "application/x-www-form-urlencoded";
            webRequest.ContentLength = data.Length;
            this.logger.LogTrace($"Start send form data {request.ToJson()}");
            var stream = await webRequest.GetRequestStreamAsync();

            await stream.WriteAsync(data, 0, data.Length);

            stream.Close();
            var response = await webRequest.GetResponseAsync();

            if (response == null)
            {
                throw new BadRequestException($"Failure post form data for 3D secure. Data: {request.ToJson()}. WebRequest: {webRequest.ToJson()}");
            }

            string result;

            using (var sr = new StreamReader(response.GetResponseStream()))
            {
                result = await sr.ReadToEndAsync();

                sr.Close();
            }

            return(result.Split("value").Last().Split("\"")[1]);
        }
        protected async Task <PaymentResponse> Make3dsCardPayment(bool attemptN3d = false)
        {
            var phone          = GetPhone();
            var billingAddress = GetAddress();

            var requestCardSource = new RequestCardSource
            {
                Name           = TestCardSource.Visa.Name,
                Number         = TestCardSource.Visa.Number,
                ExpiryYear     = TestCardSource.Visa.ExpiryYear,
                ExpiryMonth    = TestCardSource.Visa.ExpiryMonth,
                Cvv            = TestCardSource.Visa.Cvv,
                BillingAddress = billingAddress,
                Phone          = phone
            };

            var threeDsRequest = new ThreeDsRequest
            {
                Enabled    = true,
                AttemptN3D = attemptN3d,
                Eci        = attemptN3d ? "05" : null,
                Cryptogram = attemptN3d ? "AgAAAAAAAIR8CQrXcIhbQAAAAAA" : null,
                Xid        = attemptN3d ? "MDAwMDAwMDAwMDAwMDAwMzIyNzY=" : null,
                Version    = "2.0.1"
            };

            var customerRequest = new CustomerRequest {
                Email = GenerateRandomEmail()
            };

            var paymentRequest = new PaymentRequest
            {
                Source    = requestCardSource,
                Capture   = false,
                Reference = Guid.NewGuid().ToString(),
                Amount    = 10L,
                Currency  = Currency.USD,
                Customer  = customerRequest,
                ThreeDs   = threeDsRequest
            };

            var paymentResponse = await PreviousApi.PaymentsClient().RequestPayment(paymentRequest);

            paymentResponse.ShouldNotBeNull();
            return(paymentResponse);
        }